using UnityEngine; using UnityEngine.InputSystem; /// /// Controls hand animations based on user input, managing trigger and grip actions through Unity's Input System. /// public class HandAnimationController : MonoBehaviour { // Input action for the trigger button [SerializeField] private InputActionProperty _triggerAction; // Input action for the grip button [SerializeField] private InputActionProperty _gripAction; // Controls animations for the hand private Animator _animator; // Identifier for the trigger animation parameter private int _triggerAnimationParameterID; // Identifier for the grip animation parameter private int _gripAnimationParameterID; /// /// Initializes necessary components and variables. /// private void Awake() { _animator = GetComponent(); _triggerAnimationParameterID = Animator.StringToHash("Trigger"); _gripAnimationParameterID = Animator.StringToHash("Grip"); } /// /// Subscribes to input events when the script is enabled. /// private void OnEnable() { _triggerAction.action.performed += XRController_SelectAction_Performed; _gripAction.action.performed += XRController_ActivateAction_Performed; _triggerAction.action.canceled += XRController_SelectAction_Canceled; _gripAction.action.canceled += XRController_ActivateAction_Canceled; } /// /// Unsubscribes from input events to prevent issues when the script is disabled. /// private void OnDisable() { _triggerAction.action.performed -= XRController_SelectAction_Performed; _gripAction.action.performed -= XRController_ActivateAction_Performed; _triggerAction.action.canceled -= XRController_SelectAction_Canceled; _gripAction.action.canceled -= XRController_ActivateAction_Canceled; } /// /// Handles trigger input to control the corresponding animation. /// private void XRController_SelectAction_Performed(InputAction.CallbackContext obj) { float triggerInputValue = obj.ReadValue(); _animator.SetFloat(_triggerAnimationParameterID, triggerInputValue); } /// /// Handles grip input to control the corresponding animation. /// private void XRController_ActivateAction_Performed(InputAction.CallbackContext obj) { float gripInputValue = obj.ReadValue(); _animator.SetFloat(_gripAnimationParameterID, gripInputValue); } /// /// Resets trigger animation when the trigger action is canceled. /// private void XRController_SelectAction_Canceled(InputAction.CallbackContext obj) { float triggerInputValue = 0; _animator.SetFloat(_triggerAnimationParameterID, triggerInputValue); } /// /// Resets grip animation when the grip action is canceled. /// private void XRController_ActivateAction_Canceled(InputAction.CallbackContext obj) { float gripInputValue = 0; _animator.SetFloat(_gripAnimationParameterID, gripInputValue); } }