ControllerAnimator.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using UnityEngine.XR.Interaction.Toolkit.Inputs.Readers;
  2. namespace UnityEngine.XR.Interaction.Toolkit.Samples.StarterAssets
  3. {
  4. /// <summary>
  5. /// Component which reads input values and drives the thumbstick, trigger, and grip transforms
  6. /// to animate a controller model.
  7. /// </summary>
  8. public class ControllerAnimator : MonoBehaviour
  9. {
  10. [Header("Thumbstick")]
  11. [SerializeField]
  12. Transform m_ThumbstickTransform;
  13. [SerializeField]
  14. Vector2 m_StickRotationRange = new Vector2(30f, 30f);
  15. [SerializeField]
  16. XRInputValueReader<Vector2> m_StickInput = new XRInputValueReader<Vector2>("Thumbstick");
  17. [Header("Trigger")]
  18. [SerializeField]
  19. Transform m_TriggerTransform;
  20. [SerializeField]
  21. Vector2 m_TriggerXAxisRotationRange = new Vector2(0f, -15f);
  22. [SerializeField]
  23. XRInputValueReader<float> m_TriggerInput = new XRInputValueReader<float>("Trigger");
  24. [Header("Grip")]
  25. [SerializeField]
  26. Transform m_GripTransform;
  27. [SerializeField]
  28. Vector2 m_GripRightRange = new Vector2(-0.0125f, -0.011f);
  29. [SerializeField]
  30. XRInputValueReader<float> m_GripInput = new XRInputValueReader<float>("Grip");
  31. void OnEnable()
  32. {
  33. if (m_ThumbstickTransform == null || m_GripTransform == null || m_TriggerTransform == null)
  34. {
  35. enabled = false;
  36. Debug.LogWarning($"Controller Animator component missing references on {gameObject.name}", this);
  37. return;
  38. }
  39. m_StickInput?.EnableDirectActionIfModeUsed();
  40. m_TriggerInput?.EnableDirectActionIfModeUsed();
  41. m_GripInput?.EnableDirectActionIfModeUsed();
  42. }
  43. void OnDisable()
  44. {
  45. m_StickInput?.DisableDirectActionIfModeUsed();
  46. m_TriggerInput?.DisableDirectActionIfModeUsed();
  47. m_GripInput?.DisableDirectActionIfModeUsed();
  48. }
  49. void Update()
  50. {
  51. if (m_StickInput != null)
  52. {
  53. var stickVal = m_StickInput.ReadValue();
  54. m_ThumbstickTransform.localRotation = Quaternion.Euler(-stickVal.y * m_StickRotationRange.x, 0f, -stickVal.x * m_StickRotationRange.y);
  55. }
  56. if (m_TriggerInput != null)
  57. {
  58. var triggerVal = m_TriggerInput.ReadValue();
  59. m_TriggerTransform.localRotation = Quaternion.Euler(Mathf.Lerp(m_TriggerXAxisRotationRange.x, m_TriggerXAxisRotationRange.y, triggerVal), 0f, 0f);
  60. }
  61. if (m_GripInput != null)
  62. {
  63. var gripVal = m_GripInput.ReadValue();
  64. var currentPos = m_GripTransform.localPosition;
  65. m_GripTransform.localPosition = new Vector3(Mathf.Lerp(m_GripRightRange.x, m_GripRightRange.y, gripVal), currentPos.y, currentPos.z);
  66. }
  67. }
  68. }
  69. }