using EZXR.Glass.Inputs; using EZXR.Glass.SixDof; #if SpatialComputing using EZXR.Glass.SpatialComputing; #endif using UnityEngine; namespace EZXR.Glass.Core { [ScriptExecutionOrder(-58)] public class XRMan : MonoBehaviour { #region ���� private static XRMan instance; public static XRMan Instance { get { return instance; } } #endregion #region Encapsulation //SixDof public HMDPoseTracker.DegreeOfFreedom m_dof = HMDPoseTracker.DegreeOfFreedom.SixDof; public class TwoEyes { public Camera left { get { return HMDPoseTracker.Instance.leftCamera; } } public Camera right { get { return HMDPoseTracker.Instance.rightCamera; } } } public TwoEyes Eyes; //Hand public class TwoHands { /// <summary> /// ��¼�����ֱ���������Ϣ /// </summary> public InputInfoBase left { get { return InputSystem.leftHand; } } /// <summary> /// ��¼�����ֱ���������Ϣ /// </summary> public InputInfoBase right { get { return InputSystem.rightHand; } } } public TwoHands Hands; #endregion /// <summary> /// ר�����ڷ��ø��ָ������ /// </summary> public Transform attachments; [HideInInspector] public Vector3 position_SpatialTracking; [HideInInspector] public Quaternion rotation_SpatialTracking; [HideInInspector] public Vector3 position_SpatialComputing; [HideInInspector] public Quaternion rotation_SpatialComputing; [HideInInspector] public Matrix4x4 offset_SpatialComputing = Matrix4x4.identity; Vector3 tempPosition; Quaternion tempRotation; Matrix4x4 tempMatrix; private void Awake() { instance = this; if (attachments == null) { attachments = transform.Find("Attachments"); } } // Start is called before the first frame update void Start() { InvokeRepeating("DoFramerate", 0, 1); } void DoFramerate() { Utilities.Android.SendIntent("ToSystem", "com.ezxr.glass.systemui", "DebugInfo", (1 / Time.smoothDeltaTime).ToString("##.#")); } // Update is called once per frame void Update() { if (HMDPoseTracker.Instance != null) { tempPosition = position_SpatialTracking; tempRotation = rotation_SpatialTracking; } #if SpatialComputing if (EZXRSpatialComputingManager.Instance != null) { tempMatrix = offset_SpatialComputing * Matrix4x4.TRS(tempPosition, tempRotation, Vector3.one); tempPosition = tempMatrix.GetColumn(3); tempRotation = tempMatrix.rotation; } #endif transform.position = tempPosition; transform.rotation = tempRotation; } } }