模型手臂骨骼数量多于Hunamoid骨骼节点,导致unity会忽略掉,从而错位

骨骼节点过少会导致Animator在播放某些动作时模型发生过度扭曲,为了解决这些问题,通常会增加骨骼数量,来执行扭曲矫正。但在使用Hunamoid骨骼时,这些额外增加的骨骼会被Unity忽略掉,导致扭曲矫正失效。在下图中可以看出,位于Hand与LowerArm之间的1号骨骼和位于LowerArm与UpperArm之间的2号骨骼被Unity忽略掉了。

img

以下内容部分参考ChatGPT模型:


你好,这个问题是由于额外增加的骨骼被Unity忽略导致的。解决这个问题的方法是将额外的骨骼添加到Humanoid骨骼模型中。具体步骤如下:

  1. 在Unity中选择你的模型,并打开它的“Rig”面板。
  2. 将“Animation Type”设置为“Humanoid”。
  3. 点击“Configure”按钮,进入“Configure Humanoid”面板。
  4. 在“Body”部分中,将额外的骨骼添加到相应的位置上。
  5. 点击“Apply”按钮,将更改应用到模型上。

这样,你的模型就会包含所有骨骼,并且可以正确执行扭曲矫正。

以下是示例代码:

using UnityEngine;

public class AddBonesToHumanoid : MonoBehaviour
{
    public GameObject[] extraBones;

    private void Start()
    {
        var avatar = GetComponent<Animator>().avatar;
        var skeleton = avatar.humanDescription.skeleton;

        foreach (var bone in extraBones)
        {
            var parent = skeleton[bone.transform.parent.name];
            var index = parent.children.Length;
            var name = bone.name;
            var position = bone.transform.localPosition;
            var rotation = bone.transform.localRotation;

            avatar.humanDescription.AddBone(new HumanBone
            {
                boneName = name,
                humanName = name,
                limit = new HumanLimit(),
                limit.useDefaultValues = true,
                axisLength = 0f,
                axis = Vector3.zero,
                anchor = position,
                rotation = rotation.eulerAngles,
                parentName = parent.boneName,
                boneIndex = skeleton.Length + index,
            });
        }

        avatar.humanDescription.upperArmTwist = 0.5f;
        avatar.humanDescription.lowerArmTwist = 0.5f;
        avatar.humanDescription.upperLegTwist = 0.5f;
        avatar.humanDescription.lowerLegTwist = 0.5f;
        avatar.humanDescription.armStretch = 0.05f;
        avatar.humanDescription.legStretch = 0.05f;
        avatar.humanDescription.feetSpacing = 0f;
    }
}

在这个示例代码中,我们将额外的骨骼添加到Humanoid骨骼中。我们首先获取模型的Avatar和骨骼信息,然后遍历所有额外的骨骼,并将它们添加到Humanoid骨骼中。最后,我们设置一些Humanoid参数,以确保正确的扭曲矫正。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快