#if !PICO_OPENXR_SDK using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.XR; namespace Unity.XR.PXR { [Serializable] public class PXR_LateLatching : MonoBehaviour { #if UNITY_2020_3_OR_NEWER private Camera m_LateLatchingCamera; static XRDisplaySubsystem s_DisplaySubsystem = null; static List s_DisplaySubsystems = new List(); private void Awake() { m_LateLatchingCamera = GetComponent(); } private void OnEnable() { List displaySubsystems = new List(); #if UNITY_6000_0_OR_NEWER SubsystemManager.GetSubsystems(displaySubsystems); #else SubsystemManager.GetInstances(displaySubsystems); #endif Debug.Log("PXR_U OnEnable() displaySubsystems.Count = " + displaySubsystems.Count); for (int i = 0; i < displaySubsystems.Count; i++) { s_DisplaySubsystem = displaySubsystems[i]; } } private void OnDisable() { } void Update() { if (s_DisplaySubsystem == null) { List displaySubsystems = new List(); #if UNITY_6000_0_OR_NEWER SubsystemManager.GetSubsystems(displaySubsystems); #else SubsystemManager.GetInstances(displaySubsystems); #endif if (displaySubsystems.Count > 0) { s_DisplaySubsystem = displaySubsystems[0]; } } if (null == s_DisplaySubsystem) return; s_DisplaySubsystem.MarkTransformLateLatched(m_LateLatchingCamera.transform, XRDisplaySubsystem.LateLatchNode.Head); } #if !UNITY_EDITOR && UNITY_2021_2_OR_NEWER private void OnPreRender() { s_DisplaySubsystem.BeginRecordingIfLateLatched(m_LateLatchingCamera); } private void OnPostRender() { s_DisplaySubsystem.EndRecordingIfLateLatched(m_LateLatchingCamera); } #endif private void FixedUpdate() { } private void LateUpdate() { } #endif } } #endif