Fix HumanoidControl.Rotate

This commit is contained in:
Pascal Serrarens 2022-08-05 15:53:43 +02:00
parent 69a1ed2fff
commit 328edcb44c
10 changed files with 69 additions and 14 deletions

View File

@ -69,7 +69,7 @@ namespace Passer.Tracking {
if (boneRenderer != null) { if (boneRenderer != null) {
Vector3 localParentPosition = bone.transform.InverseTransformPoint(bone.transform.parent.position); Vector3 localParentPosition = bone.transform.InverseTransformPoint(bone.transform.parent.position);
boneRenderer.SetPosition(1, localParentPosition); boneRenderer.SetPosition(1, localParentPosition);
//boneRenderer.enabled = show; boneRenderer.enabled = show;
} }
} }
} }

View File

@ -6,7 +6,7 @@ namespace Passer.Tracking {
/// A sensor component is used to add tracking to a transform /// A sensor component is used to add tracking to a transform
/// </summary> /// </summary>
/// Custom sensor implementation can be made by deriving from this class. /// Custom sensor implementation can be made by deriving from this class.
public abstract class SensorComponent : MonoBehaviour { public class SensorComponent : MonoBehaviour {
/// <summary> /// <summary>
/// The transform which is used as the root of the tracking space /// The transform which is used as the root of the tracking space
/// </summary> /// </summary>

View File

@ -9,11 +9,12 @@ namespace Passer.Tracking {
protected static Material boneWhite; 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); GameObject boneGO = new GameObject(name);
boneGO.transform.SetParent(parent, false); boneGO.transform.SetParent(parent, false);
AddBoneRenderer(boneGO); if (addRenderer)
AddBoneRenderer(boneGO);
TrackedBone bone = new TrackedBone() { TrackedBone bone = new TrackedBone() {
transform = boneGO.transform transform = boneGO.transform

View File

@ -1184,12 +1184,23 @@ namespace Passer.Humanoid {
//if (gameControllerEnabled && traditionalInput != null) //if (gameControllerEnabled && traditionalInput != null)
// traditionalInput.UpdateGameController(gameController); // traditionalInput.UpdateGameController(gameController);
InitializeTrackingConfidence();
for (int i = 0; i < trackers.Length; i++) { for (int i = 0; i < trackers.Length; i++) {
if (trackers[i] != null) if (trackers[i] != null)
trackers[i].UpdateTracker(); trackers[i].UpdateTracker();
} }
} }
protected void InitializeTrackingConfidence() {
hipsTarget.InitializeTrackingConfidence();
headTarget.InitializeTrackingConfidence();
leftHandTarget.InitializeTrackingConfidence();
rightHandTarget.InitializeTrackingConfidence();
leftFootTarget.InitializeTrackingConfidence();
rightFootTarget.InitializeTrackingConfidence();
}
protected void StartSensors() { protected void StartSensors() {
hipsTarget.StartSensors(); hipsTarget.StartSensors();
headTarget.StartSensors(); headTarget.StartSensors();
@ -1627,6 +1638,16 @@ namespace Passer.Humanoid {
//targetVelocity += Vector3.right * x; //targetVelocity += Vector3.right * x;
} }
/// <summary>
/// Moves the humanoid in 2D space
/// </summary>
/// <param name="velocity">The velocity to move with</param>
/// 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);
}
/// <summary>Moves the humanoid</summary> /// <summary>Moves the humanoid</summary>
public virtual void Move(Vector3 velocity) { public virtual void Move(Vector3 velocity) {
@ -1645,8 +1666,7 @@ namespace Passer.Humanoid {
/// Rotates the humanoid along the Y axis /// Rotates the humanoid along the Y axis
/// <param name="angularSpeed">The speed in degrees per second</param> /// <param name="angularSpeed">The speed in degrees per second</param>
public void Rotate(float angularSpeed) { public void Rotate(float angularSpeed) {
angularSpeed *= Time.deltaTime * rotationSpeed; angularSpeed *= Time.deltaTime;
//transform.RotateAround(hipsTarget.transform.position, hipsTarget.transform.up, angularSpeed);
transform.RotateAround(headTarget.transform.position, hipsTarget.transform.up, angularSpeed); transform.RotateAround(headTarget.transform.position, hipsTarget.transform.up, angularSpeed);
} }

View File

@ -69,6 +69,9 @@ namespace Passer {
UpdateTarget(); UpdateTarget();
} }
public override void InitializeTrackingConfidence() {
}
public override void UpdateTarget() { public override void UpdateTarget() {
sensorComponent.UpdateComponent(); sensorComponent.UpdateComponent();

View File

@ -832,10 +832,17 @@ namespace Passer.Humanoid {
#region Update #region Update
public override void UpdateTarget() { public override void InitializeTrackingConfidence() {
upperLeg.target.confidence = Confidence.none; upperLeg.target.confidence = Confidence.none;
lowerLeg.target.confidence = Confidence.none; lowerLeg.target.confidence = Confidence.none;
foot.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(); UpdateSensors();

View File

@ -1473,6 +1473,13 @@ namespace Passer.Humanoid {
#region Update #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 bool grabbedChanged;
public override void UpdateTarget() { public override void UpdateTarget() {
@ -1484,10 +1491,10 @@ namespace Passer.Humanoid {
grabbedChanged = (lastGrabbedObject != grabbedObject); grabbedChanged = (lastGrabbedObject != grabbedObject);
hand.target.confidence.Degrade(); //hand.target.confidence.Degrade();
forearm.target.confidence.Degrade(); //forearm.target.confidence.Degrade();
upperArm.target.confidence.Degrade(); //upperArm.target.confidence.Degrade();
shoulder.target.confidence.Degrade(); //shoulder.target.confidence.Degrade();
UpdateSensors(); UpdateSensors();

View File

@ -881,12 +881,18 @@ namespace Passer.Humanoid {
#region Update #region Update
public override void InitializeTrackingConfidence() {
neck.target.confidence.Degrade();
head.target.confidence.Degrade();
}
/// <summary>Update all head sensors</summary> /// <summary>Update all head sensors</summary>
public override void UpdateTarget() { public override void UpdateTarget() {
tracking = false; tracking = false;
neck.target.confidence.Degrade(); //neck.target.confidence.Degrade();
head.target.confidence.Degrade(); //head.target.confidence.Degrade();
#if hFACE #if hFACE
if (head.bone.transform != null) if (head.bone.transform != null)

View File

@ -618,10 +618,16 @@ namespace Passer.Humanoid {
#region Update #region Update
public override void UpdateTarget() { public override void InitializeTrackingConfidence() {
hips.target.confidence.Degrade(); hips.target.confidence.Degrade();
spine.target.confidence = Confidence.none; spine.target.confidence = Confidence.none;
chest.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(); UpdateSensors();

View File

@ -33,6 +33,11 @@ namespace Passer {
public virtual void StartSensors() { } public virtual void StartSensors() { }
protected virtual void UpdateSensors() { } protected virtual void UpdateSensors() { }
public virtual void StopSensors() { } public virtual void StopSensors() { }
/// <summary>
/// Sets the tracking confidence before all tracking information is updated
/// </summary>
public abstract void InitializeTrackingConfidence();
public abstract void UpdateTarget(); public abstract void UpdateTarget();
public static List<Collider> SetColliderToTrigger(GameObject obj) { public static List<Collider> SetColliderToTrigger(GameObject obj) {