// Unity SDK Controller Tracker|SDK_Unity|005 namespace VRTK { using UnityEngine; #if UNITY_2017_2_OR_NEWER using UnityEngine.XR; #else using UnityEngine.VR; using XRNode = UnityEngine.VR.VRNode; #endif /// /// The Controller Tracker enables the GameObject to track it's position/rotation to the available connected VR Controller via the `UnityEngine.VR` library. /// /// /// The Unity Controller Tracker is attached to the `[UnityBase_CameraRig]` prefab on the child `LeftHandAnchor` and `RightHandAnchor` to enable controller tracking. /// public class SDK_UnityControllerTracker : MonoBehaviour { [Tooltip("The Unity VRNode to track.")] public XRNode nodeType; [Tooltip("The unique index to assign to the controller.")] public uint index; [Tooltip("The Unity Input name for the trigger axis.")] public string triggerAxisName = ""; [Tooltip("The Unity Input name for the grip axis.")] public string gripAxisName = ""; [Tooltip("The Unity Input name for the touchpad horizontal axis.")] public string touchpadHorizontalAxisName = ""; [Tooltip("The Unity Input name for the touchpad vertical axis.")] public string touchpadVerticalAxisName = ""; protected virtual void OnEnable() { CheckAxisIsValid(triggerAxisName, "triggerAxisName"); CheckAxisIsValid(gripAxisName, "gripAxisName"); CheckAxisIsValid(touchpadHorizontalAxisName, "touchpadHorizontalAxisName"); CheckAxisIsValid(touchpadVerticalAxisName, "touchpadVerticalAxisName"); } protected virtual string GetVarName(T item) where T : class { return VRTK_SharedMethods.GetPropertyFirstName(); } protected virtual void CheckAxisIsValid(string axisName, string varName) { try { Input.GetAxis(axisName); } catch (System.ArgumentException ae) { VRTK_Logger.Warn(ae.Message + " on index [" + index + "] variable [" + varName + "]"); } } protected virtual void FixedUpdate() { transform.localPosition = InputTracking.GetLocalPosition(nodeType); transform.localRotation = InputTracking.GetLocalRotation(nodeType); } } }