VR4Medical/ICI/Library/PackageCache/com.unity.xr.openxr@3903c1059bcf/Samples~/ControllerXRInput/Scripts/ActionToVisibilityXRInputHand.cs
2025-07-29 13:45:50 +03:00

75 lines
2.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine.XR.OpenXR.Input;
namespace UnityEngine.XR.OpenXR.Samples.ControllerSampleXRInput
{
public class ActionToVisibilityXRInputHand : MonoBehaviour
{
[SerializeField]
bool m_IsRightHand;
[SerializeField]
GameObject m_Target;
[SerializeField]
string m_HandDeviceName;
[SerializeField]
string m_UsageString;
List<InputDevice> m_DevicesReuse;
List<InputFeatureUsage> m_UsagesReuse;
void OnEnable()
{
m_DevicesReuse = new List<InputDevice>();
m_UsagesReuse = new List<InputFeatureUsage>();
if (m_Target == null)
m_Target = gameObject;
m_Target.SetActive(false);
StartCoroutine(UpdateVisibility());
}
IEnumerator UpdateVisibility()
{
while (isActiveAndEnabled)
{
InputDevices.GetDevicesWithCharacteristics(
m_IsRightHand
? InputDeviceCharacteristics.Right
: InputDeviceCharacteristics.Left,
m_DevicesReuse);
var device = new InputDevice();
for (int deviceIndex = 0; deviceIndex < m_DevicesReuse.Count; ++deviceIndex)
{
if (m_DevicesReuse[deviceIndex].name != m_HandDeviceName)
continue;
device = m_DevicesReuse[deviceIndex];
break;
}
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);
}
}
}
}