From 8263edd59284aba390aca011d25b79efecef4c48 Mon Sep 17 00:00:00 2001 From: pryazha Date: Wed, 2 Jul 2025 08:46:23 -0700 Subject: init --- .../Scripts/AutomaticTrackingModeChanger.cs | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Assets/Samples/OpenXR Plugin/1.14.3/Controller/Scripts/AutomaticTrackingModeChanger.cs (limited to 'Assets/Samples/OpenXR Plugin/1.14.3/Controller/Scripts/AutomaticTrackingModeChanger.cs') diff --git a/Assets/Samples/OpenXR Plugin/1.14.3/Controller/Scripts/AutomaticTrackingModeChanger.cs b/Assets/Samples/OpenXR Plugin/1.14.3/Controller/Scripts/AutomaticTrackingModeChanger.cs new file mode 100644 index 0000000..7605a2d --- /dev/null +++ b/Assets/Samples/OpenXR Plugin/1.14.3/Controller/Scripts/AutomaticTrackingModeChanger.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; + +namespace UnityEngine.XR.OpenXR.Samples.ControllerSample +{ + public class AutomaticTrackingModeChanger : MonoBehaviour + { + [SerializeField] + float m_ChangeInterval = 5.0f; + + private float m_TimeRemainingTillChange; + + static List s_InputSubsystems = new List(); + static List s_SupportedTrackingOriginModes = new List(); + + void OnEnable() + { + m_TimeRemainingTillChange = m_ChangeInterval; + } + + void Update() + { + m_TimeRemainingTillChange -= Time.deltaTime; + if (m_TimeRemainingTillChange <= 0.0f) + { + List inputSubsystems = new List(); + SubsystemManager.GetSubsystems(inputSubsystems); + XRInputSubsystem subsystem = inputSubsystems?[0]; + if (subsystem != null) + { + UpdateSupportedTrackingOriginModes(subsystem); + SetToNextMode(subsystem); + } + m_TimeRemainingTillChange += m_ChangeInterval; + } + } + + void UpdateSupportedTrackingOriginModes(XRInputSubsystem subsystem) + { + TrackingOriginModeFlags supportedOriginModes = subsystem.GetSupportedTrackingOriginModes(); + s_SupportedTrackingOriginModes.Clear(); + for (int i = 0; i < 31; i++) + { + uint modeToCheck = 1u << i; + if ((modeToCheck & ((UInt32)supportedOriginModes)) != 0) + { + s_SupportedTrackingOriginModes.Add((TrackingOriginModeFlags)modeToCheck); + } + } + } + + void SetToNextMode(XRInputSubsystem subsystem) + { + TrackingOriginModeFlags currentOriginMode = subsystem.GetTrackingOriginMode(); + for (int i = 0; i < s_SupportedTrackingOriginModes.Count; i++) + { + if (currentOriginMode == s_SupportedTrackingOriginModes[i]) + { + int nextModeIndex = (i + 1) % s_SupportedTrackingOriginModes.Count; + subsystem.TrySetTrackingOriginMode(s_SupportedTrackingOriginModes[nextModeIndex]); + break; + } + } + } + } +} -- cgit v1.2.3-70-g09d2