void Awake() { // Create both the rope and the solver: rope = gameObject.AddComponent <ObiRope>(); curve = gameObject.AddComponent <ObiCatmullRomCurve>(); solver = gameObject.AddComponent <ObiSolver>(); // Provide a solver and a curve: rope.Solver = solver; rope.ropePath = curve; rope.GetComponent <MeshRenderer>().material = material; // Configure rope and solver parameters: rope.resolution = 0.1f; rope.BendingConstraints.stiffness = 0.2f; rope.uvScale = new Vector2(1, 5); rope.normalizeV = false; rope.uvAnchor = 1; solver.substeps = 3; solver.distanceConstraintParameters.iterations = 5; solver.pinConstraintParameters.iterations = 5; solver.bendingConstraintParameters.iterations = 1; solver.particleCollisionConstraintParameters.enabled = false; solver.volumeConstraintParameters.enabled = false; solver.densityConstraintParameters.enabled = false; solver.stitchConstraintParameters.enabled = false; solver.skinConstraintParameters.enabled = false; solver.tetherConstraintParameters.enabled = false; // Add a cursor to be able to change rope length: cursor = rope.gameObject.AddComponent <ObiRopeCursor>(); cursor.normalizedCoord = 0; cursor.direction = true; }
void Awake() { // Create both the rope and the solver: rope = gameObject.AddComponent <ObiRope>(); curve = gameObject.AddComponent <ObiCatmullRomCurve>(); solver = gameObject.AddComponent <ObiSolver>(); // Provide a solver and a curve: rope.Solver = solver; rope.ropePath = curve; rope.GetComponent <MeshRenderer>().material = material; // Configure rope and solver parameters: rope.resolution = 0.1f; rope.BendingConstraints.stiffness = 0.2f; rope.UVScale = new Vector2(1, 5); rope.NormalizeV = false; rope.UVAnchor = 1; 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; }
void Start() { thrower = GetComponent <Thrower>(); cursor = GetComponent <ObiRopeCursor>(); rope = cursor.GetComponent <ObiRope>(); hook.grapple = this; StartCoroutine(RetrieveGrappleIE()); }
/// <summary> /// Creates a straight rope anchored to a transform at the top. /// Transform may or may not move around and may or may not have a rigidbody. /// When you call this the rope will appear in the scene and immediately interact with gravity and objects with ObiColliders. /// Called from anywhere (main thread only) /// </summary> public IEnumerator MakeRope(Transform anchoredTo, Vector3 attachmentOffset, float ropeLength) { // create a new GameObject with the required components: a solver, a rope, and a curve. // we also throw a cursor in to be able to change its length. GameObject ropeObject = new GameObject("rope", typeof(ObiSolver), typeof(ObiRope), typeof(ObiCatmullRomCurve), typeof(ObiRopeCursor)); // get references to all components: rope = ropeObject.GetComponent <ObiRope>(); cursor = ropeObject.GetComponent <ObiRopeCursor>(); solver = ropeObject.GetComponent <ObiSolver>(); ObiCatmullRomCurve path = ropeObject.GetComponent <ObiCatmullRomCurve>(); // set up component references (see ObiRopeHelper.cs) rope.Solver = solver; rope.ropePath = path; rope.section = Resources.Load <ObiRopeSection>("DefaultRopeSection"); // set path control points (duplicate end points, to set curvature as required by CatmullRom splines): path.controlPoints.Clear(); path.controlPoints.Add(Vector3.zero); path.controlPoints.Add(Vector3.zero); path.controlPoints.Add(Vector3.down * ropeLength); path.controlPoints.Add(Vector3.down * ropeLength); rope.pooledParticles = 2000; // parent the rope to the anchor transform: rope.transform.SetParent(anchoredTo, false); rope.transform.localPosition = attachmentOffset; // generate particles/constraints and add them to the solver (see ObiRopeHelper.cs) yield return(rope.StartCoroutine(rope.GeneratePhysicRepresentationForMesh())); rope.AddToSolver(null); // get the last particle in the rope at its rest state. pinnedParticle = rope.UsedParticles - 1; // add a tethers batch: ObiTetherConstraintBatch tetherBatch = new ObiTetherConstraintBatch(true, false, 0, 1); rope.TetherConstraints.AddBatch(tetherBatch); //UpdateTethers(); // fix first particle in place (see http://obi.virtualmethodstudio.com/tutorials/scriptingparticles.html) rope.invMasses[0] = 0; Oni.SetParticleInverseMasses(solver.OniSolver, new float[] { 0 }, 1, rope.particleIndices[0]); }
void Awake() { // Create both the rope and the solver: rope = gameObject.AddComponent <ObiRope>(); ropeRenderer = gameObject.AddComponent <ObiRopeExtrudedRenderer>(); ropeRenderer.section = section; ropeRenderer.uvScale = new Vector2(1, 5); ropeRenderer.normalizeV = false; ropeRenderer.uvAnchor = 1; rope.GetComponent <MeshRenderer>().material = material; // Setup a blueprint for the rope: blueprint = ScriptableObject.CreateInstance <ObiRopeBlueprint>(); blueprint.resolution = 0.5f; // Tweak rope parameters: rope.maxBending = 0.02f; // Add a cursor to be able to change rope length: cursor = rope.gameObject.AddComponent <ObiRopeCursor>(); cursor.cursorMu = 0; cursor.direction = true; }
// Use this for initialization void Start() { cursor = GetComponentInChildren <ObiRopeCursor>(); rope = cursor.GetComponent <ObiRope>(); }
// Use this for initialization void Start() { rope = GetComponent <ObiRope>(); cursor = GetComponent <ObiRopeCursor>(); }
// Use this for initialization void Start() { cursor = GetComponentInChildren <ObiRopeCursor>(); rope = cursor.GetComponent <ObiRope>(); PlayerAndJoystickController.Instance.RopeSize += RopeSizeController; }
private void Awake() { cursor = GetComponentInChildren <ObiRopeCursor>(); plugs = GetComponentsInChildren <PlugManager>(); }
void Start() { GameObject solverObject = new GameObject("String Solver", typeof(ObiSolver), typeof(ObiFixedUpdater)); ObiSolver solver = solverObject.GetComponent <ObiSolver>(); ObiFixedUpdater updater = solverObject.GetComponent <ObiFixedUpdater>(); updater.solvers.Add(solver); solverObject.AddComponent(typeof(HexPathFinder)); solver.distanceConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 100); solver.particleCollisionConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 30); solver.collisionConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 30); solver.tetherConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 50); // Disable solver.skinConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); solver.densityConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); solver.stretchShearConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); solver.stitchConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); solver.volumeConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); solver.bendTwistConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); solver.shapeMatchingConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); // solver.frictionConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); // solver.particleFrictionConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); // create the blueprint: (ltObiRopeBlueprint, ObiRodBlueprint) var blueprint = ScriptableObject.CreateInstance <ObiRopeBlueprint>(); blueprint.pooledParticles = 20000; blueprint.resolution = 1f; // Procedurally generate the rope path (a simple straight line): blueprint.path.Clear(); blueprint.path.AddControlPoint( new Vector3(0, 0.011f, 0), -Vector3.right, Vector3.right, Vector3.up, 0.005f, 0.005f, 0.03f, 1, Color.white, "start" ); blueprint.path.AddControlPoint( new Vector3(0, 0.5f, 0), -Vector3.right, Vector3.right, Vector3.up, 0.005f, 0.005f, 0.03f, 1, Color.white, "end" ); blueprint.path.FlushEvents(); blueprint.GenerateImmediate(); GameObject ropeObject = new GameObject("String", typeof(ObiRope), typeof(ObiRopeExtrudedRenderer)); ObiRope rope = ropeObject.GetComponent <ObiRope>(); ObiRopeExtrudedRenderer ropeRenderer = ropeObject.GetComponent <ObiRopeExtrudedRenderer>(); MeshRenderer ropeMesh = ropeObject.GetComponent <MeshRenderer>(); if (stringMaterial == null) { ropeMesh.material = new Material(Shader.Find("StringShader")); } else { ropeMesh.material = stringMaterial; } ropeRenderer.section = Resources.Load <ObiRopeSection>("DefaultRopeSection"); rope.ropeBlueprint = ScriptableObject.Instantiate(blueprint); rope.transform.parent = solver.transform; // rope.collisionMaterial = collisionMaterial; rope.selfCollisions = false; rope.stretchingScale = 1; ObiRopeCursor cursor = ropeObject.AddComponent(typeof(ObiRopeCursor)) as ObiRopeCursor; cursor.cursorMu = 0.5f; cursor.sourceMu = 0.5f; ObiParticleAttachment groundAttach = ropeObject.AddComponent(typeof(ObiParticleAttachment)) as ObiParticleAttachment; ObiParticleAttachment charAttach = ropeObject.AddComponent(typeof(ObiParticleAttachment)) as ObiParticleAttachment; groundAttach.target = GameObject.Find("Floor").transform; // groundAttach.attachmentType = ObiParticleAttachment.AttachmentType.Dynamic; groundAttach.particleGroup = blueprint.groups[0]; charAttach.target = GameObject.Find("Ariadne").transform; charAttach.attachmentType = ObiParticleAttachment.AttachmentType.Dynamic; charAttach.particleGroup = blueprint.groups[1]; ropeObject.AddComponent(typeof(StringController)); }
// Use this for initialization void Start() { cursor = GetComponentInChildren <ObiRopeCursor>(); //gets the cursor component on the rope object rope = cursor.GetComponent <ObiRope>(); }
void Start() { cursor = GetComponentInChildren <ObiRopeCursor>(); rope = cursor.GetComponent <ObiRope>(); cursor.ChangeLength(length); }