示例#1
0
        /*
         * 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);
        }