当前数据集 games_tools 的收录项目数为 0,所以本篇只引用引擎官方资料,不虚构工具仓库。游戏中的 root motion/root node 描述骨骼或场景树的坐标起点,开关它不会获得 Android 系统权限。我们在空 Godot 场景里自制两段位移,直观看出“画面走了、碰撞没走”的滑步根源。
你会完成什么#
- 区分 scene root、skeleton root bone、root transform 与 Android Root。
- 创建一个 CharacterBody2D 根、视觉子节点和碰撞子节点。
- 比较只动画 Visual 与动画 CharacterRoot 的两条轨迹。
- 用坐标与碰撞边界判断视觉和角色逻辑是否对齐。
- 停止预览并删除空实验项目,不下载任何游戏资产或插件。
先看结论#
| 现象/术语 | 实际含义 | 正确方向 |
|---|---|---|
| 网格/视觉向前但碰撞留在原地 | 只移动了子节点或未应用根位移 | 把位移提取/应用到角色控制对象 |
| in-place 动画 | 动画在原点循环,移动由代码控制 | 让代码速度与步频匹配 |
| Root Motion | 从 root bone/transform 提取位移 | 由引擎把轨迹应用到角色/胶囊 |
| SceneTree root | Godot 场景树顶层 Viewport | 组织节点,不是操作系统权限 |
| game injector/cheat | 进程注入、内存修改或反作弊绕过 | 不属于正常动画教程,本站不提供 |
心智模型#
CharacterRoot(世界坐标 + 移动/碰撞权威)
├─ Visual(相对坐标;只动它 → 看起来前进但碰撞留后)
├─ Collision(相对坐标;应与角色一起走)
└─ AnimationPlayer
root bone trajectory → 提取/应用 → CharacterRoot/capsule world movement
Android Root 权限链不参与
工具清单#
| 引擎/概念 | 角色 | 什么时候用 | 来源与注意 |
|---|---|---|---|
| Godot SceneTree | 管理 node 层级与 root Viewport | 本篇观察 root node | /root 是节点路径,不是设备文件系统或 su |
| Godot AnimationPlayer | 制作两条本地 position 轨迹 | 无资产的概念实验 | UI 名称随版本略变,截图应标引擎版本 |
| Unity Root Motion | 从动画 Root Transform 驱动 GameObject | Mecanim 角色动画 | Apply Root Motion 需结合 controller/physics 测试 |
| Unreal Root Motion | 从 root bone 提取并用于胶囊移动 | Character/Animation Blueprint | 联机复制与 movement mode 需单独设计 |
| Unreal Motion Warping | 调整根运动以对齐目标 | 攀爬、处决等目标对齐 | 不是修复所有动画的万能开关 |
| Blender Armature | 在资产端组织骨骼与 root bone | 自制/清理合法动画资产 | 资源许可证和导出坐标系必须记录 |
项目全景:游戏、媒体与其他工具的 0 个项目,一个不漏#
当前数据集中该细分类别为 0 个项目。文章应保留独立页面并诚实展示空集,用于说明未来游戏服务器、媒体处理或工具类结果的收录边界。
当前快照没有项目被归入这个细分类别。文章仍保留独立教程,用来解释概念边界;在数据集出现首个项目之前,不虚构项目名称或推荐来源。
开始前#
使用已安装、来自官方渠道的 Godot 4 空项目;没有引擎时先阅读官方 SceneTree 文档,不为本篇下载第三方“root motion 插件”。新建目录 <lab-project>,不要放入现有游戏。整个实验只用彩色多边形/矩形形状,不导入商店、线上游戏或版权不明资产。运行前记录 Godot 版本。
操作步骤#
1. 建立角色根与两个可见边界#
新建 2D Scene,把根节点改为 CharacterBody2D 并命名 CharacterRoot。添加 Polygon2D 子节点 Visual,用四个点画一个小矩形并设醒目颜色;添加 CollisionShape2D 子节点 Collision,选择相近大小的 RectangleShape2D。再添加 AnimationPlayer。保存为 root_motion_lab.tscn,让它成为主场景。不要添加脚本或外部资源。
2. 制作“视觉独走”对照动画#
在 AnimationPlayer 新建 1 秒动画 visual_only。给 Visual:position 加属性轨道:0 秒为 (0,0),1 秒为 (120,0);根与 Collision 不设轨道。播放并观察视觉矩形离开原点,而 CharacterRoot 的 position 和碰撞形状仍在原处。开启编辑器的碰撞形状可视化或用 Inspector 坐标作证,不凭感觉判断。
3. 制作“根节点驱动”动画#
停止播放并把 Visual position 还原 (0,0)。新建 root_driven:给 CharacterRoot:position 在 0 秒和 1 秒设置 (0,0)、(120,0),保持 Visual/Collision 的局部 position 不变。播放后,两者应随根一起移动。真实 Unity/Unreal Root Motion 通常从 root bone 提取轨迹并应用到角色/胶囊;本实验是同一边界的二维简化,不等于可直接复制到网络角色。
4. 对照、停止与回滚#
在表格记录每段动画结束时 CharacterRoot、Visual local position 和 Collision local position。正确对齐的目标是世界位移由角色根承载,视觉和碰撞保持相同局部关系。停止运行并关闭编辑器。确认 <lab-project> 只含本场景和 Godot 元数据后,用文件管理器删除项目目录;若要保留学习成果,先导出截图而不是把实验混入生产仓库。
验证#
visual_only中 Visual 离开 Collision,而 CharacterRoot 世界坐标不变。root_driven中 Visual 与 Collision 一起移动,局部相对位置保持一致。- 场景树明确显示 CharacterRoot 是场景根,SceneTree
/root是更上层 Viewport。 - 实验没有脚本、第三方插件、网络连接或版权资产。
- 停止编辑器并删除项目后,没有运行中的游戏进程或系统权限变化。
排错#
| 现象 | 常见原因 | 安全处理 |
|---|---|---|
| 两段动画看起来完全相同 | 未显示 Collision,或错误轨道指向根 | 在 Animation 面板核对 node path 并显示调试碰撞 |
| 第二段视觉出现双倍位移 | Visual 仍保留第一段结束位置 | 在根动画中把 Visual local position 重置为零 |
| 碰撞不跟根移动 | Collision 不在 CharacterRoot 子树或 transform 异常 | 检查场景树与局部坐标,不安装修复插件 |
| Unity/Unreal 选项名称不同 | 引擎版本、动画类型或导入器不同 | 按官方对应版本文档查 Root Motion,不套用 Godot UI |
| 联机角色抖动/回弹 | authority、replication 与预测冲突 | 回到离线场景;另做网络移动设计与服务器权威测试 |
完成清单#
- 我知道该分类当前收录 0 个项目,没有虚构推荐。
- 我只使用自制几何图形和离线空场景。
- 我能解释视觉子节点移动与角色根移动的差异。
- 我没有接触外挂、注入、反作弊绕过或未知资产。
- 我停止预览并删除或明确保留了实验项目。