diff --git a/Editor/HumanoidControl/Extensions/UnityXR/UnityXR_Editor.cs b/Editor/HumanoidControl/Extensions/UnityXR/UnityXR_Editor.cs index 4b66d3a..f07ed11 100644 --- a/Editor/HumanoidControl/Extensions/UnityXR/UnityXR_Editor.cs +++ b/Editor/HumanoidControl/Extensions/UnityXR/UnityXR_Editor.cs @@ -104,7 +104,7 @@ namespace Passer.Humanoid { public HeadTargetProps(SerializedObject serializedObject, HeadTarget headTarget) : base(serializedObject, headTarget.unityXR, headTarget, nameof(HeadTarget.unityXR)) { - hmdProp = serializedObject.FindProperty(nameof(HeadTarget.unityXR) + ".hmd"); + hmdProp = serializedObject.FindProperty(nameof(HeadTarget.unityXR) + ".sensorComponent"); } public override void Inspector() { @@ -121,7 +121,8 @@ namespace Passer.Humanoid { using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.LabelField("Hmd", GUILayout.Width(120)); if (GUILayout.Button("Show")) { - headTarget.unityXR.CheckSensor(headTarget); + //headTarget.unityXR.CheckSensor(headTarget); + headTarget.unityXR.GetSensorComponent(); } } } diff --git a/Runtime/HumanoidControl/Scripts/Extensions/HeadSensor.cs b/Runtime/HumanoidControl/Scripts/Extensions/HeadSensor.cs index fe60fad..c6b1d9a 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/HeadSensor.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/HeadSensor.cs @@ -13,7 +13,6 @@ namespace Passer.Humanoid { protected HumanoidControl humanoid => headTarget.humanoid; - //public SensorComponent sensorComponent; protected new Tracking.HeadSensor sensor; diff --git a/Runtime/HumanoidControl/Scripts/Extensions/HumanoidSensor.cs b/Runtime/HumanoidControl/Scripts/Extensions/HumanoidSensor.cs index a6e6f37..b11898a 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/HumanoidSensor.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/HumanoidSensor.cs @@ -14,13 +14,6 @@ namespace Passer.Humanoid { protected Tracking.Sensor sensor; - public SensorComponent sensorComponent; - /// - /// Returns sensorComponent and creates a new SensorComponent if it does not exist - /// - /// - public abstract SensorComponent GetSensorComponent(); - [System.NonSerialized] public const string _name = ""; public override string name { get { return _name; } } @@ -125,6 +118,12 @@ namespace Passer.Humanoid { } public virtual void UpdateSensorTransformFromTarget(Transform targetTransform) { + if (sensorComponent != null) { + sensorComponent.transform.position = TransformPointUnscaled(targetTransform, -sensor2TargetPosition); + sensorComponent.transform.rotation = targetTransform.rotation * Quaternion.Inverse(sensor2TargetRotation); + return; + } + if (sensorTransform == null) return; diff --git a/Runtime/HumanoidControl/Scripts/Extensions/Sensor.cs b/Runtime/HumanoidControl/Scripts/Extensions/Sensor.cs index d4a041e..8825c45 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/Sensor.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/Sensor.cs @@ -1,6 +1,7 @@ using UnityEngine; namespace Passer { + using Tracking; [System.Serializable] public abstract class Sensor { @@ -14,6 +15,14 @@ namespace Passer { public Transform sensorTransform; + public SensorComponent sensorComponent; + /// + /// Returns sensorComponent and creates a new SensorComponent if it does not exist + /// + /// + public abstract SensorComponent GetSensorComponent(); + + public virtual void Start(Transform targetTransform) { target = targetTransform.GetComponent(); } diff --git a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHead.cs b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHead.cs index d083ae1..5262a37 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHead.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHead.cs @@ -19,13 +19,20 @@ namespace Passer.Humanoid { if (sensorComponent != null) return sensorComponent; - if (tracker.trackerComponent == null) - tracker.CheckTracker(humanoid); + // Make sure the unityXR component exists + humanoid.unityXR.GetTrackerComponent(); Vector3 position = headTarget.transform.TransformPoint(headTarget.head2eyes); Quaternion rotation = headTarget.transform.rotation; UnityXR unityXRtracker = tracker.trackerComponent as UnityXR; sensorComponent = unityXRtracker.GetHmd(position, rotation); + + if (sensorComponent != null) + sensorTransform = sensorComponent.transform; + + if (!Application.isPlaying) + SetSensor2Target(); + return sensorComponent; }