|
|
- namespace VRTK.Examples
- {
- using UnityEngine;
-
- public class Controller_Hand : MonoBehaviour
- {
- public enum Hands
- {
- Right,
- Left
- }
-
- public Hands hand = Hands.Right;
-
- private Transform pointerFinger;
- private Transform gripFingers;
- private float maxRotation = 90f;
- private float originalPointerRotation;
- private float originalGripRotation;
- private float targetPointerRotation;
- private float targetGripRotation;
-
- private void Start()
- {
- GetComponentInParent<VRTK_InteractGrab>().GrabButtonPressed += DoGrabOn;
- GetComponentInParent<VRTK_InteractGrab>().GrabButtonReleased += DoGrabOff;
- GetComponentInParent<VRTK_InteractUse>().UseButtonPressed += DoUseOn;
- GetComponentInParent<VRTK_InteractUse>().UseButtonReleased += DoUseOff;
-
- var handContainer = "ModelPieces";
- pointerFinger = transform.Find(handContainer + "/PointerFingerContainer");
- gripFingers = transform.Find(handContainer + "/GripFingerContainer");
-
- if (hand == Hands.Left)
- {
- InversePosition(pointerFinger);
- InversePosition(gripFingers);
- InversePosition(transform.Find(handContainer + "/Palm"));
- InversePosition(transform.Find(handContainer + "/Thumb"));
- }
-
- originalPointerRotation = pointerFinger.localEulerAngles.y;
- originalGripRotation = gripFingers.localEulerAngles.y;
-
- targetPointerRotation = originalPointerRotation;
- targetGripRotation = originalGripRotation;
- }
-
- private void InversePosition(Transform givenTransform)
- {
- givenTransform.localPosition = new Vector3(givenTransform.localPosition.x * -1, givenTransform.localPosition.y, givenTransform.localPosition.z);
- givenTransform.localEulerAngles = new Vector3(givenTransform.localEulerAngles.x, givenTransform.localEulerAngles.y * -1, givenTransform.localEulerAngles.z);
- }
-
- private void DoGrabOn(object sender, ControllerInteractionEventArgs e)
- {
- targetGripRotation = maxRotation;
- }
-
- private void DoGrabOff(object sender, ControllerInteractionEventArgs e)
- {
- targetGripRotation = originalGripRotation;
- }
-
- private void DoUseOn(object sender, ControllerInteractionEventArgs e)
- {
- targetPointerRotation = maxRotation;
- }
-
- private void DoUseOff(object sender, ControllerInteractionEventArgs e)
- {
- targetPointerRotation = originalPointerRotation;
- }
-
- private void Update()
- {
- pointerFinger.localEulerAngles = new Vector3(targetPointerRotation, 0f, 0f);
- gripFingers.localEulerAngles = new Vector3(targetGripRotation, 0f, 0f);
- }
- }
- }
|