84 lines
No EOL
2.9 KiB
C#
84 lines
No EOL
2.9 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
} |