using UnityEngine.XR.Interaction.Toolkit.Interactors;
using UnityEngine.XR.Interaction.Toolkit.Interactors.Visuals;
namespace UnityEngine.XR.Interaction.Toolkit.Samples.Hands
{
///
/// Hides the specified GameObject when the associated interactor is blocked by an interaction within its group.
///
public class HideObjectWhenInteractorBlocked : MonoBehaviour
{
[SerializeField]
[Tooltip("The interactor that this component monitors for blockages.")]
XRBaseInteractor m_Interactor;
[SerializeField]
[Tooltip("The GameObject to hide when the interactor is blocked.")]
GameObject m_ObjectToHide;
ICurveInteractionDataProvider m_CurveInteractionDataProvider;
bool m_HasCurveDataProvider;
///
/// See .
///
void OnEnable()
{
if (m_Interactor == null || m_ObjectToHide == null)
enabled = false;
m_HasCurveDataProvider = false;
if (m_Interactor is ICurveInteractionDataProvider provider)
{
m_CurveInteractionDataProvider = provider;
m_HasCurveDataProvider = true;
}
}
///
/// See .
///
void Update()
{
if (m_HasCurveDataProvider)
m_ObjectToHide.SetActive(m_CurveInteractionDataProvider.isActive);
else
m_ObjectToHide.SetActive(m_Interactor.isActiveAndEnabled && !m_Interactor.IsBlockedByInteractionWithinGroup());
}
}
}