Pixel Art Course
0/34 已完成
游戏核心美术资源/第 30 课
学习进度0%
已完成 0/34 章

第三十课:角色状态机与动画切换

上一课你会画 Idle、Walk、Attack、Hurt;剪得越多,越容易乱——攻击中能不能跳?受击要不要打断走?死亡还能不能按移动?

状态机就是给答案:每个「身份」只准做几件事,身份之间怎么换,得写清楚。

像电梯:关门 → 到站开门 → 超时再关门。角色也一样,只是状态换成 Idle / Walk / Attack。

1、先把「身份」列出来

小项目够用的一套:

状态大约播什么常能切到
Idle待机循环Walk、Jump、Attack、Hurt
Walk / Run走 / 跑循环Idle、Jump、Attack、Hurt
Jump(可再拆起跳 / 腾空 / 落地)空中几帧Attack(空中)、Hurt、落地回 Idle
Attack上一课那段非循环Idle、Walk、Hurt(可打断)
Hurt受击短非循环Idle、Die
Die倒地(通常结束)

每个状态对应一段剪辑(或一组剪辑)。图上标着 RUNNING,就是引擎里 play("run") 那种东西——名字跟状态对齐,后面查找不会疯。

俯视角还常乘方向:Idle×8、Walk×8……仍然是「状态 + 朝向」,别当成几百个互不相干的动画。

扩展状态(需要再加):Dash、Guard、Crouch、Climb、Cast……别一上来全做,先跑通四五个核心。

2、转换:谁允许变成谁

转换靠条件,不是随便跳:

条件例子
输入按攻击 → Attack
动画播完Attack 结束 → Idle
物理脚离地 → JumpAir;落地 → Idle
伤害被打 → Hurt(闪避无敌可挡)
资源HP≤0 → Die

最小合法表(只记主干):

Idle  ──方向──► Walk ──松键──► Idle
  │               │
  │攻击            │攻击
  ▼               ▼
Attack ──播完──► Idle / Walk
任意(有伤)──► Hurt ──播完──► Idle
任意(HP=0)──► Die

非法的别开:死了还 Walk、Hurt 里再开大招又不取消、Attack 前摇就能瞬切到第二招……除非你明确设计成取消规则。

优先级常见从高到低:Die > Hurt > Attack / Dash > Jump > Walk > Idle。同时满足多个条件时,走高的。

3、切过去:硬切还是糊一下

像素游戏大多 硬切(新状态第一帧立刻上),手感更快。

想少突兀:让相邻状态的起止剪影接近(Attack 收招 ≈ Idle 起手),必要时插 1~2 帧过渡,别做成十几帧 blend 糊掉反馈。

跳跃里「上升 ↔ 下落」之间常有一帧 Invert / 过顶——Y 速度翻转时当桥。这就是状态(或子状态)边界:Up → Invert → Fall,别指望一段无限循环自己搞定。

取消(Cancel):攻击后摇里允许闪避 / 跳跃——高手手感;别在每一帧都允许,否则会砍掉「后摇代价」。

4、动画事件:和玩法绑在同一帧

状态决定「播哪段」;事件决定「这一帧干什么」:

时机常见事件
攻击帧开始开 Hitbox、播挥刃音、出第28课特效
攻击帧结束关 Hitbox
闪避起手开无敌;结束关无敌
动画最后一帧允许切回 Idle / 接连招窗

Attack 状态全程:输入先进 Attack → 播非循环 → 中间帧开判定 → 播完退回 Idle(或接下一连)。别把 Hitbox 挂在「一按攻击键就永久开」上。

Hurt / Die 优先级高:正在 Attack,被打也可能硬切——除非当前帧处于超级装甲。Die 一般不再接受移动输入。

5、复合:同时发生怎么办

有时表面像两个动作:一边跑一边开枪。

两种做法选一,写进设计:

  1. 新状态RunShoot(单独剪辑,表更长、最清晰)
  2. 分层:下半身 Run + 上半身 Shoot(省帧,实现稍烦)

别让代码里「半个 Run、半个 Shoot」却没有任何状态名——以后 Debug 会哭。

引擎里:Godot 可用 AnimationTree / 自写 enum;Unity 用 Animator 参数(Bool / Trigger)。先在纸上画通,再拖节点。一句话实现:change_state 时检查白名单 → 换 play(动画名) → 在 animation_finished 退回。

6、作业

给自己的角色定一套能用的状态机:

  1. 状态清单:至少 6 个(含 Idle / Walk / Attack / Hurt),各写一句干什么
  2. 转换表:谁 → 谁,触发条件一句话;圈出非法路径
  3. 状态机小图:纸笔或 Draw.io 都行
  4. Attack 事件表:哪几帧开 / 关 Hitbox、特效、音效、结束允许转换
  5. 选做:引擎里跑通 Idle → Walk → Attack → Idle,被打能进 Hurt

下一课做 NPC / 敌人——玩家状态机更贪,对面的人常常更省、但 AI 要换一套剪辑节奏。

课程作者:像素熊老师

微信公众号「教你画像素画」 · B站 · X / Twitter · GitHub