123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- 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);
- }
- }
- }
|