public HVRPosableFingerData GetFingerData() { var finger = new HVRPosableFingerData { Bones = new List <HVRPosableBoneData>() }; foreach (var bone in Bones) { finger.Bones.Add(bone.GetBoneData()); } return(finger); }
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; } } }
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); }