Recognise a hips bone without Avatar Animator

This commit is contained in:
Pascal Serrarens 2024-11-08 14:05:58 +01:00
parent fd9bc37467
commit 67126399e6
3 changed files with 29 additions and 1 deletions

View File

@ -620,6 +620,14 @@ namespace Passer.Humanoid {
return animators[i]; return animators[i];
} }
} }
SkinnedMeshRenderer[] meshRenderers = avatarRoot.GetComponentsInChildren<SkinnedMeshRenderer>();
for (int i = 0; i < meshRenderers.Length; i++) {
if (meshRenderers[i].rootBone != null) {
Debug.Log("Found a skinned mesh with bones");
}
}
return null; return null;
} }

View File

@ -270,6 +270,12 @@ namespace Passer.Humanoid {
boneId = Bone.Hips; boneId = Bone.Hips;
} }
public override void RetrieveBones(HumanoidControl humanoid) {
base.RetrieveBones(humanoid);
if (bone.transform == null)
HumanoidTarget.GetDefaultBone(humanoid.transform, ref bone.transform, "Default_simple|Hips");
}
public Vector3 GetForward() { public Vector3 GetForward() {
HumanoidControl humanoid = hipsTarget.humanoid; HumanoidControl humanoid = hipsTarget.humanoid;
if (humanoid.rightFootTarget.upperLeg.bone.transform == null || humanoid.leftFootTarget.upperLeg.bone.transform == null) if (humanoid.rightFootTarget.upperLeg.bone.transform == null || humanoid.leftFootTarget.upperLeg.bone.transform == null)

View File

@ -224,6 +224,20 @@ namespace Passer.Humanoid {
if (boneTransform != null) if (boneTransform != null)
return; return;
} }
}
public static void GetDefaultBone(Transform root, ref Transform boneTransform, params string[] boneNames) {
if (boneTransform != null)
return;
for (int i = 0; i < boneNames.Length; i++) {
if (boneNames[i] == null)
continue;
boneTransform = root.FindDeepChild(boneNames[i]);
if (boneTransform != null)
return;
}
} }
@ -401,7 +415,7 @@ namespace Passer.Humanoid {
return obj.transform; return obj.transform;
} }
public void RetrieveBones(HumanoidControl humanoid) { public virtual void RetrieveBones(HumanoidControl humanoid) {
if (humanoid.targetsRig != null) if (humanoid.targetsRig != null)
GetDefaultTargetBone(humanoid.targetsRig, ref target.transform, boneId); GetDefaultTargetBone(humanoid.targetsRig, ref target.transform, boneId);
if (humanoid.avatarRig != null) if (humanoid.avatarRig != null)