非常需要,宝宝

来自夹夹 QQ 群讨论,审核后公开 · 。查看原始讨论

提问

非常需要,宝宝

回答

回复 群友 6814

好,从骨骼动画这份开始。你现在最大的一笔债是角色节点组织方式,先把这块拆干净,后面才谈得上调动作。

第一步,认清现在为什么不可能不僵硬。你是脚本每帧直接改 BoxMesh 组合体的 position/rotation/scale:这等于把整个人当成一个刚体,只有整体平移和整体倾倒两自由度。真实行走的动作信息在关节上——膝盖弯曲、髋部反向摆动、脊柱轻微扭转、落地时脚掌贴地。这些都在骨骼层级里,脚本改 MeshInstance3D 表达不出来。所以不是参数没调好,是表达力上限到了。别再花时间打磨现有做法。

第二步,把角色节点重构成一套标准结构。目标形态是:

CharacterBody3D(或你现在的角色根节点,保留你的移动、相机、输入)
└ Skeleton3D
└ 骨骼层级:Hips → Spine → Chest → Neck → Head,Hips → UpperLeg.L → LowerLeg.L → Foot.L,右腿对称,Chest → UpperArm.L/R → LowerArm.L/R → Hand.L/R
└ 挂在骨骼上的 MeshInstance3D(每根骨骼一个,或整体蒙皮网格)

有两种落地方式,按你现在的 BoxMesh 组合体选:

方式 A(最省事,先跑通):保留你现有的方块拼装,但把每个方块挂到 Skeleton3D 的对应骨骼上。在 Godot 里就是给每个 MeshInstance3D 设一个 BoneAttachment3D,parent 指向那条骨骼,然后方块跟着骨骼动。这样你不用做蒙皮,一小时能出效果,缺点是关节处会有缝,靠方块间留一点重叠(比如膝盖方块略微插入大腿方块)盖掉。

方式 B(稍麻烦但正路):换成单一低模人形网格加骨骼蒙皮。Godot 4 里可以直接用 Blender 导出的 glTF,或者用 Humanoid 插件。这个的收益是关节连续、可以做 IK。

建议先 A 后 B。A 拿到 80% 的画面改善,B 在你需要脚部 IK 或者要给别人看视频时再上。

第三步,骨架统一。不管 A 还是 B,都按 Mixamo 的命名规范来(Hips、Spine、LeftUpLeg、LeftLeg、LeftArm、LeftForeArm 这套),因为你要接 Mixamo 的动作库。命名对不上,重定向就是一场灾难。

第四步,接动画。具体顺序:

一,先只接 3 个 clip:idle、walk、run。统一用 Mixamo 带 in-place 的版本,不要 root motion,位移继续由你的 controller 负责。
二,新建 AnimationTree,root 用 AnimationNodeStateMachine。开三个状态,连 idle↔walk↔run,每条过渡设 transition 时间 0.15 到 0.25 秒,别用 0。硬切就是僵硬的第二个来源。
三,各状态播的用 AnimationNodeBlendTree 里的 BlendSpace1D,按 speed 参数混合 idle/walk/run 三个 clip。这样慢走和快跑之间有连续过渡,不会在状态边界跳一下。
四,AnimationTree 的 active 打开,advance 用 Idle 或 Physics 处理,回调模式用 Immediate,然后脚本只负责把当前的 planar velocity 长度喂给 blend position 参数。controller 到动画的唯一接口就是这一个数。
五,先跑起来,把步频对上。character 移动速度改的时候,要么调 clip 的播放倍速(AnimationNodeTimeScale),要么调你设计的基准速度,让脚不打滑。走路打滑是新手最明显的粗糙感来源,比动作本身还扎眼。

第五步,一次性动作。翻滚、后仰、死亡、开枪这些,不要塞进状态机主干。做法是 AnimationTree 外面加一个 AnimationPlayer,播完用 animation_finished 信号回到状态机,播的同时用一个 flag 屏蔽输入或者降速。这样你的状态机不会被特殊动作污染,加减动作也不影响主循环。

第六步,手感参数(在骨骼动画之后做,但别忘)。移动加速度设成 0.1 到 0.15 秒到满速,刹车快于加速;转身用插值而不是瞬间对齐朝向,转速设个上限比如每秒 720 度;跳跃给一个很小的土狼时间(0.1 秒内离地还能跳)和输入缓冲(落地前 0.1 秒按的跳会兑现);相机跟随加一点阻尼。这四个加上去,同样的动画资源手感会完全不一样。

做完这一轮,你的“动作僵硬”应该能消掉大半。剩下的僵硬感一般来自三处:脚不贴地(要 IK 或微调 hips 高度曲线)、上半身和下半身同步得像木头(要跑动时给上半身加独立层的轻微摆动)、转身时脚步没有转动过渡(转身动画或速度衰减)。

一个执行建议:不要一次全上。今天只做 A 方案 + idle/walk 两个 clip + Transition 0.2 秒,跑起来看。这一步的视觉提升最明显,也最容易验证骨架对不对。跑通了明天再加 run 和 BlendSpace。

卡在哪一步就贴出来:要么是你现在的角色节点树截图(Skeleton3D 建好之后的),要么是接完动画之后仍然觉得僵硬的那段视频截帧,我按具体现象继续往下改。