跳转到正文
全部教程

AI 角色动画

从一张角色图到可操作的 2D 角色:待机、跑动和攻击

沿用同一张机器人图片,补齐待机和跑动,把四段 24 FPS 透明动画接到方向键与攻击键。附可玩演示、真实 Godot 运行视频、精灵图与示例项目。

AnimGen更新于 10 分钟阅读
同一个橙色机器人的待机、跑动、直拳与前踢四种动画姿势
本文目录

按住方向键让角色跑起来,松手停下,出一拳,再继续移动。把动画接到操作上之后,动作切换时的大小变化、脚底位置和收招时机就更容易看出来了。

上一期,我们从同一段视频里拆出了橙色机器人的直拳和前踢。这次沿用同一张角色图,补上格斗待机与原地跑动,把四段透明动画接进一个小场景,全部保持 24 FPS。

同一套四动作素材在 Godot 4.7.2 中实际运行:待机、向右跑动、出拳、向左跑动、踢腿。录制为 24 FPS。

也可以直接打开浏览器操作演示:方向键或 A/D 移动,J 出拳,K 踢腿;手机上按住方向按钮。页面默认暂停,点击开始或操作按钮后播放。

四个动作共用一张角色图

这次继续使用橙色机器人原图,保留同样的护甲颜色、头身比例和面向右的视角。每个动作都从这张图开始,减少重新绘制角色带来的外观变化。

同一机器人在统一透明画布上的四段动画及各自帧数

构图也沿用前篇设置:4:3 画布,Expand Canvas 缩放 80%,位置 X 为 0.35、Y 为 0.5,给右侧拳脚留出空间。如何为大动作安排留白,可以看 Expand Canvas 案例。

向左移动时,演示把整套图片水平镜像。这个机器人没有文字或单侧武器,用同一套素材转身比较方便。如果角色拿着盾牌,或衣服上有字,就要检查镜像是否符合设计。

分别生成安静的待机和原地跑动

待机提示词要求双脚站定、拳头维持准备姿势,胸口和肩膀只有轻微起伏。这样松开方向键后,角色能安静地停下来,不会马上踏步或做出另一个大动作。

跑动提示词则要求面向右、在原地连续跑动,镜头与角色尺度保持固定。场景中的横向位置交给代码控制,素材本身保留摆臂、抬腿和身体起伏。

两条请求都使用 Seedance 2.0 Fast、4 秒、480p、4:3 和 Alpha Key。本次实际每条扣费 36 积分,共 72 积分;透明 PNG 序列与 ProRes 4444 导出均为 0 积分。直拳和前踢复用前篇的 720p 素材,没有再次生成。积分是 2026-10-03 的实际记录,后续以生成前报价为准。

可以下载实际使用的待机提示词和跑动提示词,以及带键色背景的待机原片和跑动原片。两条原片实际都是 752 × 560、97 帧、24 FPS,约 4.04 秒;请求档位、返回尺寸和运行时画布分别对应不同环节。

待机和跑动选循环,攻击保留完整起落

四秒原片足够挑出一段呼吸或步态周期。我们先连续播放几个周期,再检查末尾接回开头时的姿势,保留下面这些连续帧。表里的源帧编号从 0 开始,包含首尾两帧。

动作 源帧范围 保留帧数 24 FPS 时长 播放方式
待机 22–56 35 约 1.46 秒 循环
跑动 44–59 16 约 0.67 秒 循环
直拳 9–44 36 1.50 秒 单次
前踢 58–88 31 约 1.29 秒 单次
35 帧待机循环,保持 24 FPS。胸口与手臂有轻微活动,双脚留在原位。视频添加深色底便于观看。
16 帧原地跑动循环,保持 24 FPS。场景位移由控制器另外处理;下载包中的图片保留透明通道。

待机与跑动各自最后两帧和最前两帧的接缝对照,图片标签使用英文和源帧编号

