47 lines
1.8 KiB
C#
47 lines
1.8 KiB
C#
using UnityEngine;
|
|
|
|
namespace Passer.Humanoid {
|
|
|
|
[System.Serializable]
|
|
public class HeadAnimator : HeadSensor {
|
|
public bool headAnimation = true;
|
|
public bool faceAnimation = true;
|
|
|
|
#region Update
|
|
public override void Update() {
|
|
if (!headTarget.humanoid.animatorEnabled || !enabled || headTarget.humanoid.targetsRig.runtimeAnimatorController != null)
|
|
return;
|
|
|
|
if (headAnimation)
|
|
UpdateNeck();
|
|
}
|
|
|
|
private void UpdateNeck() {
|
|
if (headTarget.neck.target.confidence.rotation > 0.25F)
|
|
return;
|
|
|
|
Vector3 headPosition = headTarget.head.target.transform.position;
|
|
Quaternion headRotation = headTarget.head.target.transform.rotation;
|
|
|
|
headTarget.neck.target.transform.rotation = headTarget.head.target.transform.rotation;
|
|
|
|
headTarget.neck.target.transform.position = headPosition - headTarget.neck.target.transform.rotation * Vector3.up * headTarget.neck.bone.length;
|
|
|
|
headTarget.head.target.transform.position = headPosition;
|
|
headTarget.head.target.transform.rotation = headRotation;
|
|
}
|
|
#endregion
|
|
|
|
public static void UpdateNeckTargetFromHead(HeadTarget headTarget) {
|
|
Vector3 headPosition = headTarget.head.target.transform.position;
|
|
Quaternion headRotation = headTarget.head.target.transform.rotation;
|
|
|
|
headTarget.neck.target.transform.rotation = headTarget.head.target.transform.rotation;
|
|
headTarget.neck.target.transform.position = headPosition - headTarget.neck.target.transform.rotation * Vector3.up * headTarget.neck.bone.length;
|
|
|
|
headTarget.head.target.transform.position = headPosition;
|
|
headTarget.head.target.transform.rotation = headRotation;
|
|
}
|
|
|
|
}
|
|
} |