From 67126399e66bce06b07bf5aa8abc7b63b8053b88 Mon Sep 17 00:00:00 2001 From: Pascal Serrarens Date: Fri, 8 Nov 2024 14:05:58 +0100 Subject: [PATCH] Recognise a hips bone without Avatar Animator --- .../HumanoidControl/Scripts/HumanoidControl.cs | 8 ++++++++ .../Scripts/Targets/HipsTarget.cs | 6 ++++++ .../Scripts/Targets/HumanoidTarget.cs | 16 +++++++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/Runtime/HumanoidControl/Scripts/HumanoidControl.cs b/Runtime/HumanoidControl/Scripts/HumanoidControl.cs index 69fb2d3..de1d38a 100644 --- a/Runtime/HumanoidControl/Scripts/HumanoidControl.cs +++ b/Runtime/HumanoidControl/Scripts/HumanoidControl.cs @@ -620,6 +620,14 @@ namespace Passer.Humanoid { return animators[i]; } } + + SkinnedMeshRenderer[] meshRenderers = avatarRoot.GetComponentsInChildren(); + for (int i = 0; i < meshRenderers.Length; i++) { + if (meshRenderers[i].rootBone != null) { + Debug.Log("Found a skinned mesh with bones"); + } + } + return null; } diff --git a/Runtime/HumanoidControl/Scripts/Targets/HipsTarget.cs b/Runtime/HumanoidControl/Scripts/Targets/HipsTarget.cs index 9df45f2..d78f9f3 100644 --- a/Runtime/HumanoidControl/Scripts/Targets/HipsTarget.cs +++ b/Runtime/HumanoidControl/Scripts/Targets/HipsTarget.cs @@ -270,6 +270,12 @@ namespace Passer.Humanoid { 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() { HumanoidControl humanoid = hipsTarget.humanoid; if (humanoid.rightFootTarget.upperLeg.bone.transform == null || humanoid.leftFootTarget.upperLeg.bone.transform == null) diff --git a/Runtime/HumanoidControl/Scripts/Targets/HumanoidTarget.cs b/Runtime/HumanoidControl/Scripts/Targets/HumanoidTarget.cs index f7b485b..4fbd9b2 100644 --- a/Runtime/HumanoidControl/Scripts/Targets/HumanoidTarget.cs +++ b/Runtime/HumanoidControl/Scripts/Targets/HumanoidTarget.cs @@ -224,6 +224,20 @@ namespace Passer.Humanoid { if (boneTransform != null) 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; } - public void RetrieveBones(HumanoidControl humanoid) { + public virtual void RetrieveBones(HumanoidControl humanoid) { if (humanoid.targetsRig != null) GetDefaultTargetBone(humanoid.targetsRig, ref target.transform, boneId); if (humanoid.avatarRig != null)