尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

角色走路不滑步:Godot 根运动实战指南

角色走路不滑步:Godot 根运动实战指南 角色走路不滑步Godot 根运动实战指南【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot角色往左走脚却像踩着传送带原地打转甚至直接穿进墙里。做 Godot 动作游戏时这种动画和位移各走各的问题基本都出在没用好根运动。它是引擎动画系统里专门处理角色位移的机制把动画中根骨骼的移动量提取出来交给物理系统去挪角色。→ 让角色走路脚贴地面不滑步 → 跑、走、待机之间切换不跳帧 → 位移脱节时能自己定位问题先把原理捋清楚打个比方。传统做法是你自己写每秒走 3 米动画只管表演两套系统各干各的帧率一抖就滑步。根运动反过来动画师把每一步踩到哪录进根骨骼的 3D 位移轨道引擎每帧提取这段位移再喂给物理体。角色走多远动画说了算撞没撞墙物理说了算。对比项传统位移根运动位移来源代码每帧改 position动画根骨骼的 3D 位移轨道物理同步手动对齐容易脱节走 move_and_slide自动处理碰撞适用场景简单的上下移动跑跳、冲刺、受击等大位移动作一句话总结动画管走多远物理管撞不撞根运动让两边不再抢方向盘。动手把效果跑起来导入动画并指定根骨骼轨道目标让引擎认出哪条轨道是位移数据源。导入模型时保留动画导入角色根节点挂 CharacterBody3D 和 AnimationPlayer选中动画里根骨骼通常叫 Hips的 3D 位移轨道把轨道路径填进 root_motion_track# 指定根运动轨道根骨骼的 3D 位移轨道 $AnimationPlayer.root_motion_track NodePath(root/Hips)让物理体跟着动画走目标角色真的动起来而且会撞墙。在 _physics_process 里取每帧位移增量除以 delta 换算成速度叠加进 velocity交给 move_and_slide() 处理# 每帧提取动画位移交给物理系统移动角色 var motion : $AnimationPlayer.get_root_motion_position() velocity motion / delta move_and_slide()调过渡与转向不跳帧目标动画切换平滑转身时位移方向不偏。多段动画改用 AnimationTree 接替代裸的播放器状态之间加 0.1 到 0.2 秒的过渡转身明显就勾选 root_motion_local按本地坐标提取# 按本地坐标提取位移角色转身时方向不会偏 $AnimationPlayer.root_motion_local true实际项目里会踩的坑 现象动画在放角色钉在原地不动。原因root_motion_track 填成了普通变换轨道或选到了 2D 轨道。一行修法重新指定根骨骼的 Position 3D 位移轨道。⚠️ 现象脚底抹油式滑步位移忽快忽慢。原因动画轨道还在直接驱动节点位置和你手动加的位移叠成了两份。一行修法位移只走 get_root_motion_position() 这一条路别再另外加 position。 现象角色一转身移动方向就斜了。原因默认按全局坐标提取位移角色自身转体后方向对不上。一行修法勾选 root_motion_local true改按本地坐标提取。再往前一步混合空间接根运动多段位移动画在 AnimationTree 里做方向混合适合 8 方向移动的角色先转后移用旋转累加器先把朝向转到位再叠加位移适合跳跃、冲刺类大动作根运动视图调试编辑器内置的 Root Motion View 能直接预览提取结果适合排查滑行关键回顾记住三点就够了根运动等于从根骨骼提取位移动画管距离、物理管碰撞位移只在物理帧取一次别和动画驱动叠加方向偏了就查 root_motion_local。想深入可以看 AnimationMixer 官方文档提取逻辑在 动画模块源码 里。跑通之后欢迎把你的角色走路截图发到 issue 里交流。【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表