mirror of
https://udrimavric.com/MAVRIC/Stratasys-450mc-VR.git
synced 2025-01-22 15:18:33 -05:00
80 lines
2.7 KiB
C#
80 lines
2.7 KiB
C#
using UnityEngine.Playables;
|
|
using UnityEngine.XR.Interaction.Toolkit;
|
|
|
|
namespace UnityEngine.XR.Content.Interaction
|
|
{
|
|
/// <summary>
|
|
/// Component that when paired with an interactable will drive an associated timeline with the activate button
|
|
/// Must be used with an action-based controller
|
|
/// </summary>
|
|
public class InteractionAnimator : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
[Tooltip("The timeline to drive with the activation button.")]
|
|
PlayableDirector m_ToAnimate;
|
|
|
|
bool m_Animating;
|
|
XRBaseController m_Controller;
|
|
|
|
void Start()
|
|
{
|
|
// We want to hook up to the Select events so we can read data about the interacting controller
|
|
var interactable = GetComponent<IXRSelectInteractable>();
|
|
if (interactable == null || interactable as Object == null)
|
|
{
|
|
Debug.LogWarning($"No interactable on {name} - no animation will be played.", this);
|
|
enabled = false;
|
|
return;
|
|
}
|
|
|
|
if (m_ToAnimate == null)
|
|
{
|
|
Debug.LogWarning($"No timeline configured on {name} - no animation will be played.", this);
|
|
enabled = false;
|
|
return;
|
|
}
|
|
|
|
interactable.selectEntered.AddListener(OnSelect);
|
|
interactable.selectExited.AddListener(OnDeselect);
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if (m_Animating && m_Controller != null)
|
|
{
|
|
var floatValue = m_Controller.activateInteractionState.value;
|
|
m_ToAnimate.time = floatValue;
|
|
}
|
|
}
|
|
|
|
void OnSelect(SelectEnterEventArgs args)
|
|
{
|
|
// Get the controller from the interactor, and then the activation control from there
|
|
var controllerInteractor = args.interactorObject as XRBaseControllerInteractor;
|
|
if (controllerInteractor == null)
|
|
{
|
|
Debug.LogWarning($"Selected by {args.interactorObject.transform.name}, which is not an XRBaseControllerInteractor", this);
|
|
return;
|
|
}
|
|
|
|
m_Controller = controllerInteractor.xrController;
|
|
if (m_Controller == null)
|
|
{
|
|
Debug.LogWarning($"Selected by {controllerInteractor.name}, which does not have a valid XRBaseController", this);
|
|
return;
|
|
}
|
|
|
|
// Ready to animate
|
|
m_ToAnimate.Play();
|
|
m_Animating = true;
|
|
}
|
|
|
|
void OnDeselect(SelectExitEventArgs args)
|
|
{
|
|
m_Animating = false;
|
|
m_ToAnimate.Stop();
|
|
m_Controller = null;
|
|
}
|
|
}
|
|
}
|