void Awake() { // Create both the rope and the solver: rope = gameObject.AddComponent <ObiRope>(); renderer = gameObject.AddComponent <ObiRopeExtrudedRenderer>(); curve = gameObject.AddComponent <ObiCurve>(); 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; renderer.section = section; renderer.uvScale = new Vector2(1, 5); renderer.normalizeV = false; renderer.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>(); 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; }
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)); }