using UnityEngine.XR.Interaction.Toolkit.Inputs.Readers; namespace UnityEngine.XR.Interaction.Toolkit.Samples.StarterAssets { /// /// Component which reads input values and drives the thumbstick, trigger, and grip transforms /// to animate a controller model. /// public class ControllerAnimator : MonoBehaviour { [Header("Thumbstick")] [SerializeField] Transform m_ThumbstickTransform; [SerializeField] Vector2 m_StickRotationRange = new Vector2(30f, 30f); [SerializeField] XRInputValueReader m_StickInput = new XRInputValueReader("Thumbstick"); [Header("Trigger")] [SerializeField] Transform m_TriggerTransform; [SerializeField] Vector2 m_TriggerXAxisRotationRange = new Vector2(0f, -15f); [SerializeField] XRInputValueReader m_TriggerInput = new XRInputValueReader("Trigger"); [Header("Grip")] [SerializeField] Transform m_GripTransform; [SerializeField] Vector2 m_GripRightRange = new Vector2(-0.0125f, -0.011f); [SerializeField] XRInputValueReader m_GripInput = new XRInputValueReader("Grip"); void OnEnable() { if (m_ThumbstickTransform == null || m_GripTransform == null || m_TriggerTransform == null) { enabled = false; Debug.LogWarning($"Controller Animator component missing references on {gameObject.name}", this); return; } m_StickInput?.EnableDirectActionIfModeUsed(); m_TriggerInput?.EnableDirectActionIfModeUsed(); m_GripInput?.EnableDirectActionIfModeUsed(); } void OnDisable() { m_StickInput?.DisableDirectActionIfModeUsed(); m_TriggerInput?.DisableDirectActionIfModeUsed(); m_GripInput?.DisableDirectActionIfModeUsed(); } void Update() { if (m_StickInput != null) { var stickVal = m_StickInput.ReadValue(); m_ThumbstickTransform.localRotation = Quaternion.Euler(-stickVal.y * m_StickRotationRange.x, 0f, -stickVal.x * m_StickRotationRange.y); } if (m_TriggerInput != null) { var triggerVal = m_TriggerInput.ReadValue(); m_TriggerTransform.localRotation = Quaternion.Euler(Mathf.Lerp(m_TriggerXAxisRotationRange.x, m_TriggerXAxisRotationRange.y, triggerVal), 0f, 0f); } if (m_GripInput != null) { var gripVal = m_GripInput.ReadValue(); var currentPos = m_GripTransform.localPosition; m_GripTransform.localPosition = new Vector3(Mathf.Lerp(m_GripRightRange.x, m_GripRightRange.y, gripVal), currentPos.y, currentPos.z); } } } }