// 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
|
|
|
|
/// <summary>
|
|
/// The Controller Tracker enables the GameObject to track it's position/rotation to the available connected VR Controller via the `UnityEngine.VR` library.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// The Unity Controller Tracker is attached to the `[UnityBase_CameraRig]` prefab on the child `LeftHandAnchor` and `RightHandAnchor` to enable controller tracking.
|
|
/// </remarks>
|
|
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>(T item) where T : class
|
|
{
|
|
return VRTK_SharedMethods.GetPropertyFirstName<T>();
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|