Assignment for RMIT Mixed Reality in 2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

81 lines
2.9 KiB

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