60 lines
1.2 KiB
C#
60 lines
1.2 KiB
C#
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;
|
|
}
|
|
}
|