diff --git a/Runtime/HumanoidControl/Scripts/Animator/ArmAnimator.cs b/Runtime/HumanoidControl/Scripts/Animator/ArmAnimator.cs
index 61ef87c..07c6935 100644
--- a/Runtime/HumanoidControl/Scripts/Animator/ArmAnimator.cs
+++ b/Runtime/HumanoidControl/Scripts/Animator/ArmAnimator.cs
@@ -2,6 +2,7 @@ using UnityEngine;
namespace Passer.Humanoid {
using Humanoid.Tracking;
+ using Passer.Tracking;
[System.Serializable]
public class ArmPredictor : Humanoid.ArmSensor {
@@ -10,6 +11,10 @@ namespace Passer.Humanoid {
get { return Tracker.Status.Tracking; }
set { }
}
+
+ public override SensorComponent GetSensorComponent() {
+ return null;
+ }
}
[System.Serializable]
@@ -21,6 +26,10 @@ namespace Passer.Humanoid {
set { }
}
+ public override SensorComponent GetSensorComponent() {
+ return null;
+ }
+
public bool armSwing;
[HideInInspector]
protected Vector3 foot2hand;
diff --git a/Runtime/HumanoidControl/Scripts/Animator/HeadAnimator.cs b/Runtime/HumanoidControl/Scripts/Animator/HeadAnimator.cs
index ffff5d3..9ef0bfc 100644
--- a/Runtime/HumanoidControl/Scripts/Animator/HeadAnimator.cs
+++ b/Runtime/HumanoidControl/Scripts/Animator/HeadAnimator.cs
@@ -1,12 +1,17 @@
using UnityEngine;
namespace Passer.Humanoid {
+ using Passer.Tracking;
[System.Serializable]
public class HeadAnimator : HeadSensor {
public bool headAnimation = true;
public bool faceAnimation = true;
+ public override SensorComponent GetSensorComponent() {
+ return null;
+ }
+
#region Update
public override void Update() {
if (!headTarget.humanoid.animatorEnabled || !enabled || headTarget.humanoid.targetsRig.runtimeAnimatorController != null)
diff --git a/Runtime/HumanoidControl/Scripts/Animator/HeadPredictor.cs b/Runtime/HumanoidControl/Scripts/Animator/HeadPredictor.cs
index 8dcbee7..a118ceb 100644
--- a/Runtime/HumanoidControl/Scripts/Animator/HeadPredictor.cs
+++ b/Runtime/HumanoidControl/Scripts/Animator/HeadPredictor.cs
@@ -1,12 +1,17 @@
using UnityEngine;
namespace Passer.Humanoid {
+ using Passer.Tracking;
[System.Serializable]
public class HeadPredictor : HeadSensor {
private Vector3 positionalVelocity;
private Quaternion rotationalVelocity;
+ public override SensorComponent GetSensorComponent() {
+ return null;
+ }
+
public override void Start(HumanoidControl _humanoid, Transform targetTransform) {
base.Start(_humanoid, targetTransform);
}
diff --git a/Runtime/HumanoidControl/Scripts/Animator/LegAnimator.cs b/Runtime/HumanoidControl/Scripts/Animator/LegAnimator.cs
index f7c73fa..70714fd 100644
--- a/Runtime/HumanoidControl/Scripts/Animator/LegAnimator.cs
+++ b/Runtime/HumanoidControl/Scripts/Animator/LegAnimator.cs
@@ -1,10 +1,15 @@
using UnityEngine;
namespace Passer.Humanoid {
- using Humanoid.Tracking;
+ using Passer.Tracking;
[System.Serializable]
public class LegAnimator : LegSensor {
+
+ public override SensorComponent GetSensorComponent() {
+ return null;
+ }
+
private LegAnimator leftAnimator;
private LegAnimator rightAnimator;
diff --git a/Runtime/HumanoidControl/Scripts/Animator/TorsoAnimator.cs b/Runtime/HumanoidControl/Scripts/Animator/TorsoAnimator.cs
index ad922d2..acefb35 100644
--- a/Runtime/HumanoidControl/Scripts/Animator/TorsoAnimator.cs
+++ b/Runtime/HumanoidControl/Scripts/Animator/TorsoAnimator.cs
@@ -1,11 +1,15 @@
using UnityEngine;
namespace Passer.Humanoid {
- using Humanoid.Tracking;
+ using Passer.Tracking;
[System.Serializable]
public class TorsoAnimator : TorsoSensor {
+ public override SensorComponent GetSensorComponent() {
+ return null;
+ }
+
public enum BodyRotation {
HeadRotation = 1,
HeadAndHandRotation = 2,
diff --git a/Runtime/HumanoidControl/Scripts/Extensions/ArmSensor.cs b/Runtime/HumanoidControl/Scripts/Extensions/ArmSensor.cs
index 4c9c617..4d9ea96 100644
--- a/Runtime/HumanoidControl/Scripts/Extensions/ArmSensor.cs
+++ b/Runtime/HumanoidControl/Scripts/Extensions/ArmSensor.cs
@@ -10,7 +10,7 @@ namespace Passer.Humanoid {
///
/// An sensors used on the arm of a Humanoid
///
- public class ArmSensor : HumanoidSensor {
+ public abstract class ArmSensor : HumanoidSensor {
///
/// The HandTarget for this sensor
///
@@ -24,7 +24,7 @@ namespace Passer.Humanoid {
///
/// The sensor used for this arm
///
- public SensorComponent sensorComponent;
+ //public SensorComponent sensorComponent;
///
/// The skeleton for the hand
@@ -367,7 +367,7 @@ namespace Passer.Humanoid {
}
namespace Passer.Humanoid {
- public class ArmController : Humanoid.ArmSensor {
+ public abstract class ArmController : Humanoid.ArmSensor {
protected Humanoid.Tracking.Sensor.ID sensorID;
protected Controller controllerInput;
public Humanoid.Tracking.ArmController oldController;
diff --git a/Runtime/HumanoidControl/Scripts/Extensions/HeadSensor.cs b/Runtime/HumanoidControl/Scripts/Extensions/HeadSensor.cs
index ba1a859..fe60fad 100644
--- a/Runtime/HumanoidControl/Scripts/Extensions/HeadSensor.cs
+++ b/Runtime/HumanoidControl/Scripts/Extensions/HeadSensor.cs
@@ -6,14 +6,14 @@ using UnityEditor;
namespace Passer.Humanoid {
using Passer.Tracking;
- public class HeadSensor : HumanoidSensor {
+ public abstract class HeadSensor : HumanoidSensor {
protected HeadTarget headTarget {
get { return target as HeadTarget; }
}
protected HumanoidControl humanoid => headTarget.humanoid;
- public SensorComponent sensorComponent;
+ //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 037afc0..3678988 100644
--- a/Runtime/HumanoidControl/Scripts/Extensions/HumanoidSensor.cs
+++ b/Runtime/HumanoidControl/Scripts/Extensions/HumanoidSensor.cs
@@ -4,30 +4,33 @@ namespace Passer.Humanoid {
using Passer.Tracking;
[System.Serializable]
- public class HumanoidSensor : Sensor {
+ public abstract class HumanoidSensor : Sensor {
public HumanoidSensor() {
enabled = true;
}
- //public new HumanoidTracker tracker;
public new virtual HumanoidTracker tracker => null;
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; } }
- //public Transform sensorTransform;
public Vector3 sensor2TargetPosition;
public Quaternion sensor2TargetRotation;
#region Start
- //public virtual void Init(HumanoidTracker _tracker) {
- // tracker = _tracker;
- //}
+
public virtual void Start(HumanoidControl _humanoid, Transform targetTransform) {
target = targetTransform.GetComponent();
diff --git a/Runtime/HumanoidControl/Scripts/Extensions/LegSensor.cs b/Runtime/HumanoidControl/Scripts/Extensions/LegSensor.cs
index 25355c0..b169c46 100644
--- a/Runtime/HumanoidControl/Scripts/Extensions/LegSensor.cs
+++ b/Runtime/HumanoidControl/Scripts/Extensions/LegSensor.cs
@@ -6,13 +6,12 @@ using UnityEditor;
namespace Passer.Humanoid {
using Passer.Tracking;
- public class LegSensor : HumanoidSensor {
+ public abstract class LegSensor : HumanoidSensor {
protected FootTarget footTarget => target as FootTarget;
protected HumanoidControl humanoid => footTarget.humanoid;
- public SensorComponent sensorComponent;
- //protected new Tracking.LegSensor sensor;
+ //public SensorComponent sensorComponent;
#region Manage
diff --git a/Runtime/HumanoidControl/Scripts/Extensions/Sensor.cs b/Runtime/HumanoidControl/Scripts/Extensions/Sensor.cs
index 763c313..d4a041e 100644
--- a/Runtime/HumanoidControl/Scripts/Extensions/Sensor.cs
+++ b/Runtime/HumanoidControl/Scripts/Extensions/Sensor.cs
@@ -3,7 +3,7 @@
namespace Passer {
[System.Serializable]
- public class Sensor {
+ public abstract class Sensor {
public bool enabled;
public virtual Tracker.Status status { get; set; }
diff --git a/Runtime/HumanoidControl/Scripts/Extensions/TorsoSensor.cs b/Runtime/HumanoidControl/Scripts/Extensions/TorsoSensor.cs
index f12efa7..14a4005 100644
--- a/Runtime/HumanoidControl/Scripts/Extensions/TorsoSensor.cs
+++ b/Runtime/HumanoidControl/Scripts/Extensions/TorsoSensor.cs
@@ -6,7 +6,7 @@ using UnityEditor;
namespace Passer.Humanoid {
using Passer.Tracking;
- public class TorsoSensor : HumanoidSensor {
+ public abstract class TorsoSensor : HumanoidSensor {
protected HipsTarget hipsTarget {
get { return (HipsTarget)target; }
@@ -14,7 +14,7 @@ namespace Passer.Humanoid {
protected HumanoidControl humanoid => hipsTarget.humanoid;
- public SensorComponent sensorComponent;
+ //public SensorComponent sensorComponent;
protected new Tracking.TorsoSensor sensor;
#region Manage
diff --git a/Runtime/HumanoidControl/Scripts/Extensions/Tracker.cs b/Runtime/HumanoidControl/Scripts/Extensions/Tracker.cs
index 54f4c59..66881c5 100644
--- a/Runtime/HumanoidControl/Scripts/Extensions/Tracker.cs
+++ b/Runtime/HumanoidControl/Scripts/Extensions/Tracker.cs
@@ -12,9 +12,9 @@ namespace Passer {
/// The tracking status
///
public enum Status {
- Unavailable, //< The tracking device is not available
- Present, //< The tracking device is available but not tracking
- Tracking //< The tracking device is actively tracking
+ Unavailable, ///< The tracking device is not available
+ Present, ///< The tracking device is available but not tracking
+ Tracking ///< The tracking device is actively tracking
}
///
diff --git a/Runtime/HumanoidControl/Scripts/Extensions/TrackerComponent.cs b/Runtime/HumanoidControl/Scripts/Extensions/TrackerComponent.cs
index d5eaa0d..9cb1735 100644
--- a/Runtime/HumanoidControl/Scripts/Extensions/TrackerComponent.cs
+++ b/Runtime/HumanoidControl/Scripts/Extensions/TrackerComponent.cs
@@ -22,40 +22,13 @@ namespace Passer.Tracking {
///
public class TrackerComponent : MonoBehaviour {
+ ///
+ /// The status of the tracking device
+ ///
public Tracker.Status status;
protected Transform realWorld;
- //[SerializeField]
- //protected bool _show = true;
- //public virtual bool show {
- // set {
- // if (value == true && !_show) {
- // renderTracker = true;
-
- // _show = true;
- // }
- // else if (value == false && _show) {
- // renderTracker = false;
-
- // _show = false;
- // }
- // }
- // get {
- // return _show;
- // }
- //}
-
- //protected bool renderTracker {
- // set {
- // UnityEngine.Debug.Log("tracker show " + value);
- // Renderer[] renderers = this.GetComponentsInChildren();
- // foreach (Renderer renderer in renderers)
- // renderer.enabled = value;
- // }
- //}
-
-
protected virtual void Start() { }
protected virtual void Update() { }
diff --git a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs
index 0ca2df3..b806a34 100644
--- a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs
+++ b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs
@@ -11,6 +11,26 @@ namespace Passer.Humanoid {
#if hCUSTOM
public override HumanoidTracker tracker => humanoid.unityXR;
#endif
+ public override SensorComponent GetSensorComponent() {
+ if (sensorComponent != null)
+ return sensorComponent;
+
+ Vector3 position = handTarget.transform.TransformPoint(handTarget.isLeft ? -0.1F : 0.1F, -0.05F, 0.04F);
+ Quaternion localRotation = handTarget.isLeft ? Quaternion.Euler(180, 90, 90) : Quaternion.Euler(180, -90, -90);
+ Quaternion rotation = handTarget.transform.rotation * localRotation;
+#if hSTEAMVR
+ if (UnityXRDevice.xrDevice == UnityXRDevice.XRDeviceType.OpenVR) {
+ SteamVR steamVR = unityXR.trackerComponent as SteamVR;
+ controller = steamVR.GetController(handTarget.isLeft, position, rotation);
+ }
+ else
+#endif
+ {
+ UnityXR unityXRcomponent = unityXR.trackerComponent as UnityXR;
+ controller = unityXRcomponent.GetController(handTarget.isLeft, position, rotation);
+ }
+ return controller as SensorComponent;
+ }
protected UnityXRTracker unityXR => humanoid.unityXR;
diff --git a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHead.cs b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHead.cs
index c5037c2..6bc9010 100644
--- a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHead.cs
+++ b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHead.cs
@@ -10,12 +10,23 @@ namespace Passer.Humanoid {
get { return "Unity XR"; }
}
-#if hCUSTOM
public override HumanoidTracker tracker => humanoid.unityXR;
-#endif
- protected UnityXRTracker unityXR {
- get { return humanoid.unityXR; }
+ public UnityXR unityXR => tracker.trackerComponent as UnityXR;
+ //protected UnityXRTracker unityXR => humanoid.unityXR;
+
+ public override SensorComponent GetSensorComponent() {
+ if (sensorComponent != null)
+ return sensorComponent;
+
+ if (tracker.trackerComponent == null)
+ tracker.CheckTracker(humanoid);
+
+ Vector3 position = headTarget.transform.TransformPoint(headTarget.head2eyes);
+ Quaternion rotation = headTarget.transform.rotation;
+ UnityXR unityXRtracker = tracker.trackerComponent as UnityXR;
+ sensorComponent = unityXRtracker.GetHmd(position, rotation);
+ return sensorComponent;
}
#region Manage
@@ -26,15 +37,15 @@ namespace Passer.Humanoid {
if (this.headTarget == null)
return;
- if (unityXR.trackerComponent == null) {
- unityXR.CheckTracker(humanoid);
+ if (tracker.trackerComponent == null) {
+ tracker.CheckTracker(humanoid);
}
- if (enabled && unityXR.trackerComponent != null && unityXR.trackerComponent.enabled) {
+ if (enabled && tracker.trackerComponent != null && tracker.trackerComponent.enabled) {
if (sensorComponent == null) {
Vector3 position = headTarget.transform.TransformPoint(headTarget.head2eyes);
Quaternion rotation = headTarget.transform.rotation;
- UnityXR unityXRtracker = unityXR.trackerComponent as UnityXR;
+ UnityXR unityXRtracker = tracker.trackerComponent as UnityXR;
sensorComponent = unityXRtracker.GetHmd(position, rotation);
}
if (sensorComponent != null)
@@ -55,6 +66,20 @@ namespace Passer.Humanoid {
}
}
+ public UnityXRHmd GetSensor() {
+ Vector3 position = headTarget.transform.TransformPoint(headTarget.head2eyes);
+ Quaternion rotation = headTarget.transform.rotation;
+ UnityXR unityXRtracker = tracker.trackerComponent as UnityXR;
+ return GetSensor(position, rotation);
+ }
+
+ private UnityXRHmd GetSensor(Vector3 position, Quaternion rotation) {
+ if (sensorComponent == null) {
+ sensorComponent = unityXR.GetHmd(position, rotation);
+ }
+ return sensorComponent as UnityXRHmd;
+ }
+
#endregion
#region Start
@@ -77,7 +102,7 @@ namespace Passer.Humanoid {
else
#endif
{
- UnityXR unityXRtracker = unityXR.trackerComponent as UnityXR;
+ UnityXR unityXRtracker = tracker.trackerComponent as UnityXR;
sensorComponent = unityXRtracker.GetHmd(position, rotation);
}
if (sensorComponent != null)
@@ -88,7 +113,7 @@ namespace Passer.Humanoid {
sensor2TargetPosition = -headTarget.head2eyes;
if (sensorComponent != null)
- sensorComponent.StartComponent(unityXR.trackerComponent.transform);
+ sensorComponent.StartComponent(tracker.trackerComponent.transform);
}
#endregion
@@ -98,7 +123,7 @@ namespace Passer.Humanoid {
protected bool calibrated = false;
public override void Update() {
status = Tracker.Status.Unavailable;
- if (unityXR.trackerComponent == null || !unityXR.trackerComponent.enabled || !enabled)
+ if (tracker.trackerComponent == null || !tracker.trackerComponent.enabled || !enabled)
return;
if (sensorComponent == null)