PaperZD
只需开口,就能在 PaperZD 中构建 2D 角色动画:由精灵图集生成 flipbook、动画源、Animation Blueprint、状态机、可操作角色以及游玩检查。
Critical Failure Studio 出品的 PaperZD 是大多数 Paper2D 游戏使用的动画系统:为 flipbook 角色提供动画图和状态机。它在 Fab 和 GitHub 上都是免费的。
借助 PaperZD 扩展,Ultimate Engine CoPilot 可以为您构建这些设置,从一张精灵图集一直到在游玩中能行走和攻击的角色。
它已使用 PaperZD 2.2.4 在 Unreal Engine 5.7 上测试过。
您需要什么
- PaperZD,已在您的项目中安装并启用。它使用 Unreal 自带的 Paper2D 插件,PaperZD 会一并启用它。
- 您角色的一张精灵图集,或现有的 flipbook。
另外还需要开启了 PaperZD 扩展的 Ultimate Engine CoPilot。
没有 PaperZD 时,该扩展不会造成任何影响。每个 PaperZD 工具都会返回一条消息,说明插件是否已安装、启用和加载,以及下一步该做什么。
设置
- 从 Fab 或 GitHub 安装 PaperZD,并在您的项目中启用它。如果 Unreal 提示,请重启编辑器。
- 在 CoPilot 中打开 设置 > 扩展,开启 PaperZD。它默认是关闭的。
- 让 AI 检查 PaperZD 的状态。它会报告是否找到了 PaperZD;如果没有,会告诉您缺少什么。
您可以提出的请求
- “这是我的骑士精灵图集,6 列 13 行。为 idle、walk 和 attack 制作四个方向的 flipbook,并为它设置好 PaperZD。”
- “添加一个包含 Idle、Walk 和 Attack 的状态机。角色移动时进入 Walk,停下时回到 Idle,Attack 播放一次后回到 Idle。”
- “让动画朝向角色移动的方向。”
- “制作一个可操作的角色,用 WASD 移动,用 Space 攻击,摄像机在它身后,再加一个会生成它的 game mode。”
- “给 walk 动画添加脚步声。”
- “在游戏运行时把角色换成红色调色板。”
在这些请求背后,AI 可以:
- 把精灵图集切成动画。 一次调用就能把一张图集变成精灵、flipbook、动画序列、一个动画源和一个 Animation Blueprint。带有多个方向的动画会变成一个多方向序列。
- 构建动画图。 包括 play sequence、状态机、direction、override slot、按 bool、数字或 enum 选择、random player 和 cached animation 节点,并把它们连接起来。
- 构建状态机。 状态、管道(conduit)和跳转,转换可以根据某个变量、当前动画结束时、始终或从不触发,并带有优先级和可选的过渡序列。
- 添加 notify。 在时间轴上添加自定义事件、声音以及 Niagara 或粒子特效,自定义 notify 会变成您可以填写内容的函数。
- 添加皮肤。 为每个动画提供替换的 flipbook,用于服装或调色板替换,在游戏运行时生效。
- 创建角色。 创建一个由 Animation Blueprint 驱动的新 PaperZD 角色,或把现有的 Actor 接入。它还可以向 Level Sequence 添加 PaperZD 轨道。
- 在游玩中检查。 读取正在播放哪个序列、播放进度以及动画变量的值,并可以播放、停止或跳转到某个动画,手动测试转换。
它会避开的错误
PaperZD 有几个陷阱:编译干净通过,却什么也不做。AI 了解它们:
- 新转换的规则默认是“never”,在设置之前,角色永远不会离开 Idle。
- 规则读取的变量必须在某处被写入,通常是在 Animation Blueprint 的 Tick 中。编译干净并不能证明规则会发生变化,所以 AI 会在游玩中检查。
- 序列只能在它自己动画源的 Animation Blueprint 中播放,因此它会把每个角色的资产放在一起。
- 状态和转换在一组编辑结束时统一编译一次,而不是每次编辑后都编译。
- 精灵图集的网格从顶部开始从左到右读取,所以 AI 数格子的方式与 PaperZD 一致。
技巧与窍门
这些经验来自用 PaperZD 和 CoPilot 构建一个可玩的小村庄:一位英雄、一名村民、骷髅敌人和四处游荡的狼。已使用 PaperZD 2.2.4 在 Unreal Engine 5.7 上测试过。
最重要的三点:
- 告诉 AI 图集真实的行布局。 从 0 开始给行编号,说明哪些行是动画、哪一行是别的东西,并打开每个 flipbook 的第一帧进行检查。
- 永远不要旋转 Actor。 flipbook 是一张平面卡片,所以方向必须来自播放哪个动画,而不是转动 Actor。
- 不要相信编译干净。 请要求进行一次游玩测试,报告当前动画及其变量。
准确描述图集
AI 看不出图集的哪一行放着哪个动画。您必须告诉它。
- 从 PixelLab 导出的图集有 6 列 13 行,每格 92 像素,每个动画有四个方向,顺序为南、西、东、北。第 0 行是一行旋转姿势,不是动画。
- 导出时会附带一个布局文件,列出哪一行放着哪个动画。请使用它。不同角色的顺序不一样:在村庄里,英雄和法师是 walk 在前,骷髅是 attack 在前,狼是 idle 在前。
- 从 0 开始数,并指明旋转行。有一次会话中,提示词写的是“第 1 到 4 行是 walk”。AI 从 1 开始数,结果每个动画都差了一行,英雄朝向了错误的方向。
可以这样写行:
每张图集是 6 列 13 行,每格 92 像素。从 0 开始给行编号。第 0 行是旋转行,跳过。第 1 到 4 行是 walk(南、西、东、北,6 帧),第 5 到 8 行是 attack,第 9 到 12 行是 idle(4 帧)。
重要的设置
- 开启像素风。 纹理使用 nearest 过滤且不用 mip,这样像素保持锐利。
- 轴心放在底部中央。 脚在每一帧里都停在同一个位置。
- 每秒帧数。 请说明您想要的速度。AI 曾把所有动画都设为 15,导致 4 帧的 idle 大约四分之一秒就循环一次。idle 6、walk 12、attack 14 看起来才对。
- 方向顺序。 多方向序列从上方开始顺时针运行:北、东、南、西。
- 放置在关卡里的 Actor 上的值优先。 在关卡中某个 Actor 上设置的冷却或速度会覆盖 Blueprint 的默认值,所以当某次修改似乎毫无效果时,请检查已放置的副本。
让精灵始终面向摄像机
这套设置让精灵不再转动、倾斜或变成侧面朝向摄像机:
- 关闭 Actor 旋转。 Controller yaw 关闭,orient rotation to movement 关闭,controller desired rotation 关闭。如果保持开启,卡片会随 Actor 转动,并可能变成侧面朝向摄像机。
- 以 yaw 0 生成。 生成 yaw 为 180 会让卡片朝远离固定在世界中的摄像机的方向倾斜。
- 把 spring arm 固定在世界上。 Pawn control rotation 关闭,inherit pitch、yaw 和 roll 关闭,collision test 关闭。pitch 为 -40、yaw 为 -90 的效果不错。
- 只倾斜卡片一次。 摄像机向下看 40 度时,给精灵一个 -40 的 roll,并把它抬高,让脚接触地面。
- 按世界坐标轴移动,而不是沿着 Actor 的 forward 或 right 向量。
- 用 Set Directionality 显示方向。 给它传入一个名为 Facing 的 Vector2D 变量。每个 Tick 根据速度写入 Facing,角色停下时保留最后的值。
使用这个摄像机时,按键的对应关系如下:
- D 沿 +X 移动,Facing (1, 0)。
- W 沿 -Y 移动,Facing (0, 1)。
- A 沿 -X 移动,Facing (-1, 0)。
- S 沿 +Y 移动,Facing (0, -1)。
如果左右或上下反了,请翻转 Facing 中对应部分的符号。不要靠旋转 Actor 来补偿。
在游玩中测试
- 转换的规则无法变化时,转换什么也不做。 新规则是“never”,而读取变量的规则需要有东西写入该变量,通常是 Animation Blueprint 的 Tick。请要求进行一次报告当前动画的游玩测试。
- 给 Facing 一个初始值。 它只在角色移动时才会被写入,所以在迈出第一步之前攻击,读到的是零。默认设为南可以解决。
- 让英雄面向目标。 如果攻击应该命中一侧的某个东西,请让 AI 在挥击之前把 Facing 设为朝向最近的敌人。
一次真实的会话
合作视频是在 CoPilot 聊天中,用 Claude Code 代理,通过四条提示词构建的。AI 自己运行游玩测试,并修复发现的问题。时间来自同一台机器。
- 导入两个角色,带有 idle、walk 和 attack 状态机:约 2.5 分钟。
- 一个可操作的英雄(WASD 移动,Space 攻击)、一个 spring-arm 摄像机、一个 game mode,以及一名在三个点之间行走的村民:约 7 分钟。
- 一个会追击并攻击的骷髅敌人、生命值,以及屏幕上的生命计数器:约 7 分钟。
- 四处游荡的狼、可收集的草药和草药计数器:约 7 分钟。
画面效果是另一项工作
AI 构建动画和游戏玩法。视频的画面效果是在关卡中设置的,不是由 AI 完成的:
- 温暖的阳光和灯笼光。
- Bloom、暗角和浅景深,营造移轴的感觉。
- 角色上使用不受光照影响的自发光材质(unlit)。
请从 unlit 材质和固定曝光开始。靠肉眼多轮调整曝光,花掉的时间比换来的收益更多。
局限
- AI 不知道图集的每一行放着哪个动画。您必须告诉它。
- 敌人径直走向英雄,不会绕过道具寻路。
- 恰好 45 度时两个轴相等,动画会选择东。
- 生命值到 0 就停止。在您要求加入死亡之前,不会发生别的事。
- 它无法在按键被按住的中途读取动画状态,并且如实说明了这一点,而不是猜测。
权限
读取不受限制:检查资产、图或正在运行的动画时从不询问。更改遵循您的 Ask Before Edit 或 Auto Edit 设置,与其他所有工具一样。
它如何运作
- 插件之间没有链接。 该扩展仅通过反射访问 PaperZD,因此无论是否安装了 PaperZD,Ultimate Engine CoPilot 的构建和运行方式都相同,并且该扩展可以在设计相同的各个 PaperZD 版本之间继续工作。如果更新重命名了某个东西,工具会指出缺失的字段,而不是猜测。
- 处处可用。 这些工具可以在 CoPilot 的聊天中、在 Claude Code 和 Cursor 等外部 MCP 客户端中,以及在编码代理中使用。请参阅 MCP 集成。
- 39 个工具。 涵盖动画源、序列、notify、皮肤、Animation Blueprint、图、状态机、角色和 Sequencer 的创作、检查与游玩时工具。