mcpField
G
game-dev-combat-animation

game-dev-combat-animation

github.com/mengto创意与媒体7.1k328 次安装3 天前更新
代码仓库

关于 game-dev-combat-animation

用于打磨游戏战斗动画的技能,通过骨骼测量、帧捕获、测试和盲评改进动作。适合开发角色攻击与射箭动作,并指导从建立基线到发布的流程。

主要功能

  1. 01制定动作专属动画规则
  2. 02依据手臂解剖设计关键帧
  3. 03测量关节范围与皮肤变形
  4. 04从两个视角测试动作
  5. 05通过盲评比较捕获结果
  6. 06记录并发布经验证的改动

适用场景

  1. 01打磨剑击后的动作
  2. 02修正拉弓与放箭姿势
  3. 03诊断动画帧中的手臂变形
  4. 04发布前比较动画版本

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mengto/skills --skill game-dev-combat-animation

安装后在 Claude Code 中输入/game-dev-combat-animation确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
review.md
rules.md
techniques.md
thornvigil.md
traps.md
scripts/
install.sh
scripts/tools/
ab-pack.py
anchor.mjs
armcheck.mjs
at.mjs
baketime.mjs
drawfit.mjs
encode.swift
face.mjs
host.html
jumps.mjs
keydesign.mjs
knight-measure.mjs
msheet.py
play.js
psheet.py
setup.js
shot.js
vidcompose.py
templates/
ab-judge-prompt.md
critic-prompt.md

详细介绍

游戏开发:战斗动画

根据 Thornvigil 骑士与弓箭手调整阶段(2026-09-30 至 10-01,版本 1.0.71 和 1.0.72)提炼。结果如下:

  • 在 8 次盲测 A/B 对比中,手臂和手部有 5 次优于上一版本。
  • 修复了弓箭手的锚点断裂问题,以及骑士后续动作中僵住、手臂伸直的问题。
  • 7 轮修复都源于一些本可通过数字更早发现的陷阱。下方列出了这些陷阱。

更改关键帧前,请阅读 references/thornvigil.md,了解项目文件、命令和当前状态,并阅读 references/traps.md。

工作流程

  1. 动手调整关键帧前,先编写标准。 在 docs/combat-animation-standard.md(或项目对应文件)中,为该动作补充带编号的专属规则:
    • 按游戏时钟划分阶段:预备动作、在规则指定帧上的接触或释放,以及恢复阶段。
    • 身体力学、武器轨迹、镜头呈现效果。
    • 将每条规则标记为测试(量化)或已审核(根据帧评分)。
    • 每条规则都必须有真实参考依据:身体力学参考 Tripo Studio 动作捕捉预设,或参考经过指导的技巧(例如射箭的完整动作周期)。仅使用 Tripo 预设;用户没有 Mixamo 账号,并且拒绝使用 Quaternius。
  2. 先建立基线。 在两个呈现界面(Characters 页面和游戏内)都进行捕获,保留帧,并在任何更改前获取盲测评分。
  3. 根据解剖结构设计关键帧,而不是根据手部位置。 对每个关键帧,选定上臂方向 u、前臂方向 f 和刀刃方向 b,然后运行 keydesign.mjs。它会返回手部目标位置并标记:
    • 抬臂角度超过 100°;
    • 弯曲角度不在 12–140° 范围内;
    • 刀刃相对于前臂的偏角不在 25–115° 范围内。 手部关键帧随肩部移动;刀刃和肘部关键帧使用世界方向。参见 references/techniques.md。
  4. 先测量,再查看。 烘焙后运行:
    • armcheck.mjs:测量真实网格上各手臂区域的关节范围,以及皮肤的拉伸和挤压情况;
    • at.mjs:测量指定时间的拳头和刀刃位置;
    • 动作专属探针:knight-measure.mjs、anchor.mjs 或 drawfit.mjs。 在花时间捕获之前,先修正违反规则的数值。
  5. 测试。 运行手臂范围测试和该动作的测试。为某个缺陷添加测试时,先临时恢复该缺陷并确认测试会失败;如果测试和代码读取了相同的错误约定,测试就会永远通过。
  6. 捕获两个镜头,并亲自以全分辨率查看。 从正面看效果良好的姿势,在游戏镜头中可能会显得不自然,反之亦然。将每次捕获与上一轮对比,确认内容确实有所更新。
  7. 评审。 使用两位盲评审,并采用固定评分标准(5 项 × 0–2 分;以较低分为准),再与上一版本进行盲测 A/B 对比,且标题完全一致。随后,在采取行动前,根据全分辨率帧和实时骨架数据核实每项结论。参见 references/review.md 和 templates/。
  8. 按项目规则发布:测试、构建、附带真实截图的变更日志、推送、尺寸检查、发布。使用 workflow-ship-change 技能。如果已推送但尚未发布的版本出现退化,就通过后续提交直接修正;不要为玩家从未见过的内容增加版本号。
  9. 展示效果。 如需视频,请按该动作自己的时钟以 30 fps 捕获,将 Characters 页面和游戏内视图并排放置,并依次播放正常速度和四分之一速度(vidcompose.py + encode.swift)。

