121 lines
3.7 KiB
C#
121 lines
3.7 KiB
C#
using UnityEngine;
|
|
|
|
namespace Passer.Humanoid {
|
|
using Passer.Tracking;
|
|
|
|
[System.Serializable]
|
|
public class UnityXRHead : HeadSensor {
|
|
#if pUNITYXR
|
|
public override string name {
|
|
get { return "Unity XR"; }
|
|
}
|
|
|
|
protected UnityXRTracker unityXR {
|
|
get { return humanoid.unityXR; }
|
|
}
|
|
|
|
#region Manage
|
|
|
|
public override void CheckSensor(HeadTarget headTarget) {
|
|
if (this.headTarget == null)
|
|
this.target = headTarget;
|
|
if (this.headTarget == null)
|
|
return;
|
|
|
|
if (unityXR.trackerComponent == null) {
|
|
unityXR.CheckTracker(humanoid);
|
|
}
|
|
|
|
if (enabled && unityXR.trackerComponent != null && unityXR.trackerComponent.enabled) {
|
|
if (hmd == null) {
|
|
Vector3 position = headTarget.transform.TransformPoint(headTarget.head2eyes);
|
|
Quaternion rotation = headTarget.transform.rotation;
|
|
UnityXR unityXRtracker = unityXR.trackerComponent as UnityXR;
|
|
hmd = unityXRtracker.GetHmd(position, rotation);
|
|
}
|
|
if (hmd != null)
|
|
sensorTransform = hmd.transform;
|
|
|
|
if (!Application.isPlaying)
|
|
SetSensor2Target();
|
|
}
|
|
else {
|
|
#if UNITY_EDITOR
|
|
if (!Application.isPlaying) {
|
|
if (hmd != null)
|
|
Object.DestroyImmediate(hmd.gameObject, true);
|
|
}
|
|
#endif
|
|
hmd = null;
|
|
sensorTransform = null;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Start
|
|
|
|
public override void Start(HumanoidControl _humanoid, Transform targetTransform) {
|
|
base.Start(_humanoid, targetTransform);
|
|
|
|
tracker = headTarget.humanoid.unityXR;
|
|
if (tracker == null || !tracker.enabled || !enabled)
|
|
return;
|
|
|
|
Vector3 position = headTarget.transform.TransformPoint(headTarget.head2eyes);
|
|
Quaternion rotation = headTarget.transform.rotation;
|
|
|
|
#if hSTEAMVR && (UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX)
|
|
if (UnityXRDevice.xrDevice == UnityXRDevice.XRDeviceType.OpenVR) {
|
|
SteamVR steamVRtracker = unityXR.tracker as SteamVR;
|
|
hmd = steamVRtracker.GetHmd(position, rotation);
|
|
}
|
|
else
|
|
#endif
|
|
{
|
|
UnityXR unityXRtracker = unityXR.trackerComponent as UnityXR;
|
|
hmd = unityXRtracker.GetHmd(position, rotation);
|
|
}
|
|
if (hmd != null)
|
|
sensorTransform = hmd.transform;
|
|
|
|
SetSensor2Target();
|
|
CheckSensorTransform();
|
|
sensor2TargetPosition = -headTarget.head2eyes;
|
|
|
|
if (hmd != null)
|
|
hmd.StartComponent(unityXR.trackerComponent.transform);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Update
|
|
|
|
protected bool calibrated = false;
|
|
public override void Update() {
|
|
status = Tracker.Status.Unavailable;
|
|
if (unityXR.trackerComponent == null || !unityXR.trackerComponent.enabled || !enabled)
|
|
return;
|
|
|
|
if (hmd == null)
|
|
return;
|
|
|
|
hmd.UpdateComponent();
|
|
status = hmd.status;
|
|
if (status != Tracker.Status.Tracking)
|
|
return;
|
|
|
|
UpdateTarget(headTarget.head.target, hmd);
|
|
UpdateNeckTargetFromHead();
|
|
|
|
if (!calibrated) {
|
|
if (tracker.humanoid.calibrateAtStart)
|
|
tracker.humanoid.Calibrate();
|
|
calibrated = true;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
#endif
|
|
}
|
|
} |