コード例 #1
0
        public bool AutoVertical(Transform HandOTarget, Transform HandTarget, Arm oneArm)
        {
            Vector3 neckDelta = Vector3.zero;

            Vector3 ToTarget = HandOTarget.position - oneArm.upperArmStart.position;
            float   Over     = ToTarget.magnitude - oneArm.length;

            if (Over > 0)
            {
                neckDelta = ToTarget.normalized * Over;
            }

            float dY = neckStart.position.y + neckDelta.y - neck.position.y;

            if (hips.position.y + dY < hipsStart.position.y)
            {
                hips.Translate(0, dY, 0, Space.World);
            }
            else if (hips.position.y + dY > hipsStart.position.y)
            {
                hips.position = hipsStart.position;
            }

            oneArm.Calculate(HandTarget);

            return(hips.position.y < hipsStart.position.y);
        }
コード例 #2
0
        public float AutoHorizontal(Transform HandOTarget, Transform HandTarget, Arm oneArm, Transform opositeUpperArm)
        {
            float   bendAngle     = 0;
            Vector3 torsoTarget   = Vector3.zero;
            Vector3 dShoulderNeck = (opositeUpperArm.position - oneArm.upperArm.position) / 2;

            Vector3 ToTarget = HandOTarget.position - oneArm.upperArmStart.position;
            float   Over     = ToTarget.magnitude - oneArm.length;

            if (Over > 0)
            {
                torsoTarget    = HandOTarget.position + dShoulderNeck;
                bendAngle      = BendAngle(torsoTarget, oneArm);            // arm should be left or right
                spine.rotation = spineStartRotation * Quaternion.AngleAxis(bendAngle, spineAxis);
            }
            else
            {
                spine.rotation = spineStartRotation;
            }

            oneArm.Calculate(HandTarget);

            return(bendAngle);
        }
コード例 #3
0
        public bool AutoVertical(Transform HandOTarget, Transform HandTarget, Arm oneArm)
        {
            Vector3 neckDelta = Vector3.zero;

            Vector3 ToTarget = HandOTarget.position - oneArm.upperArmStart.position;
            float Over = ToTarget.magnitude - oneArm.length;
            if (Over > 0)
                neckDelta = ToTarget.normalized * Over;

            float dY = neckStart.position.y + neckDelta.y - neck.position.y;

            if (hips.position.y + dY < hipsStart.position.y)  {
                hips.Translate(0, dY, 0, Space.World);
            } else if (hips.position.y + dY > hipsStart.position.y) {
                hips.position = hipsStart.position;
            }

            oneArm.Calculate(HandTarget);

            return (hips.position.y < hipsStart.position.y);
        }
コード例 #4
0
        public float AutoHorizontal(Transform HandOTarget, Transform HandTarget, Arm oneArm, Transform opositeUpperArm)
        {
            float bendAngle = 0;
            Vector3 torsoTarget = Vector3.zero;
            Vector3 dShoulderNeck = (opositeUpperArm.position - oneArm.upperArm.position) / 2;

            Vector3 ToTarget = HandOTarget.position - oneArm.upperArmStart.position;
            float Over = ToTarget.magnitude - oneArm.length;

            if (Over > 0) {
                torsoTarget = HandOTarget.position + dShoulderNeck;
                bendAngle = BendAngle(torsoTarget, oneArm); // arm should be left or right
                spine.rotation = spineStartRotation * Quaternion.AngleAxis(bendAngle, spineAxis);
            } else
                spine.rotation = spineStartRotation;

            oneArm.Calculate(HandTarget);

            return bendAngle;
        }