Пример #1
0
        private Vector3 GuessPalmToThumbAxis(Transform hand, Transform forearm)
        {
            if (hand.childCount == 0)
            {
                Debug.LogWarning("Hand " + hand.name + " does not have any fingers, VRIK can not guess the hand bone's orientation. Please assign 'Wrist To Palm Axis' and 'Palm To Thumb Axis' manually for both arms in VRIK settings.", hand);
                return(Vector3.zero);
            }

            float closestSqrMag = Mathf.Infinity;
            int   thumbIndex    = 0;

            for (int i = 0; i < hand.childCount; i++)
            {
                float sqrMag = Vector3.SqrMagnitude(hand.GetChild(i).position - hand.position);
                if (sqrMag < closestSqrMag && sqrMag > 0.00001f)
                {
                    closestSqrMag = sqrMag;
                    thumbIndex    = i;
                }
            }

            Vector3 handNormal = Vector3.Cross(hand.position - forearm.position, hand.GetChild(thumbIndex).position - hand.position);
            Vector3 toThumb    = Vector3.Cross(handNormal, hand.position - forearm.position);
            Vector3 axis       = AxisTools.ToVector3(AxisTools.GetAxisToDirection(hand, toThumb));

            if (Vector3.Dot(toThumb, hand.rotation * axis) < 0f)
            {
                axis = -axis;
            }
            return(axis);
        }
Пример #2
0
        private Vector3 GuessWristToPalmAxis(Transform hand, Transform forearm)
        {
            Vector3 toForearm = forearm.position - hand.position;
            Vector3 axis      = AxisTools.ToVector3(AxisTools.GetAxisToDirection(hand, toForearm));

            if (Vector3.Dot(toForearm, hand.rotation * axis) > 0f)
            {
                axis = -axis;
            }
            return(axis);
        }
        // Token: 0x06000943 RID: 2371 RVA: 0x000410CC File Offset: 0x0003F4CC
        public static Axis GetAxisToDirection(Transform t, Vector3 direction)
        {
            Vector3 axisVectorToDirection = AxisTools.GetAxisVectorToDirection(t, direction);

            if (axisVectorToDirection == Vector3.right)
            {
                return(Axis.X);
            }
            if (axisVectorToDirection == Vector3.up)
            {
                return(Axis.Y);
            }
            return(Axis.Z);
        }
        // Token: 0x06000942 RID: 2370 RVA: 0x00041090 File Offset: 0x0003F490
        public static Axis GetAxisToPoint(Transform t, Vector3 worldPosition)
        {
            Vector3 axisVectorToPoint = AxisTools.GetAxisVectorToPoint(t, worldPosition);

            if (axisVectorToPoint == Vector3.right)
            {
                return(Axis.X);
            }
            if (axisVectorToPoint == Vector3.up)
            {
                return(Axis.Y);
            }
            return(Axis.Z);
        }
 // Token: 0x06000944 RID: 2372 RVA: 0x00041106 File Offset: 0x0003F506
 public static Vector3 GetAxisVectorToPoint(Transform t, Vector3 worldPosition)
 {
     return(AxisTools.GetAxisVectorToDirection(t, worldPosition - t.position));
 }