diff --git a/Editor/HumanoidControl/Extensions/UnityXR/UnityXR_Editor.cs b/Editor/HumanoidControl/Extensions/UnityXR/UnityXR_Editor.cs index f07ed11..5e3fe2c 100644 --- a/Editor/HumanoidControl/Extensions/UnityXR/UnityXR_Editor.cs +++ b/Editor/HumanoidControl/Extensions/UnityXR/UnityXR_Editor.cs @@ -122,7 +122,7 @@ namespace Passer.Humanoid { EditorGUILayout.LabelField("Hmd", GUILayout.Width(120)); if (GUILayout.Button("Show")) { //headTarget.unityXR.CheckSensor(headTarget); - headTarget.unityXR.GetSensorComponent(); + headTarget.unityXR.CheckSensor(headTarget); //.GetSensorComponent(); } } } diff --git a/Editor/HumanoidControl/HumanoidControl_Editor.cs b/Editor/HumanoidControl/HumanoidControl_Editor.cs index e315275..33330e7 100644 --- a/Editor/HumanoidControl/HumanoidControl_Editor.cs +++ b/Editor/HumanoidControl/HumanoidControl_Editor.cs @@ -312,7 +312,7 @@ namespace Passer { new Hydra_Editor.TrackerProps(serializedObject, targetObjs, humanoid.hydra), #endif #if hLEAP && (UNITY_STANDALONE_WIN || UNITY_WSA_10_0) - new LeapMotion_Editor.TrackerProps(serializedObject, targetObjs, humanoid.leapTracker), + new LeapMotion_Editor.TrackerProps(serializedObject, targetObjs, humanoid.leap), #endif #if hKINECT1 && (UNITY_STANDALONE_WIN || UNITY_WSA_10_0) new Kinect1_Editor.TrackerProps(serializedObject, targetObjs, humanoid.kinect1), @@ -1082,7 +1082,7 @@ namespace Passer { using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.LabelField("Tracker", GUILayout.Width(120)); if (TrackerComponentShowButton()) - tracker.GetTrackerComponent(); + tracker.CheckTracker(humanoid); } } else { @@ -1136,7 +1136,7 @@ namespace Passer { private void RemoveControllers() { foreach (HumanoidSensor sensor in tracker.sensors) - RemoveTransform(sensor.sensorTransform); + RemoveSensor(sensor.sensorComponent); if (tracker.headSensor != null) tracker.headSensor.RemoveController(headSensorProp); @@ -1152,11 +1152,16 @@ namespace Passer { tracker.rightFootSensor.RemoveController(rightFootSensorProp); } - private void RemoveTransform(Transform trackerTransform) { - if (trackerTransform != null) - DestroyImmediate(trackerTransform.gameObject, true); + private void RemoveSensor(Tracking.SensorComponent sensorComponent) { + if (sensorComponent != null) + DestroyImmediate(sensorComponent.gameObject, true); } + //private void RemoveTransform(Transform trackerTransform) { + // if (trackerTransform != null) + // DestroyImmediate(trackerTransform.gameObject, true); + //} + private void SetSensors2Target() { foreach (HumanoidSensor sensor in tracker.sensors) { sensor.SetSensor2Target(); diff --git a/Editor/HumanoidControl/Targets/FootTarget_Editor.cs b/Editor/HumanoidControl/Targets/FootTarget_Editor.cs index ca2d9d4..a981db1 100644 --- a/Editor/HumanoidControl/Targets/FootTarget_Editor.cs +++ b/Editor/HumanoidControl/Targets/FootTarget_Editor.cs @@ -572,7 +572,7 @@ namespace Passer { public abstract class TargetProps { public SerializedProperty enabledProp; - public SerializedProperty sensorTransformProp; + public SerializedProperty sensorComponentProp; public SerializedProperty sensor2TargetPositionProp; public SerializedProperty sensor2TargetRotationProp; @@ -581,7 +581,7 @@ namespace Passer { public TargetProps(SerializedObject serializedObject, LegSensor _sensor, FootTarget _footTarget, string unitySensorName) { enabledProp = serializedObject.FindProperty(unitySensorName + ".enabled"); - sensorTransformProp = serializedObject.FindProperty(unitySensorName + ".sensorTransform"); + sensorComponentProp = serializedObject.FindProperty(unitySensorName + ".sensorComponent"); sensor2TargetPositionProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetPosition"); sensor2TargetRotationProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetRotation"); @@ -592,11 +592,11 @@ namespace Passer { } public virtual void SetSensor2Target() { - if (sensor.sensorTransform == null) + if (sensor.sensorComponent == null) return; - sensor2TargetRotationProp.quaternionValue = Quaternion.Inverse(sensor.sensorTransform.rotation) * footTarget.foot.target.transform.rotation; - sensor2TargetPositionProp.vector3Value = -footTarget.foot.target.transform.InverseTransformPoint(sensor.sensorTransform.position); + sensor2TargetRotationProp.quaternionValue = Quaternion.Inverse(sensor.sensorComponent.transform.rotation) * footTarget.foot.target.transform.rotation; + sensor2TargetPositionProp.vector3Value = -footTarget.foot.target.transform.InverseTransformPoint(sensor.sensorComponent.transform.position); } public abstract void Inspector(); diff --git a/Editor/HumanoidControl/Targets/HandTarget_Editor.cs b/Editor/HumanoidControl/Targets/HandTarget_Editor.cs index d83bfc8..aeb96e8 100644 --- a/Editor/HumanoidControl/Targets/HandTarget_Editor.cs +++ b/Editor/HumanoidControl/Targets/HandTarget_Editor.cs @@ -721,7 +721,8 @@ namespace Passer.Humanoid { public abstract class TargetProps { public SerializedProperty enabledProp; - public SerializedProperty sensorTransformProp; + //public SerializedProperty sensorTransformProp; + public SerializedProperty sensorComponentProp; public SerializedProperty sensor2TargetPositionProp; public SerializedProperty sensor2TargetRotationProp; @@ -730,7 +731,8 @@ namespace Passer.Humanoid { public TargetProps(SerializedObject serializedObject, Humanoid.ArmSensor _sensor, HandTarget _handTarget, string unitySensorName) { enabledProp = serializedObject.FindProperty(unitySensorName + ".enabled"); - sensorTransformProp = serializedObject.FindProperty(unitySensorName + ".sensorTransform"); + //sensorTransformProp = serializedObject.FindProperty(unitySensorName + ".sensorTransform"); + sensorComponentProp = serializedObject.FindProperty(unitySensorName + ".sensorComponent"); sensor2TargetPositionProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetPosition"); sensor2TargetRotationProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetRotation"); diff --git a/Editor/HumanoidControl/Targets/HeadTarget_Editor.cs b/Editor/HumanoidControl/Targets/HeadTarget_Editor.cs index 21a7493..d3db18d 100644 --- a/Editor/HumanoidControl/Targets/HeadTarget_Editor.cs +++ b/Editor/HumanoidControl/Targets/HeadTarget_Editor.cs @@ -507,7 +507,8 @@ namespace Passer.Humanoid { public abstract class TargetProps { public SerializedProperty enabledProp; - public SerializedProperty sensorTransformProp; + //public SerializedProperty sensorTransformProp; + public SerializedProperty sensorComponentProp; public SerializedProperty sensor2TargetPositionProp; public SerializedProperty sensor2TargetRotationProp; @@ -516,7 +517,7 @@ namespace Passer.Humanoid { public TargetProps(SerializedObject serializedObject, HeadSensor _sensor, HeadTarget _headTarget, string unitySensorName) { enabledProp = serializedObject.FindProperty(unitySensorName + ".enabled"); - sensorTransformProp = serializedObject.FindProperty(unitySensorName + ".sensorTransform"); + sensorComponentProp = serializedObject.FindProperty(unitySensorName + ".sensorComponent"); sensor2TargetPositionProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetPosition"); sensor2TargetRotationProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetRotation"); @@ -527,11 +528,11 @@ namespace Passer.Humanoid { } public virtual void SetSensor2Target() { - if (sensor.sensorTransform == null) + if (sensor.sensorComponent == null) return; - sensor2TargetRotationProp.quaternionValue = Quaternion.Inverse(sensor.sensorTransform.rotation) * headTarget.head.target.transform.rotation; - sensor2TargetPositionProp.vector3Value = -headTarget.head.target.transform.InverseTransformPoint(sensor.sensorTransform.position); + sensor2TargetRotationProp.quaternionValue = Quaternion.Inverse(sensor.sensorComponent.transform.rotation) * headTarget.head.target.transform.rotation; + sensor2TargetPositionProp.vector3Value = -headTarget.head.target.transform.InverseTransformPoint(sensor.sensorComponent.transform.position); } public abstract void Inspector(); diff --git a/Editor/HumanoidControl/Targets/HipsTarget_Editor.cs b/Editor/HumanoidControl/Targets/HipsTarget_Editor.cs index 29f1111..c71f368 100644 --- a/Editor/HumanoidControl/Targets/HipsTarget_Editor.cs +++ b/Editor/HumanoidControl/Targets/HipsTarget_Editor.cs @@ -32,7 +32,7 @@ namespace Passer { private void InitEditors() { allProps = new TargetProps[] { -#if hOPENVR && hVIVETRACKER && (UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX) +#if hVIVETRACKER new ViveTracker_Editor.HipsTargetProps(serializedObject, hipsTarget), #endif #if hKINECT1 @@ -297,7 +297,8 @@ namespace Passer { public abstract class TargetProps { public SerializedProperty enabledProp; - public SerializedProperty sensorTransformProp; + //public SerializedProperty sensorTransformProp; + public SerializedProperty sensorComponentProp; public SerializedProperty sensor2TargetPositionProp; public SerializedProperty sensor2TargetRotationProp; @@ -306,7 +307,8 @@ namespace Passer { public TargetProps(SerializedObject serializedObject, TorsoSensor _sensor, HipsTarget _hipsTarget, string unitySensorName) { enabledProp = serializedObject.FindProperty(unitySensorName + ".enabled"); - sensorTransformProp = serializedObject.FindProperty(unitySensorName + ".sensorTransform"); + //sensorTransformProp = serializedObject.FindProperty(unitySensorName + ".sensorTransform"); + sensorComponentProp = serializedObject.FindProperty(unitySensorName + ".sensorComponent"); sensor2TargetPositionProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetPosition"); sensor2TargetRotationProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetRotation"); @@ -317,11 +319,11 @@ namespace Passer { } public virtual void SetSensor2Target() { - if (sensor.sensorTransform == null) + if (sensor.sensorComponent == null) return; - sensor2TargetRotationProp.quaternionValue = Quaternion.Inverse(sensor.sensorTransform.rotation) * hipsTarget.hips.target.transform.rotation; - sensor2TargetPositionProp.vector3Value = -hipsTarget.hips.target.transform.InverseTransformPoint(sensor.sensorTransform.position); + sensor2TargetRotationProp.quaternionValue = Quaternion.Inverse(sensor.sensorComponent.transform.rotation) * hipsTarget.hips.target.transform.rotation; + sensor2TargetPositionProp.vector3Value = -hipsTarget.hips.target.transform.InverseTransformPoint(sensor.sensorComponent.transform.position); } public abstract void Inspector(); diff --git a/Runtime/HumanoidControl/Scripts/Animator/ArmAnimator.cs b/Runtime/HumanoidControl/Scripts/Animator/ArmAnimator.cs index 07c6935..2d541bc 100644 --- a/Runtime/HumanoidControl/Scripts/Animator/ArmAnimator.cs +++ b/Runtime/HumanoidControl/Scripts/Animator/ArmAnimator.cs @@ -12,9 +12,9 @@ namespace Passer.Humanoid { set { } } - public override SensorComponent GetSensorComponent() { - return null; - } + //public override SensorComponent GetSensorComponent() { + // return null; + //} } [System.Serializable] @@ -26,9 +26,9 @@ namespace Passer.Humanoid { set { } } - public override SensorComponent GetSensorComponent() { - return null; - } + //public override SensorComponent GetSensorComponent() { + // return null; + //} public bool armSwing; [HideInInspector] diff --git a/Runtime/HumanoidControl/Scripts/Animator/HeadAnimator.cs b/Runtime/HumanoidControl/Scripts/Animator/HeadAnimator.cs index 9ef0bfc..e54baa4 100644 --- a/Runtime/HumanoidControl/Scripts/Animator/HeadAnimator.cs +++ b/Runtime/HumanoidControl/Scripts/Animator/HeadAnimator.cs @@ -8,10 +8,6 @@ namespace Passer.Humanoid { 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 a118ceb..128a2ae 100644 --- a/Runtime/HumanoidControl/Scripts/Animator/HeadPredictor.cs +++ b/Runtime/HumanoidControl/Scripts/Animator/HeadPredictor.cs @@ -8,10 +8,6 @@ namespace Passer.Humanoid { 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 70714fd..a0f3446 100644 --- a/Runtime/HumanoidControl/Scripts/Animator/LegAnimator.cs +++ b/Runtime/HumanoidControl/Scripts/Animator/LegAnimator.cs @@ -6,10 +6,6 @@ namespace Passer.Humanoid { [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 acefb35..7d00801 100644 --- a/Runtime/HumanoidControl/Scripts/Animator/TorsoAnimator.cs +++ b/Runtime/HumanoidControl/Scripts/Animator/TorsoAnimator.cs @@ -6,10 +6,6 @@ namespace Passer.Humanoid { [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 4d9ea96..2a1960e 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/ArmSensor.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/ArmSensor.cs @@ -93,8 +93,8 @@ namespace Passer.Humanoid { Init(handTarget); - SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); - sensorTransformProp.objectReferenceValue = sensorTransform; + //SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); + //sensorTransformProp.objectReferenceValue = sensorTransform; SerializedProperty targetProp = sensorProp.FindPropertyRelative("target"); targetProp.objectReferenceValue = target; @@ -103,7 +103,7 @@ namespace Passer.Humanoid { return; CheckSensorTransform(); - sensorTransformProp.objectReferenceValue = sensorTransform; + //sensorTransformProp.objectReferenceValue = sensorTransform; ShowSensor(handTarget.humanoid.showRealObjects && handTarget.showRealObjects); @@ -114,18 +114,18 @@ namespace Passer.Humanoid { } public void RemoveController(SerializedProperty sensorProp) { - if (sensorProp == null) - return; + //if (sensorProp == null) + // return; - SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); - sensorTransformProp.objectReferenceValue = null; + //SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); + //sensorTransformProp.objectReferenceValue = null; } #endif public void CheckSensorTransform(Transform targetTransform, bool isLeft) { - if (enabled && sensorTransform == null) + if (enabled && sensorComponent == null) CreateSensorTransform(targetTransform, isLeft); - else if (!enabled && sensorTransform != null) + else if (!enabled && sensorComponent != null) RemoveSensorTransform(); } @@ -136,22 +136,22 @@ namespace Passer.Humanoid { } public override void SetSensor2Target() { - if (sensorTransform == null || target == null) + if (sensorComponent == null || target == null) return; - sensor2TargetRotation = Quaternion.Inverse(sensorTransform.rotation) * target.transform.rotation; - sensor2TargetPosition = -target.transform.InverseTransformPoint(sensorTransform.position); + sensor2TargetRotation = Quaternion.Inverse(sensorComponent.transform.rotation) * target.transform.rotation; + sensor2TargetPosition = -target.transform.InverseTransformPoint(sensorComponent.transform.position); } public virtual void SetSensor2Target(Vector3 targetPosition, Quaternion targetRotation) { - if (sensorTransform == null) + if (sensorComponent == null) return; - sensor2TargetRotation = Quaternion.Inverse(sensorTransform.rotation) * targetRotation; + sensor2TargetRotation = Quaternion.Inverse(sensorComponent.transform.rotation) * targetRotation; //sensor2TargetPosition = -targetTransform.InverseTransformPoint(sensorTransform.position); var worldToLocalMatrix = Matrix4x4.TRS(targetPosition, targetRotation, Vector3.one).inverse; - sensor2TargetPosition = -worldToLocalMatrix.MultiplyPoint3x4(sensorTransform.position); + sensor2TargetPosition = -worldToLocalMatrix.MultiplyPoint3x4(sensorComponent.transform.position); } #endregion @@ -248,11 +248,11 @@ namespace Passer.Humanoid { protected virtual void UpdateHandTargetTransform(Humanoid.Tracking.ArmSensor armSensor) { if (handTarget.hand.target.transform != null) { if (armSensor.hand.confidence.rotation > 0 && armSensor.hand.confidence.rotation >= handTarget.hand.target.confidence.rotation) { - handTarget.hand.target.transform.rotation = sensorTransform.rotation * sensor2TargetRotation; + handTarget.hand.target.transform.rotation = sensorComponent.transform.rotation * sensor2TargetRotation; handTarget.hand.target.confidence.rotation = armSensor.hand.confidence.rotation; } if (armSensor.hand.confidence.position > 0 && armSensor.hand.confidence.position >= handTarget.hand.target.confidence.position) { - handTarget.hand.target.transform.position = sensorTransform.position + handTarget.hand.target.transform.rotation * sensor2TargetPosition; + handTarget.hand.target.transform.position = sensorComponent.transform.position + handTarget.hand.target.transform.rotation * sensor2TargetPosition; handTarget.hand.target.confidence.position = armSensor.hand.confidence.position; } else if (handTarget.hand.target.confidence.position == 0) // Hmm. I could insert the arm model here when confidence.rotation > 0.5F for example! @@ -370,19 +370,21 @@ namespace Passer.Humanoid { public abstract class ArmController : Humanoid.ArmSensor { protected Humanoid.Tracking.Sensor.ID sensorID; protected Controller controllerInput; - public Humanoid.Tracking.ArmController oldController; - public Passer.Tracking.ControllerComponent controller; + //public Humanoid.Tracking.ArmController oldController; + public Passer.Tracking.ControllerComponent controller => sensorComponent as Passer.Tracking.ControllerComponent; + + public override Tracker.Status status { get { - if (oldController == null) + if (sensorComponent == null) return Tracker.Status.Unavailable; else - return oldController.status; + return sensorComponent.status; } set { - if (oldController != null) - oldController.status = value; + if (sensorComponent != null) + sensorComponent.status = value; } } @@ -399,11 +401,11 @@ namespace Passer.Humanoid { if (tracker == null || !tracker.enabled || !enabled) return; - oldController.Update(); - if (oldController.status != Tracker.Status.Tracking) - return; + //oldController.Update(); + //if (oldController.status != Tracker.Status.Tracking) + // return; - UpdateSensorTransform(oldController); + //UpdateSensorTransform(oldController); UpdateTargetTransform(); } diff --git a/Runtime/HumanoidControl/Scripts/Extensions/HeadSensor.cs b/Runtime/HumanoidControl/Scripts/Extensions/HeadSensor.cs index c6b1d9a..568ab40 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/HeadSensor.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/HeadSensor.cs @@ -7,13 +7,13 @@ namespace Passer.Humanoid { using Passer.Tracking; public abstract class HeadSensor : HumanoidSensor { - protected HeadTarget headTarget { - get { return target as HeadTarget; } - } + protected HeadTarget headTarget => target as HeadTarget; + // get { return target as HeadTarget; } + //} protected HumanoidControl humanoid => headTarget.humanoid; - protected new Tracking.HeadSensor sensor; + //protected new Tracking.HeadSensor sensor; #region Manage @@ -42,8 +42,8 @@ namespace Passer.Humanoid { Init(target); - SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); - sensorTransformProp.objectReferenceValue = sensorTransform; + //SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); + //sensorTransformProp.objectReferenceValue = sensorTransform; SerializedProperty targetProp = sensorProp.FindPropertyRelative("target"); targetProp.objectReferenceValue = base.target; @@ -61,11 +61,11 @@ namespace Passer.Humanoid { } public void RemoveController(SerializedProperty sensorProp) { - if (sensorProp == null) - return; + //if (sensorProp == null) + // return; - SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); - sensorTransformProp.objectReferenceValue = null; + //SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); + //sensorTransformProp.objectReferenceValue = null; } #endif @@ -79,13 +79,13 @@ namespace Passer.Humanoid { if (tracker == null || !tracker.enabled || !enabled) return; - status = sensor.Update(); - UpdateSensorTransform(sensor); + //status = sensor.Update(); + //UpdateSensorTransform(sensor); - if (status != Tracker.Status.Tracking) - return; + //if (status != Tracker.Status.Tracking) + // return; - UpdateHeadTargetTransform(sensor); + //UpdateHeadTargetTransform(sensor); } protected virtual void UpdateHeadTargetTransform(Humanoid.Tracking.HeadSensor headTracker) { diff --git a/Runtime/HumanoidControl/Scripts/Extensions/HumanoidSensor.cs b/Runtime/HumanoidControl/Scripts/Extensions/HumanoidSensor.cs index b11898a..8584921 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/HumanoidSensor.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/HumanoidSensor.cs @@ -12,7 +12,7 @@ namespace Passer.Humanoid { public new virtual HumanoidTracker tracker => null; - protected Tracking.Sensor sensor; + //protected Tracking.Sensor sensor; [System.NonSerialized] public const string _name = ""; @@ -30,9 +30,9 @@ namespace Passer.Humanoid { } public virtual void CheckSensorTransform() { - if (enabled && sensorTransform == null) + if (enabled && sensorComponent == null) CreateSensorTransform(); - else if (!enabled && sensorTransform != null) + else if (!enabled && sensorComponent != null) RemoveSensorTransform(); if (sensor2TargetRotation.x + sensor2TargetRotation.y + sensor2TargetRotation.z + sensor2TargetRotation.w == 0) @@ -57,8 +57,9 @@ namespace Passer.Humanoid { sensorObject.name = resourceName; } - sensorTransform = sensorObject.transform; - sensorTransform.parent = tracker.trackerComponent.transform; + //sensorTransform = sensorObject.transform; + //tracker.trackerComponent = tracker.GetTrackerComponent(); + sensorObject.transform.parent = tracker.trackerComponent.transform; sensor2TargetPosition = -_sensor2TargetPosition; sensor2TargetRotation = Quaternion.Inverse(_sensor2TargetRotation); @@ -68,17 +69,17 @@ namespace Passer.Humanoid { protected void RemoveSensorTransform() { if (Application.isPlaying) - Object.Destroy(sensorTransform.gameObject); + Object.Destroy(sensorComponent.gameObject); else - Object.DestroyImmediate(sensorTransform.gameObject, true); + Object.DestroyImmediate(sensorComponent.gameObject, true); } public virtual void SetSensor2Target() { - if (sensorTransform == null || target == null) + if (sensorComponent == null || target == null) return; - sensor2TargetRotation = Quaternion.Inverse(sensorTransform.rotation) * target.transform.rotation; - sensor2TargetPosition = -InverseTransformPointUnscaled(target.transform, sensorTransform.position); + sensor2TargetRotation = Quaternion.Inverse(sensorComponent.transform.rotation) * target.transform.rotation; + sensor2TargetPosition = -InverseTransformPointUnscaled(target.transform, sensorComponent.transform.position); } public static Vector3 InverseTransformPointUnscaled(Transform transform, Vector3 position) { @@ -92,28 +93,28 @@ namespace Passer.Humanoid { if (tracker == null || !tracker.enabled || !enabled) return; - if (sensor == null) - return; + //if (sensor == null) + // return; - sensor.Update(); - if (sensor.status != Tracker.Status.Tracking) - return; + //sensor.Update(); + //if (sensor.status != Tracker.Status.Tracking) + // return; - UpdateSensorTransform(sensor); + //UpdateSensorTransform(sensor); UpdateTargetTransform(); } protected void UpdateSensorTransform(Tracking.Sensor sensor) { - if (sensorTransform == null) + if (sensorComponent == null) return; if (status == Tracker.Status.Tracking) { - sensorTransform.gameObject.SetActive(true); - sensorTransform.position = HumanoidTarget.ToVector3(sensor.sensorPosition); - sensorTransform.rotation = HumanoidTarget.ToQuaternion(sensor.sensorRotation); + sensorComponent.gameObject.SetActive(true); + sensorComponent.transform.position = HumanoidTarget.ToVector3(sensor.sensorPosition); + sensorComponent.transform.rotation = HumanoidTarget.ToQuaternion(sensor.sensorRotation); } else { - sensorTransform.gameObject.SetActive(false); + sensorComponent.gameObject.SetActive(false); } } @@ -124,11 +125,11 @@ namespace Passer.Humanoid { return; } - if (sensorTransform == null) + if (sensorComponent == null) return; - sensorTransform.position = TransformPointUnscaled(targetTransform, -sensor2TargetPosition); - sensorTransform.rotation = targetTransform.rotation * Quaternion.Inverse(sensor2TargetRotation); + sensorComponent.transform.position = TransformPointUnscaled(targetTransform, -sensor2TargetPosition); + sensorComponent.transform.rotation = targetTransform.rotation * Quaternion.Inverse(sensor2TargetRotation); } protected static Vector3 TransformPointUnscaled(Transform transform, Vector3 position) { @@ -137,8 +138,8 @@ namespace Passer.Humanoid { } protected virtual void UpdateTargetTransform() { - target.transform.rotation = sensorTransform.rotation * sensor2TargetRotation; - target.transform.position = sensorTransform.position + target.transform.rotation * sensor2TargetPosition; + target.transform.rotation = sensorComponent.transform.rotation * sensor2TargetRotation; + target.transform.position = sensorComponent.transform.position + target.transform.rotation * sensor2TargetPosition; } #endregion diff --git a/Runtime/HumanoidControl/Scripts/Extensions/LegSensor.cs b/Runtime/HumanoidControl/Scripts/Extensions/LegSensor.cs index b169c46..2a714fc 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/LegSensor.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/LegSensor.cs @@ -39,8 +39,8 @@ namespace Passer.Humanoid { Init(footTarget); - SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); - sensorTransformProp.objectReferenceValue = sensorTransform; + //SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); + //sensorTransformProp.objectReferenceValue = sensorTransform; SerializedProperty targetProp = sensorProp.FindPropertyRelative("target"); targetProp.objectReferenceValue = target; @@ -49,7 +49,7 @@ namespace Passer.Humanoid { return; CheckSensorTransform(); - sensorTransformProp.objectReferenceValue = sensorTransform; + //sensorTransformProp.objectReferenceValue = sensorTransform; ShowSensor(footTarget.humanoid.showRealObjects && footTarget.showRealObjects); diff --git a/Runtime/HumanoidControl/Scripts/Extensions/Sensor.cs b/Runtime/HumanoidControl/Scripts/Extensions/Sensor.cs index 8825c45..042d0b5 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/Sensor.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/Sensor.cs @@ -13,15 +13,9 @@ namespace Passer { public virtual string name { get { return ""; } } - public Transform sensorTransform; + //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(); @@ -33,13 +27,16 @@ namespace Passer { } public virtual void ShowSensor(bool shown) { - if (sensorTransform == null) + if (sensorComponent == null) return; - if (!Application.isPlaying) - sensorTransform.gameObject.SetActive(shown); + //if (sensorTransform == null) + // return; - Renderer[] renderers = sensorTransform.GetComponentsInChildren(); + if (!Application.isPlaying) + sensorComponent.gameObject.SetActive(shown); + + Renderer[] renderers = sensorComponent.GetComponentsInChildren(); for (int i = 0; i < renderers.Length; i++) { if (!(renderers[i] is LineRenderer)) renderers[i].enabled = shown; diff --git a/Runtime/HumanoidControl/Scripts/Extensions/TorsoSensor.cs b/Runtime/HumanoidControl/Scripts/Extensions/TorsoSensor.cs index 14a4005..c44ea3c 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/TorsoSensor.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/TorsoSensor.cs @@ -15,7 +15,7 @@ namespace Passer.Humanoid { protected HumanoidControl humanoid => hipsTarget.humanoid; //public SensorComponent sensorComponent; - protected new Tracking.TorsoSensor sensor; + //protected new Tracking.TorsoSensor sensor; #region Manage @@ -43,8 +43,8 @@ namespace Passer.Humanoid { Init(hipsTarget); - SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); - sensorTransformProp.objectReferenceValue = sensorTransform; + //SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); + //sensorTransformProp.objectReferenceValue = sensorTransform; SerializedProperty targetProp = sensorProp.FindPropertyRelative("target"); targetProp.objectReferenceValue = target; @@ -53,7 +53,7 @@ namespace Passer.Humanoid { return; CheckSensorTransform(); - sensorTransformProp.objectReferenceValue = sensorTransform; + //sensorTransformProp.objectReferenceValue = sensorTransform; ShowSensor(hipsTarget.humanoid.showRealObjects && hipsTarget.showRealObjects); diff --git a/Runtime/HumanoidControl/Scripts/Extensions/Tracker.cs b/Runtime/HumanoidControl/Scripts/Extensions/Tracker.cs index 14a6888..984e121 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/Tracker.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/Tracker.cs @@ -36,11 +36,12 @@ namespace Passer { /// The tracking device /// public TrackerComponent trackerComponent; - /// - /// Returns trackerComponent and creates a new TrackerComponent if it does not exist - /// - /// - public abstract TrackerComponent GetTrackerComponent(); + + ///// + ///// Returns trackerComponent and creates a new TrackerComponent if it does not exist + ///// + ///// + //public abstract TrackerComponent GetTrackerComponent(); #region SubTrackers diff --git a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs index 78cf983..50db6a6 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs @@ -8,79 +8,61 @@ namespace Passer.Humanoid { #if pUNITYXR public override string name => "Unity XR"; -#if hCUSTOM public override HumanoidTracker tracker => humanoid.unityXR; -#endif - public override SensorComponent GetSensorComponent() { - if (sensorComponent != null) - return sensorComponent; + // 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; - } + // 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; + protected UnityXR unityXR => tracker.trackerComponent as UnityXR; #region Manage public override void CheckSensor(HandTarget handTarget) { -#if pUNITYXR if (this.handTarget == null) this.target = handTarget; if (this.handTarget == null) return; - if (unityXR.trackerComponent == null && enabled) - unityXR.CheckTracker(handTarget.humanoid); + if (tracker.trackerComponent == null && enabled) + tracker.CheckTracker(humanoid); - if (enabled && unityXR.trackerComponent != null && unityXR.trackerComponent.enabled) { - if (controller == null) { + if (enabled && tracker.trackerComponent != null && tracker.trackerComponent.enabled) { + if (sensorComponent == null) { 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); - } + sensorComponent = unityXR.GetController(handTarget.isLeft, position, rotation); } - if (controller != null) - sensorTransform = controller.transform; - if (!Application.isPlaying) SetSensor2Target(); } else { #if UNITY_EDITOR if (!Application.isPlaying) { - if (controller != null) - Object.DestroyImmediate(controller.gameObject, true); + if (sensorComponent != null) + Object.DestroyImmediate(sensorComponent.gameObject, true); } #endif - controller = null; - sensorTransform = null; + sensorComponent = null; } -#endif } #endregion Manage @@ -98,13 +80,13 @@ namespace Passer.Humanoid { Quaternion localRotation = handTarget.isLeft ? Quaternion.Euler(180, 90, 90) : Quaternion.Euler(180, -90, -90); Quaternion rotation = handTarget.transform.rotation * localRotation; - UnityXR unityXRcomponent = unityXR.trackerComponent as UnityXR; + UnityXR unityXRcomponent = unityXR; //.trackerComponent as UnityXR; if (unityXRcomponent != null) - controller = unityXRcomponent.GetController(handTarget.isLeft, position, rotation); + sensorComponent = unityXRcomponent.GetController(handTarget.isLeft, position, rotation); - if (controller != null) { - controller.show = handTarget.humanoid.showRealObjects && handTarget.showRealObjects; - sensorTransform = controller.transform; + if (sensorComponent != null) { + sensorComponent.show = handTarget.humanoid.showRealObjects && handTarget.showRealObjects; + //sensorTransform = controller.transform; } SetSensor2Target(); diff --git a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHead.cs b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHead.cs index 5262a37..91aee63 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHead.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHead.cs @@ -15,26 +15,26 @@ namespace Passer.Humanoid { public UnityXR unityXR => tracker.trackerComponent as UnityXR; //protected UnityXRTracker unityXR => humanoid.unityXR; - public override SensorComponent GetSensorComponent() { - if (sensorComponent != null) - return sensorComponent; + //public override SensorComponent GetSensorComponent() { + // if (sensorComponent != null) + // return sensorComponent; - // Make sure the unityXR component exists - humanoid.unityXR.GetTrackerComponent(); + // // Make sure the unityXR component exists + // humanoid.unityXR.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); + // 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 (sensorComponent != null) + // // sensorTransform = sensorComponent.transform; - if (!Application.isPlaying) - SetSensor2Target(); + // if (!Application.isPlaying) + // SetSensor2Target(); - return sensorComponent; - } + // return sensorComponent; + //} #region Manage @@ -44,19 +44,15 @@ namespace Passer.Humanoid { if (this.headTarget == null) return; - if (tracker.trackerComponent == null) { + if (tracker.trackerComponent == null) tracker.CheckTracker(humanoid); - } 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 = tracker.trackerComponent as UnityXR; - sensorComponent = unityXRtracker.GetHmd(position, rotation); + sensorComponent = unityXR.GetHmd(position, rotation); } - if (sensorComponent != null) - sensorTransform = sensorComponent.transform; if (!Application.isPlaying) SetSensor2Target(); @@ -69,7 +65,6 @@ namespace Passer.Humanoid { } #endif sensorComponent = null; - sensorTransform = null; } } @@ -112,8 +107,8 @@ namespace Passer.Humanoid { UnityXR unityXRtracker = tracker.trackerComponent as UnityXR; sensorComponent = unityXRtracker.GetHmd(position, rotation); } - if (sensorComponent != null) - sensorTransform = sensorComponent.transform; + //if (sensorComponent != null) + // sensorTransform = sensorComponent.transform; SetSensor2Target(); CheckSensorTransform(); diff --git a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRTracker.cs b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRTracker.cs index 2828921..0ce3d29 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRTracker.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRTracker.cs @@ -129,11 +129,6 @@ namespace Passer.Humanoid { #region Manage - public override TrackerComponent GetTrackerComponent() { - CheckTracker(humanoid, UnityXR.Get); - return trackerComponent; - } - public override void CheckTracker(HumanoidControl humanoid) { CheckTracker(humanoid, UnityXR.Get); } diff --git a/Runtime/HumanoidControl/Scripts/HumanoidControl.cs b/Runtime/HumanoidControl/Scripts/HumanoidControl.cs index 2cf2460..dbbfbe9 100644 --- a/Runtime/HumanoidControl/Scripts/HumanoidControl.cs +++ b/Runtime/HumanoidControl/Scripts/HumanoidControl.cs @@ -688,6 +688,7 @@ namespace Passer.Humanoid { /// Checks the humanoid for presence of Targets and adds them if they are not found public void DetermineTargets() { + CheckTargetRig(this); HeadTarget.DetermineTarget(this); HandTarget.DetermineTarget(this, true); HandTarget.DetermineTarget(this, false); @@ -762,7 +763,7 @@ namespace Passer.Humanoid { public void UpdateSensorsFromTargets() { #if hLEAP // temporary solution? Leap may need a Head Sensor Component for the camera tracker? - leapTracker.UpdateTrackerFromTarget(leapTracker.isHeadMounted); + leap.UpdateTrackerFromTarget(leap.isHeadMounted); #endif hipsTarget.UpdateSensorsFromTarget(); headTarget.UpdateSensorsFromTarget(); @@ -1023,7 +1024,7 @@ namespace Passer.Humanoid { #endif /// The Leap Motion tracker #if hLEAP - public LeapTracker leapTracker = new LeapTracker(); + public LeapTracker leap = new LeapTracker(); #endif /// The Intel RealSense tracker #if hREALSENSE @@ -1119,7 +1120,7 @@ namespace Passer.Humanoid { neuronTracker, #endif #if hLEAP - leapTracker, + leap, #endif #if hREALSENSE realsense, @@ -1358,7 +1359,7 @@ namespace Passer.Humanoid { #region Stop public void OnApplicationQuit() { #if hLEAP - leapTracker.StopTracker(); + leap.StopTracker(); #endif #if hNEURON neuronTracker.StopTracker();