From 328edcb44c9701cba6b32d1f1f17750b9f8f9ba3 Mon Sep 17 00:00:00 2001 From: Pascal Serrarens Date: Fri, 5 Aug 2022 15:53:43 +0200 Subject: [PATCH] Fix HumanoidControl.Rotate --- .../Scripts/Extensions/BodySkeleton.cs | 2 +- .../Scripts/Extensions/SensorComponent.cs | 2 +- .../Scripts/Extensions/TrackedBone.cs | 5 ++-- .../Scripts/HumanoidControl.cs | 24 +++++++++++++++++-- .../HumanoidControl/Scripts/ObjectTracker.cs | 3 +++ .../Scripts/Targets/FootTarget.cs | 9 ++++++- .../Scripts/Targets/HandTarget.cs | 15 ++++++++---- .../Scripts/Targets/HeadTarget.cs | 10 ++++++-- .../Scripts/Targets/HipsTarget.cs | 8 ++++++- .../HumanoidControl/Scripts/Targets/Target.cs | 5 ++++ 10 files changed, 69 insertions(+), 14 deletions(-) diff --git a/Runtime/HumanoidControl/Scripts/Extensions/BodySkeleton.cs b/Runtime/HumanoidControl/Scripts/Extensions/BodySkeleton.cs index 92d7f07..6b401bd 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/BodySkeleton.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/BodySkeleton.cs @@ -69,7 +69,7 @@ namespace Passer.Tracking { if (boneRenderer != null) { Vector3 localParentPosition = bone.transform.InverseTransformPoint(bone.transform.parent.position); boneRenderer.SetPosition(1, localParentPosition); - //boneRenderer.enabled = show; + boneRenderer.enabled = show; } } } diff --git a/Runtime/HumanoidControl/Scripts/Extensions/SensorComponent.cs b/Runtime/HumanoidControl/Scripts/Extensions/SensorComponent.cs index a1ace42..eccbef5 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/SensorComponent.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/SensorComponent.cs @@ -6,7 +6,7 @@ namespace Passer.Tracking { /// A sensor component is used to add tracking to a transform /// /// Custom sensor implementation can be made by deriving from this class. - public abstract class SensorComponent : MonoBehaviour { + public class SensorComponent : MonoBehaviour { /// /// The transform which is used as the root of the tracking space /// diff --git a/Runtime/HumanoidControl/Scripts/Extensions/TrackedBone.cs b/Runtime/HumanoidControl/Scripts/Extensions/TrackedBone.cs index 2a5a30b..6016253 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/TrackedBone.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/TrackedBone.cs @@ -9,11 +9,12 @@ namespace Passer.Tracking { protected static Material boneWhite; - public static TrackedBone Create(string name, Transform parent) { + public static TrackedBone Create(string name, Transform parent, bool addRenderer = true) { GameObject boneGO = new GameObject(name); boneGO.transform.SetParent(parent, false); - AddBoneRenderer(boneGO); + if (addRenderer) + AddBoneRenderer(boneGO); TrackedBone bone = new TrackedBone() { transform = boneGO.transform diff --git a/Runtime/HumanoidControl/Scripts/HumanoidControl.cs b/Runtime/HumanoidControl/Scripts/HumanoidControl.cs index afe7028..2d17871 100644 --- a/Runtime/HumanoidControl/Scripts/HumanoidControl.cs +++ b/Runtime/HumanoidControl/Scripts/HumanoidControl.cs @@ -1184,12 +1184,23 @@ namespace Passer.Humanoid { //if (gameControllerEnabled && traditionalInput != null) // traditionalInput.UpdateGameController(gameController); + InitializeTrackingConfidence(); + for (int i = 0; i < trackers.Length; i++) { if (trackers[i] != null) trackers[i].UpdateTracker(); } } + protected void InitializeTrackingConfidence() { + hipsTarget.InitializeTrackingConfidence(); + headTarget.InitializeTrackingConfidence(); + leftHandTarget.InitializeTrackingConfidence(); + rightHandTarget.InitializeTrackingConfidence(); + leftFootTarget.InitializeTrackingConfidence(); + rightFootTarget.InitializeTrackingConfidence(); + } + protected void StartSensors() { hipsTarget.StartSensors(); headTarget.StartSensors(); @@ -1627,6 +1638,16 @@ namespace Passer.Humanoid { //targetVelocity += Vector3.right * x; } + /// + /// Moves the humanoid in 2D space + /// + /// The velocity to move with + /// The velocity axis are mapped as follows: + /// x = left/right movement + /// y = forward/backward movement + public virtual void Move(Vector2 velocity) { + targetVelocity = new Vector3(velocity.x, 0, velocity.y); + } /// Moves the humanoid public virtual void Move(Vector3 velocity) { @@ -1645,8 +1666,7 @@ namespace Passer.Humanoid { /// Rotates the humanoid along the Y axis /// The speed in degrees per second public void Rotate(float angularSpeed) { - angularSpeed *= Time.deltaTime * rotationSpeed; - //transform.RotateAround(hipsTarget.transform.position, hipsTarget.transform.up, angularSpeed); + angularSpeed *= Time.deltaTime; transform.RotateAround(headTarget.transform.position, hipsTarget.transform.up, angularSpeed); } diff --git a/Runtime/HumanoidControl/Scripts/ObjectTracker.cs b/Runtime/HumanoidControl/Scripts/ObjectTracker.cs index 1440326..9fd4be9 100644 --- a/Runtime/HumanoidControl/Scripts/ObjectTracker.cs +++ b/Runtime/HumanoidControl/Scripts/ObjectTracker.cs @@ -69,6 +69,9 @@ namespace Passer { UpdateTarget(); } + public override void InitializeTrackingConfidence() { + } + public override void UpdateTarget() { sensorComponent.UpdateComponent(); diff --git a/Runtime/HumanoidControl/Scripts/Targets/FootTarget.cs b/Runtime/HumanoidControl/Scripts/Targets/FootTarget.cs index f2d6a50..f3fecb2 100644 --- a/Runtime/HumanoidControl/Scripts/Targets/FootTarget.cs +++ b/Runtime/HumanoidControl/Scripts/Targets/FootTarget.cs @@ -832,10 +832,17 @@ namespace Passer.Humanoid { #region Update - public override void UpdateTarget() { + public override void InitializeTrackingConfidence() { upperLeg.target.confidence = Confidence.none; lowerLeg.target.confidence = Confidence.none; foot.target.confidence = Confidence.none; + } + + public override void UpdateTarget() { + // If the targets are update in the tracker, this will reset the confidence... + //upperLeg.target.confidence = Confidence.none; + //lowerLeg.target.confidence = Confidence.none; + //foot.target.confidence = Confidence.none; UpdateSensors(); diff --git a/Runtime/HumanoidControl/Scripts/Targets/HandTarget.cs b/Runtime/HumanoidControl/Scripts/Targets/HandTarget.cs index 3cbb66e..e3c5e29 100644 --- a/Runtime/HumanoidControl/Scripts/Targets/HandTarget.cs +++ b/Runtime/HumanoidControl/Scripts/Targets/HandTarget.cs @@ -1473,6 +1473,13 @@ namespace Passer.Humanoid { #region Update + public override void InitializeTrackingConfidence() { + hand.target.confidence.Degrade(); + forearm.target.confidence.Degrade(); + upperArm.target.confidence.Degrade(); + shoulder.target.confidence.Degrade(); + } + public bool grabbedChanged; public override void UpdateTarget() { @@ -1484,10 +1491,10 @@ namespace Passer.Humanoid { grabbedChanged = (lastGrabbedObject != grabbedObject); - hand.target.confidence.Degrade(); - forearm.target.confidence.Degrade(); - upperArm.target.confidence.Degrade(); - shoulder.target.confidence.Degrade(); + //hand.target.confidence.Degrade(); + //forearm.target.confidence.Degrade(); + //upperArm.target.confidence.Degrade(); + //shoulder.target.confidence.Degrade(); UpdateSensors(); diff --git a/Runtime/HumanoidControl/Scripts/Targets/HeadTarget.cs b/Runtime/HumanoidControl/Scripts/Targets/HeadTarget.cs index 98341e1..6d86a75 100644 --- a/Runtime/HumanoidControl/Scripts/Targets/HeadTarget.cs +++ b/Runtime/HumanoidControl/Scripts/Targets/HeadTarget.cs @@ -881,12 +881,18 @@ namespace Passer.Humanoid { #region Update + public override void InitializeTrackingConfidence() { + neck.target.confidence.Degrade(); + head.target.confidence.Degrade(); + + } + /// Update all head sensors public override void UpdateTarget() { tracking = false; - neck.target.confidence.Degrade(); - head.target.confidence.Degrade(); + //neck.target.confidence.Degrade(); + //head.target.confidence.Degrade(); #if hFACE if (head.bone.transform != null) diff --git a/Runtime/HumanoidControl/Scripts/Targets/HipsTarget.cs b/Runtime/HumanoidControl/Scripts/Targets/HipsTarget.cs index bb7a7eb..8f46c21 100644 --- a/Runtime/HumanoidControl/Scripts/Targets/HipsTarget.cs +++ b/Runtime/HumanoidControl/Scripts/Targets/HipsTarget.cs @@ -618,10 +618,16 @@ namespace Passer.Humanoid { #region Update - public override void UpdateTarget() { + public override void InitializeTrackingConfidence() { hips.target.confidence.Degrade(); spine.target.confidence = Confidence.none; chest.target.confidence = Confidence.none; + } + + public override void UpdateTarget() { + //hips.target.confidence.Degrade(); + //spine.target.confidence = Confidence.none; + //chest.target.confidence = Confidence.none; UpdateSensors(); diff --git a/Runtime/HumanoidControl/Scripts/Targets/Target.cs b/Runtime/HumanoidControl/Scripts/Targets/Target.cs index a195590..fe2b0ca 100644 --- a/Runtime/HumanoidControl/Scripts/Targets/Target.cs +++ b/Runtime/HumanoidControl/Scripts/Targets/Target.cs @@ -33,6 +33,11 @@ namespace Passer { public virtual void StartSensors() { } protected virtual void UpdateSensors() { } public virtual void StopSensors() { } + + /// + /// Sets the tracking confidence before all tracking information is updated + /// + public abstract void InitializeTrackingConfidence(); public abstract void UpdateTarget(); public static List SetColliderToTrigger(GameObject obj) {