Beispiel #1
0
    private float PerformOneIteration(Chain chain, Transform target)
    {
        int boneCount = chain.BoneCount;

        // FORWARD STEP
        chain.AttachBoneToChildPos(boneCount - 1, target.position, false);

        int i = boneCount - 2;

        while (i >= 0)
        {
            chain.AttachBoneToChild(i--, false);

            // TODO: Constraints
        }


        //BACKWARD STEP
        chain.AttachBoneToParentPos(0, chain.OriginalRootPos, false);
        i = 1;
        while (i < boneCount)
        {
            chain.AttachBoneToParent(i++, false);

            // TODO: Constraints
        }

        return(Vector3.Distance(chain.EndEffector.Position, target.position));
    }
Beispiel #2
0
    private static void BackwardStep(Chain chain, Transform target, int startJoint, Vector3 startJointPos)
    {
        chain.AttachBoneToParentPos(startJoint, startJointPos, false);

        int i = startJoint + 1;

        while (i < chain.BoneCount)
        {
            chain.AttachBoneToParent(i, false);
            i++;
        }
    }
Beispiel #3
0
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            show = !show;
        }

        if (Input.GetKeyDown(KeyCode.I))
        {
            // Apply IK
            Chain c = visualizer.GetChain();
            c.GetBone(1).Move(new Vector3(1, 0, 0));
            visualizer.SetChain(c);
        }

        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            Chain c = visualizer.GetChain();
            c.AttachBoneToParent(1);
            visualizer.SetChain(c);
        }

        if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            Chain c = visualizer.GetChain();
            c.AttachBoneToParent(1, false);
            visualizer.SetChain(c);
        }

        if (Input.GetKeyDown(KeyCode.Alpha3))
        {
            Chain c = visualizer.GetChain();
            c.AttachBoneToChild(0);
            visualizer.SetChain(c);
        }

        if (Input.GetKeyDown(KeyCode.Alpha4))
        {
            Chain c = visualizer.GetChain();
            c.AttachBoneToChild(0, false);
            visualizer.SetChain(c);
        }

        if (Input.GetKeyDown(KeyCode.F))
        {
            if (target == null)
            {
                return;
            }

            Chain c = visualizer.GetChain();
            Chain_FABRIK.Solve(c, target);
            visualizer.SetChain(c);
        }

        if (Input.GetKeyDown(KeyCode.A))
        {
            applyTransforms = !applyTransforms;
        }

        if (show)
        {
            visualizer.Show();
        }
        else
        {
            visualizer.Hide();
        }
    }