关于 game-dev-combat-animation
用于打磨游戏战斗动画的技能,通过骨骼测量、帧捕获、测试和盲评改进动作。适合开发角色攻击与射箭动作,并指导从建立基线到发布的流程。
主要功能
- 01制定动作专属动画规则
- 02依据手臂解剖设计关键帧
- 03测量关节范围与皮肤变形
- 04从两个视角测试动作
- 05通过盲评比较捕获结果
- 06记录并发布经验证的改动
适用场景
- 01打磨剑击后的动作
- 02修正拉弓与放箭姿势
- 03诊断动画帧中的手臂变形
- 04发布前比较动画版本
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mengto/ skills --skill game-dev-combat-animation安装后在 Claude Code 中输入/game-dev-combat-animation确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/review.mdrules.mdtechniques.mdthornvigil.mdtraps.mdscripts/install.shscripts/tools/ab-pack.pyanchor.mjsarmcheck.mjsat.mjsbaketime.mjsdrawfit.mjsencode.swiftface.mjshost.htmljumps.mjskeydesign.mjsknight-measure.mjsmsheet.pyplay.jspsheet.pysetup.jsshot.jsvidcompose.pytemplates/ab-judge-prompt.mdcritic-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。
工作流程
- 动手调整关键帧前,先编写标准。 在
docs/combat-animation-standard.md(或项目对应文件)中,为该动作补充带编号的专属规则:- 按游戏时钟划分阶段:预备动作、在规则指定帧上的接触或释放,以及恢复阶段。
- 身体力学、武器轨迹、镜头呈现效果。
- 将每条规则标记为测试(量化)或已审核(根据帧评分)。
- 每条规则都必须有真实参考依据:身体力学参考 Tripo Studio 动作捕捉预设,或参考经过指导的技巧(例如射箭的完整动作周期)。仅使用 Tripo 预设;用户没有 Mixamo 账号,并且拒绝使用 Quaternius。
- 先建立基线。 在两个呈现界面(Characters 页面和游戏内)都进行捕获,保留帧,并在任何更改前获取盲测评分。
- 根据解剖结构设计关键帧,而不是根据手部位置。 对每个关键帧,选定上臂方向
u、前臂方向f和刀刃方向b,然后运行keydesign.mjs。它会返回手部目标位置并标记:- 抬臂角度超过 100°;
- 弯曲角度不在 12–140° 范围内;
- 刀刃相对于前臂的偏角不在 25–115° 范围内。
手部关键帧随肩部移动;刀刃和肘部关键帧使用世界方向。参见
references/techniques.md。
- 先测量,再查看。 烘焙后运行:
armcheck.mjs:测量真实网格上各手臂区域的关节范围,以及皮肤的拉伸和挤压情况;at.mjs:测量指定时间的拳头和刀刃位置;- 动作专属探针:
knight-measure.mjs、anchor.mjs或drawfit.mjs。 在花时间捕获之前,先修正违反规则的数值。
- 测试。 运行手臂范围测试和该动作的测试。为某个缺陷添加测试时,先临时恢复该缺陷并确认测试会失败;如果测试和代码读取了相同的错误约定,测试就会永远通过。
- 捕获两个镜头,并亲自以全分辨率查看。 从正面看效果良好的姿势,在游戏镜头中可能会显得不自然,反之亦然。将每次捕获与上一轮对比,确认内容确实有所更新。
- 评审。 使用两位盲评审,并采用固定评分标准(5 项 × 0–2 分;以较低分为准),再与上一版本进行盲测 A/B 对比,且标题完全一致。随后,在采取行动前,根据全分辨率帧和实时骨架数据核实每项结论。参见
references/review.md和templates/。 - 按项目规则发布:测试、构建、附带真实截图的变更日志、推送、尺寸检查、发布。使用
workflow-ship-change技能。如果已推送但尚未发布的版本出现退化,就通过后续提交直接修正;不要为玩家从未见过的内容增加版本号。 - 展示效果。 如需视频,请按该动作自己的时钟以 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