From 998683a881808ccf2693b31a119a996c35a7bb80 Mon Sep 17 00:00:00 2001 From: Pascal Serrarens Date: Fri, 3 Jun 2022 17:02:05 +0200 Subject: [PATCH] Code improvement --- .../Scripts/Animator/ArmAnimator.cs | 9 ++++ .../Scripts/Animator/HeadAnimator.cs | 5 ++ .../Scripts/Animator/HeadPredictor.cs | 5 ++ .../Scripts/Animator/LegAnimator.cs | 7 ++- .../Scripts/Animator/TorsoAnimator.cs | 6 ++- .../Scripts/Extensions/ArmSensor.cs | 6 +-- .../Scripts/Extensions/HeadSensor.cs | 4 +- .../Scripts/Extensions/HumanoidSensor.cs | 15 +++--- .../Scripts/Extensions/LegSensor.cs | 5 +- .../Scripts/Extensions/Sensor.cs | 2 +- .../Scripts/Extensions/TorsoSensor.cs | 4 +- .../Scripts/Extensions/Tracker.cs | 6 +-- .../Scripts/Extensions/TrackerComponent.cs | 33 ++----------- .../Scripts/Extensions/UnityXR/UnityXRHand.cs | 20 ++++++++ .../Scripts/Extensions/UnityXR/UnityXRHead.cs | 47 ++++++++++++++----- 15 files changed, 111 insertions(+), 63 deletions(-) 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)