查看 V2 的新功能 · 全新界面、Crew、Blueprint 转 C++、多人游戏测试以及编辑器内更新 阅读更新日志 → The V2 giveaway winners are in · 10 accounts won 50M AI tokens each See the winners →
高级

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 工具都会返回一条消息,说明插件是否已安装、启用和加载,以及下一步该做什么。


设置

  1. 从 Fab 或 GitHub 安装 PaperZD,并在您的项目中启用它。如果 Unreal 提示,请重启编辑器。
  2. 在 CoPilot 中打开 设置 > 扩展,开启 PaperZD。它默认是关闭的。
  3. 让 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 上测试过。

最重要的三点:

  1. 告诉 AI 图集真实的行布局。 从 0 开始给行编号,说明哪些行是动画、哪一行是别的东西,并打开每个 flipbook 的第一帧进行检查。
  2. 永远不要旋转 Actor。 flipbook 是一张平面卡片,所以方向必须来自播放哪个动画,而不是转动 Actor。
  3. 不要相信编译干净。 请要求进行一次游玩测试,报告当前动画及其变量。

准确描述图集

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 自己运行游玩测试,并修复发现的问题。时间来自同一台机器。

  1. 导入两个角色,带有 idle、walk 和 attack 状态机:约 2.5 分钟。
  2. 一个可操作的英雄(WASD 移动,Space 攻击)、一个 spring-arm 摄像机、一个 game mode,以及一名在三个点之间行走的村民:约 7 分钟。
  3. 一个会追击并攻击的骷髅敌人、生命值,以及屏幕上的生命计数器:约 7 分钟。
  4. 四处游荡的狼、可收集的草药和草药计数器:约 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 的创作、检查与游玩时工具。

关于扩展的工作方式,请参阅 扩展;关于 AI 如何检查正在运行的游戏,请参阅 游戏测试。