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 Vector3 ForwardStep(Chain chain, Transform target, int startJoint)
    {
        Vector3 startJointPos = chain.GetJoints()[startJoint].Position;

        chain.AttachBoneToChildPos(chain.BoneCount - 1, target.position, false);

        int i = chain.BoneCount - 2;

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

        return(startJointPos);
    }