/* * Draws the scene view helpers for IKSolverFullBodyBiped * */ public static void AddScene(IKSolverFullBodyBiped solver, Color color, bool modifiable, ref int selectedEffector, Transform root) { if (!solver.IsValid(false)) { return; } float heightF = Vector3.Distance(solver.chain.children[0].nodes[0].transform.position, solver.chain.children[0].nodes[1].transform.position) + Vector3.Distance(solver.chain.children[2].nodes[0].transform.position, solver.chain.children[2].nodes[1].transform.position); float size = Mathf.Clamp(heightF * 0.1f, 0.005f, 0.05f); // Chain if (!Application.isPlaying) { IKSolverFullBodyInspector.AddChain(solver.chain, color, size); Handles.DrawLine(solver.chain.children[0].nodes[0].transform.position, solver.chain.children[1].nodes[0].transform.position); Handles.DrawLine(solver.chain.children[2].nodes[0].transform.position, solver.chain.children[3].nodes[0].transform.position); AddLimbHelper(solver.chain.children[0], size); AddLimbHelper(solver.chain.children[1], size); AddLimbHelper(solver.chain.children[2], size, root); AddLimbHelper(solver.chain.children[3], size, root); } // Effectors IKSolverFullBodyInspector.AddScene(solver, color, modifiable, ref selectedEffector, size); }
// Draws the scene view helpers for IKSolverFullBodyBiped public static void AddScene(UnityEngine.Object target, IKSolverFullBodyBiped solver, Color color, ref int selectedEffector, Transform root) { if (Application.isPlaying && !solver.initiated) { return; } if (!Application.isPlaying && !solver.IsValid()) { return; } bool modifiable = solver.initiated; float heightF = Vector3.Distance(solver.chain[1].nodes[0].transform.position, solver.chain[1].nodes[1].transform.position) + Vector3.Distance(solver.chain[3].nodes[0].transform.position, solver.chain[3].nodes[1].transform.position); float size = Mathf.Clamp(heightF * 0.075f, 0.001f, Mathf.Infinity); // Bend goals for (int i = 0; i < solver.chain.Length; i++) { if (solver.chain[i].nodes.Length == 3 && solver.chain[i].bendConstraint.bendGoal != null && solver.chain[i].bendConstraint.weight > 0f) { Color c = color; c.a = solver.chain[i].bendConstraint.weight; Handles.color = c; Handles.DrawLine(solver.chain[i].nodes[1].transform.position, solver.chain[i].bendConstraint.bendGoal.position); Handles.SphereHandleCap(0, solver.chain[i].nodes[1].transform.position, Quaternion.identity, size * 0.5f, EventType.Repaint); Handles.SphereHandleCap(0, solver.chain[i].bendConstraint.bendGoal.position, Quaternion.identity, size * 0.5f, EventType.Repaint); Handles.color = Color.white; } } // Chain if (!modifiable) { for (int i = 0; i < solver.chain.Length; i++) { IKSolverFullBodyInspector.AddChain(solver.chain, i, color, size); } Handles.DrawLine(solver.chain[1].nodes[0].transform.position, solver.chain[2].nodes[0].transform.position); Handles.DrawLine(solver.chain[3].nodes[0].transform.position, solver.chain[4].nodes[0].transform.position); AddLimbHelper(solver.chain[1], size); AddLimbHelper(solver.chain[2], size); AddLimbHelper(solver.chain[3], size, root); AddLimbHelper(solver.chain[4], size, root); } // Effectors IKSolverFullBodyInspector.AddScene(target, solver, color, modifiable, ref selectedEffector, size); }