mcpField
G
game-development

game-development

github.com/dylantarre创意与媒体134687 次安装43 周前更新
代码仓库

关于 game-development

面向游戏动画设计者,指导将迪士尼 12 条动画原则应用于游戏引擎、玩家反馈和交互娱乐,并提供 Unity 与 Unreal 的实现模式及帧数参考。

主要功能

  1. 01应用 12 条动画原则
  2. 02涵盖角色动作与玩家反馈
  3. 03提供 Unity 和 Unreal 模式
  4. 04列出动作帧数参考

适用场景

  1. 01设计更易读的攻击预备动作
  2. 02用命中停顿和震屏强化冲击
  3. 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-6f2-4f8-12f
重攻击12-20f4-8f16-24f
跳跃3-4f--4-6f
闪避2-4f8-12f6-10f

帧数据基于 60fps。请根据目标帧率进行调整。

评论

支持 Markdown