手臂和手部规则

该绑定没有扭转骨骼或修正骨骼;超出这些范围后,皮肤会明显扭曲、挤压或拉伸。每次打击的每一帧,在两个角色身上都必须保持在这些范围内,并基于实际蒙皮网格进行测量。

规则限制
肘部屈曲10–152°;在动作中间的 80% 过程中,出击手臂或拉弓手臂保持 ≥20°
接触伸展接触时,持剑手与肩部的距离 ≥手臂长度的 60%(出击时伸展手臂,切勿锁死)
手腕弯曲 ≤50°,翻转 ≤45°;持剑手腕上限为 40°;拉弓手保持笔直
扭转前臂翻转 ≤52°,上臂翻转 ≤52°
抬臂相对下垂姿势 ≤105°(超过后肩部皮肤会挤压);不得抬过头顶
皮肤每个手臂或手部区域边缘最差的 1%:相对绑定姿势,拉伸 ≤2 倍,挤压 ≤3 倍
手部始终保持姿势:握住剑柄的拳头、勾住弓弦的手(拉弦 → 松弦 → 随动),空手时放松;不得张开或蜷成爪状
轨迹手部随肩部运动,并在关键帧之间绕肩部沿弧线移动;刀刃关键帧必须保持在可达范围内(与前臂呈 25–115°)

完整规则、制定原因以及相应测试见 references/rules.md。

验证有效的技巧

  • 以肩部为参照,让手部沿弧线插值。 固定的手部目标会被前冲的躯干带动肩部挤压手臂,而直线 lerp 会在动作中途把肘部折得过紧。
  • 瞄准前臂,而不是手腕。 手腕角度受限时,刀刃会落在前臂翻转所允许的锥面上。要改变刀刃方向,就调整 f。
  • 在世界空间中读取刀刃关键帧。 躯干向后扭转约 70° 时,“在持剑肩上方”会指向头部后方。将预备动作的刀尖朝上倾斜,使其呈现为对角线。
  • 保持随动动作持续运动。
    • 快速斩击:手部沿盾牌一侧的髋部向下带过,肘部保持弯曲,刀刃仍沿攻击方向。
    • 重斩:身体下沉并横移,然后肘部弯曲,带动身体回弹。
    • 绝不能将手臂伸向对手后保持不动,同时让刀刃下垂。
  • 拉弓。 将手固定在下颌旁、靠近下巴的位置,确保从两个摄像机视角都能看到手部。拉弓肘比箭低 6–8 cm。让髋部转为侧向姿势;相比耸肩或调整肘部位置,这样更能解决拉弓侧肩部挤压的问题。松弦时保持勾弦姿势,然后将手向肩部外侧送出,而不是绕过头部。
  • 动力链。 髋部带动胸部,胸部再带动手臂。弓的回弹应跟随松弦,绝不能先于松弦发生。

每项都让人损失一轮的陷阱

references/traps.md 中列出了每项陷阱的症状 → 原因 → 修复方法。简要列表如下:

  • 骨骼轴向。 HumGen 的 head 骨骼以 +Y 为前方、+Z 为下方。根据网格特征点检查任何骨骼局部偏移(face.mjs)。
  • 失败被掩盖。 第一个失败的断言会隐藏同一测试循环中之后的所有动作,而第一个失败的性别会隐藏另一种性别。
  • 摄像机视角判断。
    • 手靠近脖子时,从游戏摄像机视角看起来会像“藏在头后”。
    • 刀刃指向摄像机时,看起来会像“下垂”。
    • 肘部在视平面内弯曲时,看起来会像伸直。
  • 评审误判。 缩略图容易误导评审。更改任何内容前,先检查全分辨率帧和实时绑定。
  • 捕获陷阱。
    • 捕获运行期间绝不要编辑 src。
    • 执行 location.reload() 后,先等待再运行下一个脚本。
    • 手动逐帧操作不能用来测量 FPS。

报告

首先说明动作有哪些变化,以及是否已上线。然后提供:

  • 评分表:修改前 → 修改后,按表面列出两位评审中较低的评分;
  • A/B 结果;
  • 仍未解决的问题,按帧标明;
  • 新增的测试;
  • 文件和推送大小。

如果评分未达到目标,请明确说明,并解释原因。

评论

支持 Markdown