关于 game-development
面向游戏动画设计者,指导将迪士尼 12 条动画原则应用于游戏引擎、玩家反馈和交互娱乐,并提供 Unity 与 Unreal 的实现模式及帧数参考。
主要功能
- 01应用 12 条动画原则
- 02涵盖角色动作与玩家反馈
- 03提供 Unity 和 Unreal 模式
- 04列出动作帧数参考
适用场景
- 01设计更易读的攻击预备动作
- 02用命中停顿和震屏强化冲击
- 03规划跳跃、投射物和闪避轨迹
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dylantarre/ animation-principles --skill game-development安装后在 Claude Code 中输入/game-development确认已加载。
详细介绍
游戏开发动画
将迪士尼的 12 条动画原则应用于游戏引擎、玩家反馈和互动娱乐。
快速参考
| 原则 | 游戏实现 |
|---|---|
| 挤压与拉伸 | 角色形变、冲击帧 |
| 预备动作 | 蓄力动画、蓄力指示器 |
| 演出布局 | 镜头焦点、环境提示 |
| 连续动作 / 关键帧动作 | 程序化动画与关键帧动画 |
| 跟随动作 / 重叠动作 | 披风、头发、武器轨迹 |
| 缓入 / 缓出 | 动画曲线、攻击 / 恢复 |
| 弧线 | 投射物轨迹、跳跃轨迹 |
| 次要动作 | 粒子效果、屏幕震动、音频同步 |
| 时间节奏 | 帧数据、命中停顿、响应窗口 |
| 夸张 | 风格化动作、受击反应 |
| 扎实绘制 | 一致的轮廓、远距离可辨识 |
| 魅力 | 角色个性、令人满足的反馈 |
原则应用
挤压与拉伸:角色落地时使其变形。快速移动时进行拉伸。冲击帧通过定格和挤压体现力量。变形时保持体积一致。
预备动作:攻击前摇向玩家预示攻击。跳跃前先下蹲蓄力。蓄力攻击要展现蓄力过程。敌人的攻击预兆要警示玩家即将受到伤害。
演出布局:镜头构图突出重要动作。环境光照引导注意力。敌人的位置布局要让战斗场景清晰易读。UI 不应遮挡关键玩法内容。
连续动作与关键帧动作:程序化动画(布娃娃、物理效果)属于连续动作。关键帧攻击连招属于关键帧动作。将两者结合——以关键帧为基础,搭配程序化次要动作。
跟随动作与重叠动作:身体停止后,头发、布料、尾巴等次要部分仍继续运动。挥砍后武器轨迹仍然保留。落地后的恢复动作延续到初始冲击之后。
缓入与缓出:使用动画曲线——角色动作切勿采用线性变化。攻击起手快速加速,恢复阶段缓慢减速。跳跃到达顶点时进行缓动,以控制轻盈感。
弧线:跳跃沿抛物线运动。剑挥出弧形轨迹。投射物自然呈弧线运动,除非使用即时命中。翻滚闪避应走弧线,而非直线平移。
次要动作:受击时加入屏幕震动。命中时迸发粒子效果。手柄震动与动作同步。音效设计强化视觉节奏。
时间节奏:命中停顿(定格帧)能突出冲击感——通常为 2-5 帧。攻击的起手 / 生效 / 恢复帧数据对游戏手感至关重要。输入响应时间应低于 100ms。
夸张:游戏动画必须在远距离和高速动作中清晰可辨。姿势可以比现实夸张 20-30%。受击反应应比物理规律所暗示的更加戏剧化。风格化应服务于清晰度。
扎实绘制:在所有缩放级别下,剪影都必须清晰可辨。角色在不同动画中的比例应保持一致。关键帧姿势要有力。避免产生混淆形体的相切线条。
魅力:角色的待机动画应体现个性。即使不考虑游戏机制,动作也应令人感到满足。玩家应乐于观看自己的角色移动。
引擎模式
Unity
// Squash and stretch on landing
IEnumerator LandingSquash() {
transform.localScale = new Vector3(1.2f, 0.8f, 1.2f);
yield return new WaitForSeconds(0.05f);
// Ease back to normal
float t = 0;
while (t < 1) {
t += Time.deltaTime * 8f;
transform.localScale = Vector3.Lerp(
new Vector3(1.2f, 0.8f, 1.2f),
Vector3.one,
EaseOutElastic(t));
yield return null;
}
}
// Hit-stop for impact
IEnumerator HitStop(int frames) {
Time.timeScale = 0f;
for (int i = 0; i < frames; i++)
yield return null;
Time.timeScale = 1f;
}
Unreal
// Animation curve for easing
UPROPERTY(EditAnywhere)
UCurveFloat* JumpArcCurve;
// Apply curve to movement
float CurveValue = JumpArcCurve->GetFloatValue(NormalizedTime);
时间参考
| 动作类型 | 起手 | 生效 | 恢复 |
|---|---|---|---|
| 轻攻击 | 3-6f | 2-4f | 8-12f |
| 重攻击 | 12-20f | 4-8f | 16-24f |
| 跳跃 | 3-4f | -- | 4-6f |
| 闪避 | 2-4f | 8-12f | 6-10f |
帧数据基于 60fps。请根据目标帧率进行调整。