|
|
- namespace VRTK
- {
- using UnityEngine;
- #if UNITY_2017_2_OR_NEWER
- using UnityEngine.XR;
- #else
- using UnityEngine.VR;
- using XRSettings = UnityEngine.VR.VRSettings;
- using XRDevice = UnityEngine.VR.VRDevice;
- #endif
-
- /// <summary>
- /// Camera script for the main camera for Immersive Mixed Reality.
- /// </summary>
- [RequireComponent(typeof(Camera))]
- public class WindowsMR_Camera : MonoBehaviour
- {
- [SerializeField]
- [Tooltip("Force the Tracking Space Type to be RoomScale (normal VR experiences). If false, Stationary will be forced (e.g. video experiences.")]
- private bool forceRoomScaleTracking = true;
-
- public bool ForceRoomScaleTracking
- {
- get { return forceRoomScaleTracking; }
- set { forceRoomScaleTracking = value; }
- }
-
- /// <summary>
- /// Name of the Windows Mixed Reality Device as listed in XRSettings.
- /// </summary>
- private const string DEVICE_NAME = "WindowsMR";
-
- protected virtual void Awake()
- {
- if (CheckForMixedRealitySupport())
- {
- SetupMRCamera();
- }
- }
-
- protected virtual void Update()
- {
- if (XRDevice.GetTrackingSpaceType() != TrackingSpaceType.RoomScale && forceRoomScaleTracking)
- {
- XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale);
- }
-
- if (XRDevice.GetTrackingSpaceType() != TrackingSpaceType.Stationary && !forceRoomScaleTracking)
- {
- XRDevice.SetTrackingSpaceType(TrackingSpaceType.Stationary);
- }
-
- }
-
- /// <summary>
- /// Check if the Mixed (Virtual) Reality Settings are properly set.
- /// </summary>
- /// <returns>Are the settings set.</returns>
- protected virtual bool CheckForMixedRealitySupport()
- {
- if (XRSettings.enabled == false)
- {
- Debug.LogError("XRSettings are not enabled. Enable in PlayerSettings. Do not forget to add Windows Mixed Reality to Virtual Reality SDKs.");
- return false;
- }
- else
- {
- foreach (string device in XRSettings.supportedDevices)
- {
- if (device.Equals("WindowsMR"))
- {
- return true;
- }
- }
- Debug.LogError("Windows Mixed Reality is not supported in XRSettings, add in PlayerSettings.");
- }
-
- return false;
- }
-
- /// <summary>
- /// Setup the MR camera properly.
- /// </summary>
- protected virtual void SetupMRCamera()
- {
- Camera camera = GetComponent<Camera>();
- if (camera.tag != "MainCamera")
- {
- camera.tag = "MainCamera";
- }
-
- camera.nearClipPlane = 0.01f;
-
- if (camera.stereoTargetEye != StereoTargetEyeMask.Both)
- {
- Debug.LogError("Target eye of main camera is not set to both. Are you sure you want to render only one eye?");
- }
- }
- }
- }
|