Creating Rope in runtime - Printable Version +- Obi Official Forum (https://obi.virtualmethodstudio.com/forum) +-- Forum: Obi Users Category (https://obi.virtualmethodstudio.com/forum/forum-1.html) +--- Forum: Obi Rope (https://obi.virtualmethodstudio.com/forum/forum-4.html) +--- Thread: Creating Rope in runtime (/thread-147.html) |
Creating Rope in runtime - Parker - 21-09-2017 Unity is running. Meaning this is real time. The user will not be stopping the game and creating a rope, initializing it, and putting on handles, then re-start the game. I want this to be done during runtime and with scripts. When I use the code, the rope DOES NOT work, it has no physics attached. How do you get it to work. ObiRope Rope; ObiSolver Solver; ObiCatmullRomCurve Curve; ObiRopeCursor Cursor; private void Awake() { if (Rope == null) Rope = gameObject.AddComponent<ObiRope>(); if (Curve == null) { Curve = gameObject.AddComponent<ObiCatmullRomCurve>(); Rope.ropePath = Curve; } if (Solver == null) { Solver = gameObject.AddComponent<ObiSolver>(); Rope.Solver = Solver; } // Configure rope and solver parameters: Rope.SectionThicknessScale = 0.10f; Rope.resolution = 1f; Rope.BendingConstraints.stiffness = 0.2f; Rope.UVScale = new Vector2(1, 5); Rope.NormalizeV = false; Rope.UVAnchor = 1; Rope.RestLength = 10; Solver.distanceConstraintParameters.iterations = 15; Solver.pinConstraintParameters.iterations = 15; Solver.bendingConstraintParameters.iterations = 1; // Add a cursor to change rope length: Cursor = Rope.gameObject.AddComponent<ObiRopeCursor>(); Cursor.rope = Rope; Cursor.normalizedCoord = 0; Cursor.direction = true; } public void InitRope() { Rope.UpdateVisualRepresentation(); } private IEnumerator CreateRope() { yield return Rope.GeneratePhysicRepresentationForMesh(); } public void UpdateRope() { StartCoroutine(CreateRope()); } RE: Creating Rope in runtime - phoberman - 15-12-2017 +1 Having similar problems, would love to know answer RE: Creating Rope in runtime - josemendez - 15-12-2017 (21-09-2017, 03:40 AM)Parker Wrote: Unity is running. Meaning this is real time. The user will not be stopping the game and creating a rope, initializing it, and putting on handles, then re-start the game. Hi! You're not calling rope.AddToSolver() anywhere, so the rope is not being registered in the solver. Also, your UpdateRope() function is not called anywhere in the code, so the physics representation isn´t even being generated (unless you call it elsewhere, outside of this script). Keep in mind that GeneratePhysicRepresentationForMesh must only be called once, when initializing the rope. The name of your function (UpdateRope, as opposed to InitializeRope) seems to indicate you intend to call it every frame. Also, the curve you've created has no points defined, so it won't generate any meaningful rope. Take a look at Obi/Scripts/Utils/ObiRopeHelper.cs for a complete example on how to do this. cheers! |