跑动保留完整步态,再从第 59 帧回到第 44 帧。没有把 16 帧降成 12 FPS,也没有额外生成过渡帧。循环选段的检查方式可以参考行走循环文章;直拳、前踢的起手与收招来自上一期的两个动作选段。

用统一画布和原点对齐四段动画

每段动画都放进 512 × 384 的透明画布,保持原始宽高比。新增的待机、跑动整帧先等比缩放到 512 × 381,再放进画布,避免把 752 × 560 硬拉成另一种比例。

检查站姿与落脚位置后,我们对待机整段固定平移了 X −2、Y +3 像素,跑动整段固定平移 X −24、Y +3 像素。直拳与前踢沿用原来的位置。四段共用左上角起算的原点 (224, 321),在场景中按 0.85 倍显示。

这些值属于本次机器人素材。换角色时,先对比各段的头顶、脚底和躯干位置,再决定需要怎样对齐。整段使用固定偏移可以保留跑步中的自然起伏;逐帧紧贴轮廓裁切,则可能让角色在切换和播放时跳动。画布与轴点文档解释了这两个设置的区别。

攻击播完后,再响应当前方向

小场景使用 idle、run、punch 和 kick 四个状态。没有攻击时,有方向输入就跑动,松开就待机;同时按住左右键则停下。

按下 J 或 K 后,控制器锁住横向位置和朝向,让攻击完整播放一次。期间的新攻击输入直接忽略。动画结束时重新读取方向:仍按着就继续跑,已经松开就回到待机。长按攻击键只触发一次,下一次需要松开再按。

Godot 示例通过 AnimatedSprite2D.animation_finished 处理收招。直拳与前踢关闭循环,待机与跑动开启循环;循环动画不会发出这个完成信号。Godot 官方文档

gdscript
func _attack_finished() -> void:
    if _attacking():
        completed[state] += 1
        _locomotion()

_locomotion() 会读取当前方向输入,再选择 run 或 idle。完整实现已经放进下载项目,无须自己拼接这段函数。这个场景先处理移动和动画切换,尚未加入敌人、命中检测或伤害计算。

在 Godot 中试手感,移动速度单独调

Godot 4.7.2 中实际运行的橙色机器人角色,顶部显示操作键、当前动作与 24 FPS

下载 Godot 示例项目,解压后在 Godot 4 导入 project.godot,按 F5 运行。项目从 character.json 读取四张透明精灵图及帧区域,创建 SpriteFrames,无需安装插件。本次在 macOS 的 Godot 4.7.2、Compatibility 渲染器中运行并录制了开头的视频。

移动速度默认 280 px/s,动画保持 24 FPS。这是可调整的演示速度,换角色或缩放比例后还需要再看脚掌着地时的滑动情况。网页速度滑块的范围为 60–600 px/s;Godot 项目可修改 assets/character.json 中的 defaultSpeed。调位移速度时先保持播放帧率,能更清楚地判断步态和移动是否合拍。

试着在跑动中出拳、攻击期间按相反方向、收招前松开所有按键。角色应完整做完攻击,再按当前输入行动。网页隐藏或窗口失焦时会清理按键并暂停,回来后不会继续沿用先前按住的方向。

下载素材,换成自己的角色

透明精灵图包包含四张 PNG、帧区域、播放帧率和选帧与对齐配方。按 JSON 中的帧数读取:图集末尾可能有空格,不要把空格加入播放序列。网页和 Godot 都使用透明图片;文内 MP4 为观看方便合成了背景。

这套多动作控制器与下载包是在真实导出素材上制作的教程示例。自己制作时,可以先按Godot 导入教程确认素材,再替换四个动作的精灵图与帧数据。尺寸、哈希、扣费和导出检查保存在素材记录。

把停止、转身和一次完整攻击试顺以后,再决定角色缺什么动作。需要补充动画时,回到 AnimGen 工作台,沿用确定好的角色图、镜头和画布留白。

查看图片细节