Files
PrinceOfGlory/Packages/com.unity.xr.openxr/Samples~/ControllerXRInput/Scripts/ActionToVisibilityXRInput.cs
2026-03-03 03:15:46 +08:00

55 lines
1.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine.XR.OpenXR.Input;
namespace UnityEngine.XR.OpenXR.Samples.ControllerSampleXRInput
{
public class ActionToVisibilityXRInput : MonoBehaviour
{
[SerializeField]
XRNode m_XRNode;
[SerializeField]
GameObject m_Target;
[SerializeField]
string m_UsageString;
List<InputFeatureUsage> m_UsagesReuse;
void OnEnable()
{
m_UsagesReuse = new List<InputFeatureUsage>();
if (m_Target == null)
m_Target = gameObject;
m_Target.SetActive(false);
StartCoroutine(UpdateVisibility());
}
IEnumerator UpdateVisibility()
{
while (isActiveAndEnabled)
{
var device = InputDevices.GetDeviceAtXRNode(m_XRNode);
if (device.isValid && device.TryGetFeatureUsages(m_UsagesReuse) && m_UsagesReuse.Count > 0)
{
for (int usageIndex = 0; usageIndex < m_UsagesReuse.Count; ++usageIndex)
{
if (m_UsagesReuse[usageIndex].name == m_UsageString)
{
m_Target.SetActive(true);
break;
}
}
break;
}
yield return new WaitForSeconds(1.0f);
}
}
}
}