Code improvements

This commit is contained in:
Pascal Serrarens 2022-06-09 15:24:50 +02:00
parent ae7112de56
commit 80a5581054
22 changed files with 190 additions and 222 deletions

View File

@ -122,7 +122,7 @@ namespace Passer.Humanoid {
EditorGUILayout.LabelField("Hmd", GUILayout.Width(120)); EditorGUILayout.LabelField("Hmd", GUILayout.Width(120));
if (GUILayout.Button("Show")) { if (GUILayout.Button("Show")) {
//headTarget.unityXR.CheckSensor(headTarget); //headTarget.unityXR.CheckSensor(headTarget);
headTarget.unityXR.GetSensorComponent(); headTarget.unityXR.CheckSensor(headTarget); //.GetSensorComponent();
} }
} }
} }

View File

@ -312,7 +312,7 @@ namespace Passer {
new Hydra_Editor.TrackerProps(serializedObject, targetObjs, humanoid.hydra), new Hydra_Editor.TrackerProps(serializedObject, targetObjs, humanoid.hydra),
#endif #endif
#if hLEAP && (UNITY_STANDALONE_WIN || UNITY_WSA_10_0) #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 #endif
#if hKINECT1 && (UNITY_STANDALONE_WIN || UNITY_WSA_10_0) #if hKINECT1 && (UNITY_STANDALONE_WIN || UNITY_WSA_10_0)
new Kinect1_Editor.TrackerProps(serializedObject, targetObjs, humanoid.kinect1), new Kinect1_Editor.TrackerProps(serializedObject, targetObjs, humanoid.kinect1),
@ -1082,7 +1082,7 @@ namespace Passer {
using (new EditorGUILayout.HorizontalScope()) { using (new EditorGUILayout.HorizontalScope()) {
EditorGUILayout.LabelField("Tracker", GUILayout.Width(120)); EditorGUILayout.LabelField("Tracker", GUILayout.Width(120));
if (TrackerComponentShowButton()) if (TrackerComponentShowButton())
tracker.GetTrackerComponent(); tracker.CheckTracker(humanoid);
} }
} }
else { else {
@ -1136,7 +1136,7 @@ namespace Passer {
private void RemoveControllers() { private void RemoveControllers() {
foreach (HumanoidSensor sensor in tracker.sensors) foreach (HumanoidSensor sensor in tracker.sensors)
RemoveTransform(sensor.sensorTransform); RemoveSensor(sensor.sensorComponent);
if (tracker.headSensor != null) if (tracker.headSensor != null)
tracker.headSensor.RemoveController(headSensorProp); tracker.headSensor.RemoveController(headSensorProp);
@ -1152,11 +1152,16 @@ namespace Passer {
tracker.rightFootSensor.RemoveController(rightFootSensorProp); tracker.rightFootSensor.RemoveController(rightFootSensorProp);
} }
private void RemoveTransform(Transform trackerTransform) { private void RemoveSensor(Tracking.SensorComponent sensorComponent) {
if (trackerTransform != null) if (sensorComponent != null)
DestroyImmediate(trackerTransform.gameObject, true); DestroyImmediate(sensorComponent.gameObject, true);
} }
//private void RemoveTransform(Transform trackerTransform) {
// if (trackerTransform != null)
// DestroyImmediate(trackerTransform.gameObject, true);
//}
private void SetSensors2Target() { private void SetSensors2Target() {
foreach (HumanoidSensor sensor in tracker.sensors) { foreach (HumanoidSensor sensor in tracker.sensors) {
sensor.SetSensor2Target(); sensor.SetSensor2Target();

View File

@ -572,7 +572,7 @@ namespace Passer {
public abstract class TargetProps { public abstract class TargetProps {
public SerializedProperty enabledProp; public SerializedProperty enabledProp;
public SerializedProperty sensorTransformProp; public SerializedProperty sensorComponentProp;
public SerializedProperty sensor2TargetPositionProp; public SerializedProperty sensor2TargetPositionProp;
public SerializedProperty sensor2TargetRotationProp; public SerializedProperty sensor2TargetRotationProp;
@ -581,7 +581,7 @@ namespace Passer {
public TargetProps(SerializedObject serializedObject, LegSensor _sensor, FootTarget _footTarget, string unitySensorName) { public TargetProps(SerializedObject serializedObject, LegSensor _sensor, FootTarget _footTarget, string unitySensorName) {
enabledProp = serializedObject.FindProperty(unitySensorName + ".enabled"); enabledProp = serializedObject.FindProperty(unitySensorName + ".enabled");
sensorTransformProp = serializedObject.FindProperty(unitySensorName + ".sensorTransform"); sensorComponentProp = serializedObject.FindProperty(unitySensorName + ".sensorComponent");
sensor2TargetPositionProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetPosition"); sensor2TargetPositionProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetPosition");
sensor2TargetRotationProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetRotation"); sensor2TargetRotationProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetRotation");
@ -592,11 +592,11 @@ namespace Passer {
} }
public virtual void SetSensor2Target() { public virtual void SetSensor2Target() {
if (sensor.sensorTransform == null) if (sensor.sensorComponent == null)
return; return;
sensor2TargetRotationProp.quaternionValue = Quaternion.Inverse(sensor.sensorTransform.rotation) * footTarget.foot.target.transform.rotation; sensor2TargetRotationProp.quaternionValue = Quaternion.Inverse(sensor.sensorComponent.transform.rotation) * footTarget.foot.target.transform.rotation;
sensor2TargetPositionProp.vector3Value = -footTarget.foot.target.transform.InverseTransformPoint(sensor.sensorTransform.position); sensor2TargetPositionProp.vector3Value = -footTarget.foot.target.transform.InverseTransformPoint(sensor.sensorComponent.transform.position);
} }
public abstract void Inspector(); public abstract void Inspector();

View File

@ -721,7 +721,8 @@ namespace Passer.Humanoid {
public abstract class TargetProps { public abstract class TargetProps {
public SerializedProperty enabledProp; public SerializedProperty enabledProp;
public SerializedProperty sensorTransformProp; //public SerializedProperty sensorTransformProp;
public SerializedProperty sensorComponentProp;
public SerializedProperty sensor2TargetPositionProp; public SerializedProperty sensor2TargetPositionProp;
public SerializedProperty sensor2TargetRotationProp; public SerializedProperty sensor2TargetRotationProp;
@ -730,7 +731,8 @@ namespace Passer.Humanoid {
public TargetProps(SerializedObject serializedObject, Humanoid.ArmSensor _sensor, HandTarget _handTarget, string unitySensorName) { public TargetProps(SerializedObject serializedObject, Humanoid.ArmSensor _sensor, HandTarget _handTarget, string unitySensorName) {
enabledProp = serializedObject.FindProperty(unitySensorName + ".enabled"); 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"); sensor2TargetPositionProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetPosition");
sensor2TargetRotationProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetRotation"); sensor2TargetRotationProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetRotation");

View File

@ -507,7 +507,8 @@ namespace Passer.Humanoid {
public abstract class TargetProps { public abstract class TargetProps {
public SerializedProperty enabledProp; public SerializedProperty enabledProp;
public SerializedProperty sensorTransformProp; //public SerializedProperty sensorTransformProp;
public SerializedProperty sensorComponentProp;
public SerializedProperty sensor2TargetPositionProp; public SerializedProperty sensor2TargetPositionProp;
public SerializedProperty sensor2TargetRotationProp; public SerializedProperty sensor2TargetRotationProp;
@ -516,7 +517,7 @@ namespace Passer.Humanoid {
public TargetProps(SerializedObject serializedObject, HeadSensor _sensor, HeadTarget _headTarget, string unitySensorName) { public TargetProps(SerializedObject serializedObject, HeadSensor _sensor, HeadTarget _headTarget, string unitySensorName) {
enabledProp = serializedObject.FindProperty(unitySensorName + ".enabled"); enabledProp = serializedObject.FindProperty(unitySensorName + ".enabled");
sensorTransformProp = serializedObject.FindProperty(unitySensorName + ".sensorTransform"); sensorComponentProp = serializedObject.FindProperty(unitySensorName + ".sensorComponent");
sensor2TargetPositionProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetPosition"); sensor2TargetPositionProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetPosition");
sensor2TargetRotationProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetRotation"); sensor2TargetRotationProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetRotation");
@ -527,11 +528,11 @@ namespace Passer.Humanoid {
} }
public virtual void SetSensor2Target() { public virtual void SetSensor2Target() {
if (sensor.sensorTransform == null) if (sensor.sensorComponent == null)
return; return;
sensor2TargetRotationProp.quaternionValue = Quaternion.Inverse(sensor.sensorTransform.rotation) * headTarget.head.target.transform.rotation; sensor2TargetRotationProp.quaternionValue = Quaternion.Inverse(sensor.sensorComponent.transform.rotation) * headTarget.head.target.transform.rotation;
sensor2TargetPositionProp.vector3Value = -headTarget.head.target.transform.InverseTransformPoint(sensor.sensorTransform.position); sensor2TargetPositionProp.vector3Value = -headTarget.head.target.transform.InverseTransformPoint(sensor.sensorComponent.transform.position);
} }
public abstract void Inspector(); public abstract void Inspector();

View File

@ -32,7 +32,7 @@ namespace Passer {
private void InitEditors() { private void InitEditors() {
allProps = new TargetProps[] { allProps = new TargetProps[] {
#if hOPENVR && hVIVETRACKER && (UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX) #if hVIVETRACKER
new ViveTracker_Editor.HipsTargetProps(serializedObject, hipsTarget), new ViveTracker_Editor.HipsTargetProps(serializedObject, hipsTarget),
#endif #endif
#if hKINECT1 #if hKINECT1
@ -297,7 +297,8 @@ namespace Passer {
public abstract class TargetProps { public abstract class TargetProps {
public SerializedProperty enabledProp; public SerializedProperty enabledProp;
public SerializedProperty sensorTransformProp; //public SerializedProperty sensorTransformProp;
public SerializedProperty sensorComponentProp;
public SerializedProperty sensor2TargetPositionProp; public SerializedProperty sensor2TargetPositionProp;
public SerializedProperty sensor2TargetRotationProp; public SerializedProperty sensor2TargetRotationProp;
@ -306,7 +307,8 @@ namespace Passer {
public TargetProps(SerializedObject serializedObject, TorsoSensor _sensor, HipsTarget _hipsTarget, string unitySensorName) { public TargetProps(SerializedObject serializedObject, TorsoSensor _sensor, HipsTarget _hipsTarget, string unitySensorName) {
enabledProp = serializedObject.FindProperty(unitySensorName + ".enabled"); 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"); sensor2TargetPositionProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetPosition");
sensor2TargetRotationProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetRotation"); sensor2TargetRotationProp = serializedObject.FindProperty(unitySensorName + ".sensor2TargetRotation");
@ -317,11 +319,11 @@ namespace Passer {
} }
public virtual void SetSensor2Target() { public virtual void SetSensor2Target() {
if (sensor.sensorTransform == null) if (sensor.sensorComponent == null)
return; return;
sensor2TargetRotationProp.quaternionValue = Quaternion.Inverse(sensor.sensorTransform.rotation) * hipsTarget.hips.target.transform.rotation; sensor2TargetRotationProp.quaternionValue = Quaternion.Inverse(sensor.sensorComponent.transform.rotation) * hipsTarget.hips.target.transform.rotation;
sensor2TargetPositionProp.vector3Value = -hipsTarget.hips.target.transform.InverseTransformPoint(sensor.sensorTransform.position); sensor2TargetPositionProp.vector3Value = -hipsTarget.hips.target.transform.InverseTransformPoint(sensor.sensorComponent.transform.position);
} }
public abstract void Inspector(); public abstract void Inspector();

View File

@ -12,9 +12,9 @@ namespace Passer.Humanoid {
set { } set { }
} }
public override SensorComponent GetSensorComponent() { //public override SensorComponent GetSensorComponent() {
return null; // return null;
} //}
} }
[System.Serializable] [System.Serializable]
@ -26,9 +26,9 @@ namespace Passer.Humanoid {
set { } set { }
} }
public override SensorComponent GetSensorComponent() { //public override SensorComponent GetSensorComponent() {
return null; // return null;
} //}
public bool armSwing; public bool armSwing;
[HideInInspector] [HideInInspector]

View File

@ -8,10 +8,6 @@ namespace Passer.Humanoid {
public bool headAnimation = true; public bool headAnimation = true;
public bool faceAnimation = true; public bool faceAnimation = true;
public override SensorComponent GetSensorComponent() {
return null;
}
#region Update #region Update
public override void Update() { public override void Update() {
if (!headTarget.humanoid.animatorEnabled || !enabled || headTarget.humanoid.targetsRig.runtimeAnimatorController != null) if (!headTarget.humanoid.animatorEnabled || !enabled || headTarget.humanoid.targetsRig.runtimeAnimatorController != null)

View File

@ -8,10 +8,6 @@ namespace Passer.Humanoid {
private Vector3 positionalVelocity; private Vector3 positionalVelocity;
private Quaternion rotationalVelocity; private Quaternion rotationalVelocity;
public override SensorComponent GetSensorComponent() {
return null;
}
public override void Start(HumanoidControl _humanoid, Transform targetTransform) { public override void Start(HumanoidControl _humanoid, Transform targetTransform) {
base.Start(_humanoid, targetTransform); base.Start(_humanoid, targetTransform);
} }

View File

@ -6,10 +6,6 @@ namespace Passer.Humanoid {
[System.Serializable] [System.Serializable]
public class LegAnimator : LegSensor { public class LegAnimator : LegSensor {
public override SensorComponent GetSensorComponent() {
return null;
}
private LegAnimator leftAnimator; private LegAnimator leftAnimator;
private LegAnimator rightAnimator; private LegAnimator rightAnimator;

View File

@ -6,10 +6,6 @@ namespace Passer.Humanoid {
[System.Serializable] [System.Serializable]
public class TorsoAnimator : TorsoSensor { public class TorsoAnimator : TorsoSensor {
public override SensorComponent GetSensorComponent() {
return null;
}
public enum BodyRotation { public enum BodyRotation {
HeadRotation = 1, HeadRotation = 1,
HeadAndHandRotation = 2, HeadAndHandRotation = 2,

View File

@ -93,8 +93,8 @@ namespace Passer.Humanoid {
Init(handTarget); Init(handTarget);
SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); //SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform");
sensorTransformProp.objectReferenceValue = sensorTransform; //sensorTransformProp.objectReferenceValue = sensorTransform;
SerializedProperty targetProp = sensorProp.FindPropertyRelative("target"); SerializedProperty targetProp = sensorProp.FindPropertyRelative("target");
targetProp.objectReferenceValue = target; targetProp.objectReferenceValue = target;
@ -103,7 +103,7 @@ namespace Passer.Humanoid {
return; return;
CheckSensorTransform(); CheckSensorTransform();
sensorTransformProp.objectReferenceValue = sensorTransform; //sensorTransformProp.objectReferenceValue = sensorTransform;
ShowSensor(handTarget.humanoid.showRealObjects && handTarget.showRealObjects); ShowSensor(handTarget.humanoid.showRealObjects && handTarget.showRealObjects);
@ -114,18 +114,18 @@ namespace Passer.Humanoid {
} }
public void RemoveController(SerializedProperty sensorProp) { public void RemoveController(SerializedProperty sensorProp) {
if (sensorProp == null) //if (sensorProp == null)
return; // return;
SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); //SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform");
sensorTransformProp.objectReferenceValue = null; //sensorTransformProp.objectReferenceValue = null;
} }
#endif #endif
public void CheckSensorTransform(Transform targetTransform, bool isLeft) { public void CheckSensorTransform(Transform targetTransform, bool isLeft) {
if (enabled && sensorTransform == null) if (enabled && sensorComponent == null)
CreateSensorTransform(targetTransform, isLeft); CreateSensorTransform(targetTransform, isLeft);
else if (!enabled && sensorTransform != null) else if (!enabled && sensorComponent != null)
RemoveSensorTransform(); RemoveSensorTransform();
} }
@ -136,22 +136,22 @@ namespace Passer.Humanoid {
} }
public override void SetSensor2Target() { public override void SetSensor2Target() {
if (sensorTransform == null || target == null) if (sensorComponent == null || target == null)
return; return;
sensor2TargetRotation = Quaternion.Inverse(sensorTransform.rotation) * target.transform.rotation; sensor2TargetRotation = Quaternion.Inverse(sensorComponent.transform.rotation) * target.transform.rotation;
sensor2TargetPosition = -target.transform.InverseTransformPoint(sensorTransform.position); sensor2TargetPosition = -target.transform.InverseTransformPoint(sensorComponent.transform.position);
} }
public virtual void SetSensor2Target(Vector3 targetPosition, Quaternion targetRotation) { public virtual void SetSensor2Target(Vector3 targetPosition, Quaternion targetRotation) {
if (sensorTransform == null) if (sensorComponent == null)
return; return;
sensor2TargetRotation = Quaternion.Inverse(sensorTransform.rotation) * targetRotation; sensor2TargetRotation = Quaternion.Inverse(sensorComponent.transform.rotation) * targetRotation;
//sensor2TargetPosition = -targetTransform.InverseTransformPoint(sensorTransform.position); //sensor2TargetPosition = -targetTransform.InverseTransformPoint(sensorTransform.position);
var worldToLocalMatrix = Matrix4x4.TRS(targetPosition, targetRotation, Vector3.one).inverse; var worldToLocalMatrix = Matrix4x4.TRS(targetPosition, targetRotation, Vector3.one).inverse;
sensor2TargetPosition = -worldToLocalMatrix.MultiplyPoint3x4(sensorTransform.position); sensor2TargetPosition = -worldToLocalMatrix.MultiplyPoint3x4(sensorComponent.transform.position);
} }
#endregion #endregion
@ -248,11 +248,11 @@ namespace Passer.Humanoid {
protected virtual void UpdateHandTargetTransform(Humanoid.Tracking.ArmSensor armSensor) { protected virtual void UpdateHandTargetTransform(Humanoid.Tracking.ArmSensor armSensor) {
if (handTarget.hand.target.transform != null) { if (handTarget.hand.target.transform != null) {
if (armSensor.hand.confidence.rotation > 0 && armSensor.hand.confidence.rotation >= handTarget.hand.target.confidence.rotation) { 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; handTarget.hand.target.confidence.rotation = armSensor.hand.confidence.rotation;
} }
if (armSensor.hand.confidence.position > 0 && armSensor.hand.confidence.position >= handTarget.hand.target.confidence.position) { 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; 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! 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 { public abstract class ArmController : Humanoid.ArmSensor {
protected Humanoid.Tracking.Sensor.ID sensorID; protected Humanoid.Tracking.Sensor.ID sensorID;
protected Controller controllerInput; protected Controller controllerInput;
public Humanoid.Tracking.ArmController oldController; //public Humanoid.Tracking.ArmController oldController;
public Passer.Tracking.ControllerComponent controller; public Passer.Tracking.ControllerComponent controller => sensorComponent as Passer.Tracking.ControllerComponent;
public override Tracker.Status status { public override Tracker.Status status {
get { get {
if (oldController == null) if (sensorComponent == null)
return Tracker.Status.Unavailable; return Tracker.Status.Unavailable;
else else
return oldController.status; return sensorComponent.status;
} }
set { set {
if (oldController != null) if (sensorComponent != null)
oldController.status = value; sensorComponent.status = value;
} }
} }
@ -399,11 +401,11 @@ namespace Passer.Humanoid {
if (tracker == null || !tracker.enabled || !enabled) if (tracker == null || !tracker.enabled || !enabled)
return; return;
oldController.Update(); //oldController.Update();
if (oldController.status != Tracker.Status.Tracking) //if (oldController.status != Tracker.Status.Tracking)
return; // return;
UpdateSensorTransform(oldController); //UpdateSensorTransform(oldController);
UpdateTargetTransform(); UpdateTargetTransform();
} }

View File

@ -7,13 +7,13 @@ namespace Passer.Humanoid {
using Passer.Tracking; using Passer.Tracking;
public abstract class HeadSensor : HumanoidSensor { public abstract class HeadSensor : HumanoidSensor {
protected HeadTarget headTarget { protected HeadTarget headTarget => target as HeadTarget;
get { return target as HeadTarget; } // get { return target as HeadTarget; }
} //}
protected HumanoidControl humanoid => headTarget.humanoid; protected HumanoidControl humanoid => headTarget.humanoid;
protected new Tracking.HeadSensor sensor; //protected new Tracking.HeadSensor sensor;
#region Manage #region Manage
@ -42,8 +42,8 @@ namespace Passer.Humanoid {
Init(target); Init(target);
SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); //SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform");
sensorTransformProp.objectReferenceValue = sensorTransform; //sensorTransformProp.objectReferenceValue = sensorTransform;
SerializedProperty targetProp = sensorProp.FindPropertyRelative("target"); SerializedProperty targetProp = sensorProp.FindPropertyRelative("target");
targetProp.objectReferenceValue = base.target; targetProp.objectReferenceValue = base.target;
@ -61,11 +61,11 @@ namespace Passer.Humanoid {
} }
public void RemoveController(SerializedProperty sensorProp) { public void RemoveController(SerializedProperty sensorProp) {
if (sensorProp == null) //if (sensorProp == null)
return; // return;
SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); //SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform");
sensorTransformProp.objectReferenceValue = null; //sensorTransformProp.objectReferenceValue = null;
} }
#endif #endif
@ -79,13 +79,13 @@ namespace Passer.Humanoid {
if (tracker == null || !tracker.enabled || !enabled) if (tracker == null || !tracker.enabled || !enabled)
return; return;
status = sensor.Update(); //status = sensor.Update();
UpdateSensorTransform(sensor); //UpdateSensorTransform(sensor);
if (status != Tracker.Status.Tracking) //if (status != Tracker.Status.Tracking)
return; // return;
UpdateHeadTargetTransform(sensor); //UpdateHeadTargetTransform(sensor);
} }
protected virtual void UpdateHeadTargetTransform(Humanoid.Tracking.HeadSensor headTracker) { protected virtual void UpdateHeadTargetTransform(Humanoid.Tracking.HeadSensor headTracker) {

View File

@ -12,7 +12,7 @@ namespace Passer.Humanoid {
public new virtual HumanoidTracker tracker => null; public new virtual HumanoidTracker tracker => null;
protected Tracking.Sensor sensor; //protected Tracking.Sensor sensor;
[System.NonSerialized] [System.NonSerialized]
public const string _name = ""; public const string _name = "";
@ -30,9 +30,9 @@ namespace Passer.Humanoid {
} }
public virtual void CheckSensorTransform() { public virtual void CheckSensorTransform() {
if (enabled && sensorTransform == null) if (enabled && sensorComponent == null)
CreateSensorTransform(); CreateSensorTransform();
else if (!enabled && sensorTransform != null) else if (!enabled && sensorComponent != null)
RemoveSensorTransform(); RemoveSensorTransform();
if (sensor2TargetRotation.x + sensor2TargetRotation.y + sensor2TargetRotation.z + sensor2TargetRotation.w == 0) if (sensor2TargetRotation.x + sensor2TargetRotation.y + sensor2TargetRotation.z + sensor2TargetRotation.w == 0)
@ -57,8 +57,9 @@ namespace Passer.Humanoid {
sensorObject.name = resourceName; sensorObject.name = resourceName;
} }
sensorTransform = sensorObject.transform; //sensorTransform = sensorObject.transform;
sensorTransform.parent = tracker.trackerComponent.transform; //tracker.trackerComponent = tracker.GetTrackerComponent();
sensorObject.transform.parent = tracker.trackerComponent.transform;
sensor2TargetPosition = -_sensor2TargetPosition; sensor2TargetPosition = -_sensor2TargetPosition;
sensor2TargetRotation = Quaternion.Inverse(_sensor2TargetRotation); sensor2TargetRotation = Quaternion.Inverse(_sensor2TargetRotation);
@ -68,17 +69,17 @@ namespace Passer.Humanoid {
protected void RemoveSensorTransform() { protected void RemoveSensorTransform() {
if (Application.isPlaying) if (Application.isPlaying)
Object.Destroy(sensorTransform.gameObject); Object.Destroy(sensorComponent.gameObject);
else else
Object.DestroyImmediate(sensorTransform.gameObject, true); Object.DestroyImmediate(sensorComponent.gameObject, true);
} }
public virtual void SetSensor2Target() { public virtual void SetSensor2Target() {
if (sensorTransform == null || target == null) if (sensorComponent == null || target == null)
return; return;
sensor2TargetRotation = Quaternion.Inverse(sensorTransform.rotation) * target.transform.rotation; sensor2TargetRotation = Quaternion.Inverse(sensorComponent.transform.rotation) * target.transform.rotation;
sensor2TargetPosition = -InverseTransformPointUnscaled(target.transform, sensorTransform.position); sensor2TargetPosition = -InverseTransformPointUnscaled(target.transform, sensorComponent.transform.position);
} }
public static Vector3 InverseTransformPointUnscaled(Transform transform, Vector3 position) { public static Vector3 InverseTransformPointUnscaled(Transform transform, Vector3 position) {
@ -92,28 +93,28 @@ namespace Passer.Humanoid {
if (tracker == null || !tracker.enabled || !enabled) if (tracker == null || !tracker.enabled || !enabled)
return; return;
if (sensor == null) //if (sensor == null)
return; // return;
sensor.Update(); //sensor.Update();
if (sensor.status != Tracker.Status.Tracking) //if (sensor.status != Tracker.Status.Tracking)
return; // return;
UpdateSensorTransform(sensor); //UpdateSensorTransform(sensor);
UpdateTargetTransform(); UpdateTargetTransform();
} }
protected void UpdateSensorTransform(Tracking.Sensor sensor) { protected void UpdateSensorTransform(Tracking.Sensor sensor) {
if (sensorTransform == null) if (sensorComponent == null)
return; return;
if (status == Tracker.Status.Tracking) { if (status == Tracker.Status.Tracking) {
sensorTransform.gameObject.SetActive(true); sensorComponent.gameObject.SetActive(true);
sensorTransform.position = HumanoidTarget.ToVector3(sensor.sensorPosition); sensorComponent.transform.position = HumanoidTarget.ToVector3(sensor.sensorPosition);
sensorTransform.rotation = HumanoidTarget.ToQuaternion(sensor.sensorRotation); sensorComponent.transform.rotation = HumanoidTarget.ToQuaternion(sensor.sensorRotation);
} }
else { else {
sensorTransform.gameObject.SetActive(false); sensorComponent.gameObject.SetActive(false);
} }
} }
@ -124,11 +125,11 @@ namespace Passer.Humanoid {
return; return;
} }
if (sensorTransform == null) if (sensorComponent == null)
return; return;
sensorTransform.position = TransformPointUnscaled(targetTransform, -sensor2TargetPosition); sensorComponent.transform.position = TransformPointUnscaled(targetTransform, -sensor2TargetPosition);
sensorTransform.rotation = targetTransform.rotation * Quaternion.Inverse(sensor2TargetRotation); sensorComponent.transform.rotation = targetTransform.rotation * Quaternion.Inverse(sensor2TargetRotation);
} }
protected static Vector3 TransformPointUnscaled(Transform transform, Vector3 position) { protected static Vector3 TransformPointUnscaled(Transform transform, Vector3 position) {
@ -137,8 +138,8 @@ namespace Passer.Humanoid {
} }
protected virtual void UpdateTargetTransform() { protected virtual void UpdateTargetTransform() {
target.transform.rotation = sensorTransform.rotation * sensor2TargetRotation; target.transform.rotation = sensorComponent.transform.rotation * sensor2TargetRotation;
target.transform.position = sensorTransform.position + target.transform.rotation * sensor2TargetPosition; target.transform.position = sensorComponent.transform.position + target.transform.rotation * sensor2TargetPosition;
} }
#endregion #endregion

View File

@ -39,8 +39,8 @@ namespace Passer.Humanoid {
Init(footTarget); Init(footTarget);
SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); //SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform");
sensorTransformProp.objectReferenceValue = sensorTransform; //sensorTransformProp.objectReferenceValue = sensorTransform;
SerializedProperty targetProp = sensorProp.FindPropertyRelative("target"); SerializedProperty targetProp = sensorProp.FindPropertyRelative("target");
targetProp.objectReferenceValue = target; targetProp.objectReferenceValue = target;
@ -49,7 +49,7 @@ namespace Passer.Humanoid {
return; return;
CheckSensorTransform(); CheckSensorTransform();
sensorTransformProp.objectReferenceValue = sensorTransform; //sensorTransformProp.objectReferenceValue = sensorTransform;
ShowSensor(footTarget.humanoid.showRealObjects && footTarget.showRealObjects); ShowSensor(footTarget.humanoid.showRealObjects && footTarget.showRealObjects);

View File

@ -13,15 +13,9 @@ namespace Passer {
public virtual string name { get { return ""; } } public virtual string name { get { return ""; } }
public Transform sensorTransform; //public Transform sensorTransform;
public SensorComponent sensorComponent; public SensorComponent sensorComponent;
/// <summary>
/// Returns sensorComponent and creates a new SensorComponent if it does not exist
/// </summary>
/// <returns></returns>
public abstract SensorComponent GetSensorComponent();
public virtual void Start(Transform targetTransform) { public virtual void Start(Transform targetTransform) {
target = targetTransform.GetComponent<Target>(); target = targetTransform.GetComponent<Target>();
@ -33,13 +27,16 @@ namespace Passer {
} }
public virtual void ShowSensor(bool shown) { public virtual void ShowSensor(bool shown) {
if (sensorTransform == null) if (sensorComponent == null)
return; return;
if (!Application.isPlaying) //if (sensorTransform == null)
sensorTransform.gameObject.SetActive(shown); // return;
Renderer[] renderers = sensorTransform.GetComponentsInChildren<Renderer>(); if (!Application.isPlaying)
sensorComponent.gameObject.SetActive(shown);
Renderer[] renderers = sensorComponent.GetComponentsInChildren<Renderer>();
for (int i = 0; i < renderers.Length; i++) { for (int i = 0; i < renderers.Length; i++) {
if (!(renderers[i] is LineRenderer)) if (!(renderers[i] is LineRenderer))
renderers[i].enabled = shown; renderers[i].enabled = shown;

View File

@ -15,7 +15,7 @@ namespace Passer.Humanoid {
protected HumanoidControl humanoid => hipsTarget.humanoid; protected HumanoidControl humanoid => hipsTarget.humanoid;
//public SensorComponent sensorComponent; //public SensorComponent sensorComponent;
protected new Tracking.TorsoSensor sensor; //protected new Tracking.TorsoSensor sensor;
#region Manage #region Manage
@ -43,8 +43,8 @@ namespace Passer.Humanoid {
Init(hipsTarget); Init(hipsTarget);
SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform"); //SerializedProperty sensorTransformProp = sensorProp.FindPropertyRelative("sensorTransform");
sensorTransformProp.objectReferenceValue = sensorTransform; //sensorTransformProp.objectReferenceValue = sensorTransform;
SerializedProperty targetProp = sensorProp.FindPropertyRelative("target"); SerializedProperty targetProp = sensorProp.FindPropertyRelative("target");
targetProp.objectReferenceValue = target; targetProp.objectReferenceValue = target;
@ -53,7 +53,7 @@ namespace Passer.Humanoid {
return; return;
CheckSensorTransform(); CheckSensorTransform();
sensorTransformProp.objectReferenceValue = sensorTransform; //sensorTransformProp.objectReferenceValue = sensorTransform;
ShowSensor(hipsTarget.humanoid.showRealObjects && hipsTarget.showRealObjects); ShowSensor(hipsTarget.humanoid.showRealObjects && hipsTarget.showRealObjects);

View File

@ -36,11 +36,12 @@ namespace Passer {
/// The tracking device /// The tracking device
/// </summary> /// </summary>
public TrackerComponent trackerComponent; public TrackerComponent trackerComponent;
/// <summary>
/// Returns trackerComponent and creates a new TrackerComponent if it does not exist ///// <summary>
/// </summary> ///// Returns trackerComponent and creates a new TrackerComponent if it does not exist
/// <returns></returns> ///// </summary>
public abstract TrackerComponent GetTrackerComponent(); ///// <returns></returns>
//public abstract TrackerComponent GetTrackerComponent();
#region SubTrackers #region SubTrackers

View File

@ -8,79 +8,61 @@ namespace Passer.Humanoid {
#if pUNITYXR #if pUNITYXR
public override string name => "Unity XR"; public override string name => "Unity XR";
#if hCUSTOM
public override HumanoidTracker tracker => humanoid.unityXR; public override HumanoidTracker tracker => humanoid.unityXR;
#endif // public override SensorComponent GetSensorComponent() {
public override SensorComponent GetSensorComponent() { // if (sensorComponent != null)
if (sensorComponent != null) // return sensorComponent;
return sensorComponent;
Vector3 position = handTarget.transform.TransformPoint(handTarget.isLeft ? -0.1F : 0.1F, -0.05F, 0.04F); // 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 localRotation = handTarget.isLeft ? Quaternion.Euler(180, 90, 90) : Quaternion.Euler(180, -90, -90);
Quaternion rotation = handTarget.transform.rotation * localRotation; // Quaternion rotation = handTarget.transform.rotation * localRotation;
#if hSTEAMVR //#if hSTEAMVR
if (UnityXRDevice.xrDevice == UnityXRDevice.XRDeviceType.OpenVR) { // if (UnityXRDevice.xrDevice == UnityXRDevice.XRDeviceType.OpenVR) {
SteamVR steamVR = unityXR.trackerComponent as SteamVR; // SteamVR steamVR = unityXR.trackerComponent as SteamVR;
controller = steamVR.GetController(handTarget.isLeft, position, rotation); // controller = steamVR.GetController(handTarget.isLeft, position, rotation);
} // }
else // else
#endif //#endif
{ // {
UnityXR unityXRcomponent = unityXR.trackerComponent as UnityXR; // UnityXR unityXRcomponent = unityXR.trackerComponent as UnityXR;
controller = unityXRcomponent.GetController(handTarget.isLeft, position, rotation); // controller = unityXRcomponent.GetController(handTarget.isLeft, position, rotation);
} // }
return controller as SensorComponent; // return controller as SensorComponent;
} // }
protected UnityXRTracker unityXR => humanoid.unityXR; protected UnityXR unityXR => tracker.trackerComponent as UnityXR;
#region Manage #region Manage
public override void CheckSensor(HandTarget handTarget) { public override void CheckSensor(HandTarget handTarget) {
#if pUNITYXR
if (this.handTarget == null) if (this.handTarget == null)
this.target = handTarget; this.target = handTarget;
if (this.handTarget == null) if (this.handTarget == null)
return; return;
if (unityXR.trackerComponent == null && enabled) if (tracker.trackerComponent == null && enabled)
unityXR.CheckTracker(handTarget.humanoid); tracker.CheckTracker(humanoid);
if (enabled && unityXR.trackerComponent != null && unityXR.trackerComponent.enabled) { if (enabled && tracker.trackerComponent != null && tracker.trackerComponent.enabled) {
if (controller == null) { if (sensorComponent == null) {
Vector3 position = handTarget.transform.TransformPoint(handTarget.isLeft ? -0.1F : 0.1F, -0.05F, 0.04F); 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 localRotation = handTarget.isLeft ? Quaternion.Euler(180, 90, 90) : Quaternion.Euler(180, -90, -90);
Quaternion rotation = handTarget.transform.rotation * localRotation; Quaternion rotation = handTarget.transform.rotation * localRotation;
#if hSTEAMVR sensorComponent = unityXR.GetController(handTarget.isLeft, position, rotation);
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);
}
} }
if (controller != null)
sensorTransform = controller.transform;
if (!Application.isPlaying) if (!Application.isPlaying)
SetSensor2Target(); SetSensor2Target();
} }
else { else {
#if UNITY_EDITOR #if UNITY_EDITOR
if (!Application.isPlaying) { if (!Application.isPlaying) {
if (controller != null) if (sensorComponent != null)
Object.DestroyImmediate(controller.gameObject, true); Object.DestroyImmediate(sensorComponent.gameObject, true);
} }
#endif #endif
controller = null; sensorComponent = null;
sensorTransform = null;
} }
#endif
} }
#endregion Manage #endregion Manage
@ -98,13 +80,13 @@ namespace Passer.Humanoid {
Quaternion localRotation = handTarget.isLeft ? Quaternion.Euler(180, 90, 90) : Quaternion.Euler(180, -90, -90); Quaternion localRotation = handTarget.isLeft ? Quaternion.Euler(180, 90, 90) : Quaternion.Euler(180, -90, -90);
Quaternion rotation = handTarget.transform.rotation * localRotation; Quaternion rotation = handTarget.transform.rotation * localRotation;
UnityXR unityXRcomponent = unityXR.trackerComponent as UnityXR; UnityXR unityXRcomponent = unityXR; //.trackerComponent as UnityXR;
if (unityXRcomponent != null) if (unityXRcomponent != null)
controller = unityXRcomponent.GetController(handTarget.isLeft, position, rotation); sensorComponent = unityXRcomponent.GetController(handTarget.isLeft, position, rotation);
if (controller != null) { if (sensorComponent != null) {
controller.show = handTarget.humanoid.showRealObjects && handTarget.showRealObjects; sensorComponent.show = handTarget.humanoid.showRealObjects && handTarget.showRealObjects;
sensorTransform = controller.transform; //sensorTransform = controller.transform;
} }
SetSensor2Target(); SetSensor2Target();

View File

@ -15,26 +15,26 @@ namespace Passer.Humanoid {
public UnityXR unityXR => tracker.trackerComponent as UnityXR; public UnityXR unityXR => tracker.trackerComponent as UnityXR;
//protected UnityXRTracker unityXR => humanoid.unityXR; //protected UnityXRTracker unityXR => humanoid.unityXR;
public override SensorComponent GetSensorComponent() { //public override SensorComponent GetSensorComponent() {
if (sensorComponent != null) // if (sensorComponent != null)
return sensorComponent; // return sensorComponent;
// Make sure the unityXR component exists // // Make sure the unityXR component exists
humanoid.unityXR.GetTrackerComponent(); // humanoid.unityXR.CheckTracker(humanoid);
Vector3 position = headTarget.transform.TransformPoint(headTarget.head2eyes); // Vector3 position = headTarget.transform.TransformPoint(headTarget.head2eyes);
Quaternion rotation = headTarget.transform.rotation; // Quaternion rotation = headTarget.transform.rotation;
UnityXR unityXRtracker = tracker.trackerComponent as UnityXR; // UnityXR unityXRtracker = tracker.trackerComponent as UnityXR;
sensorComponent = unityXRtracker.GetHmd(position, rotation); // sensorComponent = unityXRtracker.GetHmd(position, rotation);
if (sensorComponent != null) // //if (sensorComponent != null)
sensorTransform = sensorComponent.transform; // // sensorTransform = sensorComponent.transform;
if (!Application.isPlaying) // if (!Application.isPlaying)
SetSensor2Target(); // SetSensor2Target();
return sensorComponent; // return sensorComponent;
} //}
#region Manage #region Manage
@ -44,19 +44,15 @@ namespace Passer.Humanoid {
if (this.headTarget == null) if (this.headTarget == null)
return; return;
if (tracker.trackerComponent == null) { if (tracker.trackerComponent == null)
tracker.CheckTracker(humanoid); tracker.CheckTracker(humanoid);
}
if (enabled && tracker.trackerComponent != null && tracker.trackerComponent.enabled) { if (enabled && tracker.trackerComponent != null && tracker.trackerComponent.enabled) {
if (sensorComponent == null) { if (sensorComponent == null) {
Vector3 position = headTarget.transform.TransformPoint(headTarget.head2eyes); Vector3 position = headTarget.transform.TransformPoint(headTarget.head2eyes);
Quaternion rotation = headTarget.transform.rotation; Quaternion rotation = headTarget.transform.rotation;
UnityXR unityXRtracker = tracker.trackerComponent as UnityXR; sensorComponent = unityXR.GetHmd(position, rotation);
sensorComponent = unityXRtracker.GetHmd(position, rotation);
} }
if (sensorComponent != null)
sensorTransform = sensorComponent.transform;
if (!Application.isPlaying) if (!Application.isPlaying)
SetSensor2Target(); SetSensor2Target();
@ -69,7 +65,6 @@ namespace Passer.Humanoid {
} }
#endif #endif
sensorComponent = null; sensorComponent = null;
sensorTransform = null;
} }
} }
@ -112,8 +107,8 @@ namespace Passer.Humanoid {
UnityXR unityXRtracker = tracker.trackerComponent as UnityXR; UnityXR unityXRtracker = tracker.trackerComponent as UnityXR;
sensorComponent = unityXRtracker.GetHmd(position, rotation); sensorComponent = unityXRtracker.GetHmd(position, rotation);
} }
if (sensorComponent != null) //if (sensorComponent != null)
sensorTransform = sensorComponent.transform; // sensorTransform = sensorComponent.transform;
SetSensor2Target(); SetSensor2Target();
CheckSensorTransform(); CheckSensorTransform();

View File

@ -129,11 +129,6 @@ namespace Passer.Humanoid {
#region Manage #region Manage
public override TrackerComponent GetTrackerComponent() {
CheckTracker(humanoid, UnityXR.Get);
return trackerComponent;
}
public override void CheckTracker(HumanoidControl humanoid) { public override void CheckTracker(HumanoidControl humanoid) {
CheckTracker(humanoid, UnityXR.Get); CheckTracker(humanoid, UnityXR.Get);
} }

View File

@ -688,6 +688,7 @@ namespace Passer.Humanoid {
/// <summary>Checks the humanoid for presence of Targets and adds them if they are not found </summary> /// <summary>Checks the humanoid for presence of Targets and adds them if they are not found </summary>
public void DetermineTargets() { public void DetermineTargets() {
CheckTargetRig(this);
HeadTarget.DetermineTarget(this); HeadTarget.DetermineTarget(this);
HandTarget.DetermineTarget(this, true); HandTarget.DetermineTarget(this, true);
HandTarget.DetermineTarget(this, false); HandTarget.DetermineTarget(this, false);
@ -762,7 +763,7 @@ namespace Passer.Humanoid {
public void UpdateSensorsFromTargets() { public void UpdateSensorsFromTargets() {
#if hLEAP #if hLEAP
// temporary solution? Leap may need a Head Sensor Component for the camera tracker? // temporary solution? Leap may need a Head Sensor Component for the camera tracker?
leapTracker.UpdateTrackerFromTarget(leapTracker.isHeadMounted); leap.UpdateTrackerFromTarget(leap.isHeadMounted);
#endif #endif
hipsTarget.UpdateSensorsFromTarget(); hipsTarget.UpdateSensorsFromTarget();
headTarget.UpdateSensorsFromTarget(); headTarget.UpdateSensorsFromTarget();
@ -1023,7 +1024,7 @@ namespace Passer.Humanoid {
#endif #endif
/// <summary>The Leap Motion tracker</summary> /// <summary>The Leap Motion tracker</summary>
#if hLEAP #if hLEAP
public LeapTracker leapTracker = new LeapTracker(); public LeapTracker leap = new LeapTracker();
#endif #endif
/// <summary>The Intel RealSense tracker</summary> /// <summary>The Intel RealSense tracker</summary>
#if hREALSENSE #if hREALSENSE
@ -1119,7 +1120,7 @@ namespace Passer.Humanoid {
neuronTracker, neuronTracker,
#endif #endif
#if hLEAP #if hLEAP
leapTracker, leap,
#endif #endif
#if hREALSENSE #if hREALSENSE
realsense, realsense,
@ -1358,7 +1359,7 @@ namespace Passer.Humanoid {
#region Stop #region Stop
public void OnApplicationQuit() { public void OnApplicationQuit() {
#if hLEAP #if hLEAP
leapTracker.StopTracker(); leap.StopTracker();
#endif #endif
#if hNEURON #if hNEURON
neuronTracker.StopTracker(); neuronTracker.StopTracker();