using System; using UnityEngine; public class GuardianBoundaryEnforcer : MonoBehaviour { public bool m_AllowRecenter = true; public OVRCameraRig m_mainCamera; private Quaternion m_originalTrackerOrientation; private int m_framecount; private Quaternion m_orientToOriginalForward; public Quaternion OrientToOriginalForward { get { return m_orientToOriginalForward; } } public event Action TrackingChanged; private void Start() { OVRManager.display.RecenteredPose += Recentered; m_originalTrackerOrientation = OVRPlugin.GetNodePose(OVRPlugin.Node.TrackerZero, OVRPlugin.Step.Render).ToOVRPose().orientation; } private void Update() { if (m_framecount < 0) { return; } m_framecount++; if (m_framecount > 2) { float num = OVRPlugin.GetNodePose(OVRPlugin.Node.TrackerZero, OVRPlugin.Step.Render).ToOVRPose().orientation.eulerAngles.y - m_originalTrackerOrientation.eulerAngles.y; m_orientToOriginalForward = Quaternion.Euler(0f, 0f - num, 0f); if (!m_AllowRecenter) { m_mainCamera.trackingSpace.transform.rotation = m_orientToOriginalForward; } m_framecount = -1; if (this.TrackingChanged != null) { this.TrackingChanged(); } } } private void Recentered() { m_framecount = 0; } }