| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- using UnityEngine.XR.Interaction.Toolkit.Inputs.Readers;
- namespace UnityEngine.XR.Interaction.Toolkit.Samples.StarterAssets
- {
- /// <summary>
- /// Component which reads input values and drives the thumbstick, trigger, and grip transforms
- /// to animate a controller model.
- /// </summary>
- public class ControllerAnimator : MonoBehaviour
- {
- [Header("Thumbstick")]
- [SerializeField]
- Transform m_ThumbstickTransform;
- [SerializeField]
- Vector2 m_StickRotationRange = new Vector2(30f, 30f);
- [SerializeField]
- XRInputValueReader<Vector2> m_StickInput = new XRInputValueReader<Vector2>("Thumbstick");
- [Header("Trigger")]
- [SerializeField]
- Transform m_TriggerTransform;
- [SerializeField]
- Vector2 m_TriggerXAxisRotationRange = new Vector2(0f, -15f);
- [SerializeField]
- XRInputValueReader<float> m_TriggerInput = new XRInputValueReader<float>("Trigger");
- [Header("Grip")]
- [SerializeField]
- Transform m_GripTransform;
- [SerializeField]
- Vector2 m_GripRightRange = new Vector2(-0.0125f, -0.011f);
- [SerializeField]
- XRInputValueReader<float> m_GripInput = new XRInputValueReader<float>("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);
- }
- }
- }
- }
|