Beispiel #1
0
        public HVRPosableFingerData GetFingerData()
        {
            var finger = new HVRPosableFingerData
            {
                Bones = new List <HVRPosableBoneData>()
            };

            foreach (var bone in Bones)
            {
                finger.Bones.Add(bone.GetBoneData());
            }

            return(finger);
        }
Beispiel #2
0
        private void PoseFinger(HVRPosableFinger finger, HVRPosableFingerData data)
        {
            if (finger == null || data == null)
            {
                return;
            }

            if (finger.Bones == null || data.Bones == null)
            {
                return;
            }

            for (int i = 0; i < finger.Bones.Count; i++)
            {
                var bone = finger.Bones[i];
                if (data.Bones.Count - 1 >= i)
                {
                    var boneData = data.Bones[i];
                    bone.Transform.localPosition = boneData.Position;
                    bone.Transform.localRotation = boneData.Rotation;
                }
            }
        }
Beispiel #3
0
        private HVRPosableFingerData MirrorFinger(HVRPosableFinger finger, HVRJointMirrorSetting mirrorOverride, List <HVRJointMirrorSetting> settings)
        {
            var fingerData = new HVRPosableFingerData();

            for (var i = 0; i < finger.Bones.Count; i++)
            {
                var bone     = finger.Bones[i];
                var boneData = new HVRPosableBoneData();



                HVRJointMirrorSetting mirror = null;


                if (settings != null && i < settings.Count)
                {
                    mirror = settings[i];
                }
                else if (mirrorOverride != null)
                {
                    mirror = mirrorOverride;
                }

                if (mirror != null)
                {
                    var euler = bone.Transform.localRotation.eulerAngles;

                    var xAngle = euler.x;
                    var yAngle = euler.y;
                    var zAngle = euler.z;

                    MirrorRotation(mirror.XRotation, ref xAngle);
                    MirrorRotation(mirror.YRotation, ref yAngle);
                    MirrorRotation(mirror.ZRotation, ref zAngle);

                    boneData.Position = bone.Transform.localPosition;
                    boneData.Rotation = Quaternion.Euler(xAngle, yAngle, zAngle);

                    if (mirror.XPosition == FingerMirrorPosition.Opposite)
                    {
                        boneData.Position.x *= -1f;
                    }

                    if (mirror.YPosition == FingerMirrorPosition.Opposite)
                    {
                        boneData.Position.y *= -1f;
                    }

                    if (mirror.ZPosition == FingerMirrorPosition.Opposite)
                    {
                        boneData.Position.z *= -1f;
                    }
                }
                else
                {
                    boneData.Position = bone.Transform.localPosition * -1;
                    boneData.Rotation = bone.Transform.localRotation;
                }

                fingerData.Bones.Add(boneData);
            }

            return(fingerData);
        }