如何在 Unity 2022 LTS 中为 2D 角色制作动画
了解 Unity 示例项目 Happy Harvest 中的角色是如何制作动画的。本文介绍了索具、2D 骨骼动画、精灵交换等内容。
Happy Harvest 是一款 2D 自上而下的农业模拟游戏,利用 通用渲染管线 (URP) 和 Unity 2022 LTS 的最新功能实现。
您可以在电子书《 面向艺术家的 2D 游戏艺术、动画和灯光》中找到这些技术以及更多内容。
阅读本系列的其他文章,了解如何复制 《Happy Harvest》中的效果和视觉效果:
- 如何利用 2D 瓷砖地图创建艺术和游戏玩法
- 通用渲染管线中的 2D 光影技术
- 使用 VFX Graph 和 Shader Graph 实现 2D 特效(即将推出)
立即从 Unity Asset Store下载Happy Harvest。
除了 2D 照明之外,《Happy Harvest》 中用于创建骨骼动画角色的其他技术还包括装配角色面部以创建不同的表情、用于角色变化的 精灵库 ,以及用于在动画过程中在附加到同一骨骼的精灵之间切换的精灵交换 (Sprite Swap)。
视角考虑
在自上而下的游戏中,需要从不同的视角绘制和制作角色动画。利用 《Happy Harvest》的卡通风格,您可以通过将方向限制为四个来获得漂亮的视觉效果。
该角色有三套动画:右(或“侧面”)、上、下。角色也会翻转,以呈现面向左侧或右侧的动画。
这需要权衡。如果角色面朝右侧并用右手拿着喷壶,则当角色翻转为面朝左侧时,喷壶必须换手。
处理每个方向的变化
从自上而下的角度来看,处理方向的变化可能具有挑战性。如果为角色的每个方向创建一个子游戏对象,并根据角色的当前方向启用或停用它们,则可以增加复杂性。在 《Happy Harvest》中,艺术家选择使用单个骨架,其中包含面向不同方向的精灵,这些精灵可以根据方向进行交换。该解决方案适用于样本的块状卡通风格。
2D 动画的一般规则
以下是演示中用于设计装配和动画角色的一些技巧:
以中立姿势绘制人物,手臂和腿伸直。如果身体的某些部位弯曲,则在制作动画时可能会出现问题。
使分辨率略高于游戏的每单位像素数(PPU)建议的分辨率。分辨率在静止状态下可能看起来不错,但旋转和拉伸图像可能会导致像素化。
如果您在游戏中大量使用 2D 照明并希望充分利用法线贴图,请不要将光线和阴影绘制到精灵上。相反,绘制无方向性的阴影。这种技术被称为环境光遮蔽。您的精灵会看起来更好,但您需要避免使用任何定向光,如阳光。
使用 Sprite Swap 功能交换的身体部位图层应进行相应的分组。例如,所有带有嘴部位置的图层
传统的 2D 动画 可能是 2D 游戏艺术开发中最耗时且最具挑战性的部分。骨骼动画可以帮助您节省时间,创建流畅且适应性强的动画,并使您能够使用更少的资产创建更多的动画。
PSD 工作流程
2D 动画 包使您能够将角色艺术作品直接从 Photoshop 导入 Unity。为此,PSD 导入器 包可处理分层的 PSD 和 PSB 文件。您可以将所有角色的图层导入为精灵,并将它们放置在应用程序中绘制的准确位置。
当您选择导入的 PSD 或 PSB 文件时,它会显示类似于精灵导入设置的选项,但还包含用于 2D 动画和装配的附加选项。您需要选择的关键选项是:
导入隐藏层: 此选项可从 PSD 或 PSB 文件导入所有图层,包括隐藏图层。
单个精灵(马赛克): 此设置仅当纹理类型设置为多种时才可用。它根据导入的图层制作精灵并将它们放到纹理图集中。如果要装备角色,请保持此选项处于启用状态。
用作钻机: 此选项生成具有与 PSD 或 PSB 文件相同图层层次和位置的角色预制件。
使用图层组: 这会增加来自 PSD 或 PSB 文件的图层分组。将其打开以对角色的各个部分进行分组,例如精灵交换的部分。
在图层管理部分,您可以查看图层的层次结构,并手动添加或删除要导入的图层。
您可以在 Sprite 编辑器内的 Skinning Editor 中创建角色的骨架。首先单击“创建骨骼”按钮,然后左键单击主窗口区域。第一次单击创建骨骼中心,第二次单击标记骨骼尖端位置。此工具将骨骼链接并嵌套在一起。
使用编辑骨骼按钮来细化骨骼。使用“分割骨骼”按钮可以将骨骼一分为二。这是制作四肢的一个不错的选择。如果您制作一根腿骨并单击膝盖所在的位置,则骨骼将分成大腿和小腿。
如果你检查 Happy Harvest中名为 PSD_Character_Boy.psd 的文件,你会注意到一些额外的骨头,例如名为 face_bone 的骨头。这些可以让角色的头部稍微转动,使其具有近乎三维的外观。您还可以查看用于移动眉毛和眼睑的骨骼,以使角色更具表现力。如果主角正在与 NPC 交谈,这些是有效的细节。
您可以在骨骼列表视图中重新设置骨骼的父级并重命名骨骼。要打开此视图,请单击顶部栏右侧的“可见性”按钮,然后选择“骨骼”选项卡。要更改骨骼的父级,请将其拖动到列表视图中。您可以通过单击活动骨骼的名称来重命名骨骼。命名骨骼将有助于您稍后找到它们。
为了验证层次结构是否正确,请选择“预览姿势”按钮并测试一些姿势。要重置骨骼的位置,请按工具栏上的“重置姿势”按钮。
为了将精灵分配给骨骼,您需要创建几何体。首先按下“自动几何”按钮。将会打开一个小的弹出窗口,您可以定义如何创建几何图形。
最好将所有滑块设置为零,以使几何形状尽可能简单。启用权重选项可自动将骨骼绑定到精灵。单击“为所有可见内容生成”按钮将为所有精灵创建并设置骨骼权重。要对单个精灵执行此操作,请双击该精灵。这对于调整某些精灵的几何形状很有用。
要完全控制顶点数量和几何形状的弯曲方式,您需要使用“几何”部分中的工具手动编辑网格。
使用尽可能少的顶点。较少的顶点有助于节省性能,因为每个顶点的位置都需要根据骨骼的旋转进行计算。由于更容易为较少的点设置权重,因此较少的顶点也能使网格弯曲看起来更好。此外,每个目标平台都有一个理想的游戏顶点数,因此优化几何总是一个好主意。
重量
一旦你的精灵的几何形状清晰了,就该 设置权重了。权重定义骨骼对每个顶点的影响,从零到一。零表示骨骼对顶点没有影响,一表示顶点将像粘在骨骼上一样移动。网格上的适当权重可以产生逼真的弯曲效果。错误地设置权重会破坏游戏的幻觉并扭曲你的精灵。
要开始设置权重,您需要定义哪些骨骼将影响特定的精灵。单击“骨骼影响”按钮,然后选择一个精灵。在小的弹出窗口中,您可以设置哪些骨骼影响所选的精灵。仅设置需要影响精灵的相关骨骼,并移除其余的骨骼。
在 《Happy Harvest》中,你可以看到多个精灵是如何受到同一根骨骼的影响的。例如,hand_l_bone 影响手的多种版本,包括侧面、正面和背面。
并非所有东西都可以通过旋转骨骼来实现动画。有时您需要另一种面部表情或手势,特别是当您想让角色改变其所面向的方向时。在这种情况下,您可以使用 Sprite Swap来将一个精灵与另一个精灵交换。为此,首先需要将精灵组织到精灵库资产中的类别和标签中。
在 Sprite Library Editor 窗口中您可以编辑所选 Sprite Library Asset 的内容。选择一个 Sprite Library Asset,然后在其 Inspector 窗口中选择 Open in Sprite Library Editor。您还可以通过 “窗口”>“2D”>“Sprite Library Editor”打开“Sprite LibraryEditor”窗口。
Sprite Library Asset 将其包含的精灵分组为类别和标签,并允许您在 Sprite Library Editor 窗口中编辑其内容。在 Happy Harvest中,查找包含虚拟字符的 LIBRARY_PSD_character_base。一旦我们制作了样本动画来确认分类有效,我们就会创建像 LIBRARY_PSD_character_boy 这样的变体。由于每个标签在所有 Sprite 库中都有匹配的版本,因此当将一个库交换为另一个库时,引用的标签或精灵可以动画化并正确显示。
通过检查不同的 PSD 文件(如 PSD_character_base 和 PSD_character_boy(匹配骨骼和结构)),您可以看到各个变体也共享相同的装备或骨架。这些在动画过程中也会弯曲。
要观察动画,请选择角色预制件,然后选择 Visual 中的 Prefab_character_base(建议将角色的视觉部分作为子游戏对象,并使用根游戏对象进行碰撞或其他逻辑。)
动画的第一帧,例如 ANIM_character_idle_side,正在修改动画创建方向的关键参数。这些包括:
Sprite Resolver 值: Sprite Resolver是一个附加到肢体 GameObject 的组件,可以轻松在 Sprite 库中同一类别的精灵之间交换。在这种情况下,当您创建动画时,请选择不同精灵的“侧面”版本。
骨骼位置: 从正面或背面看,视角与 ¾ 侧视图有轻微变化。您可以通过移动肩部和腿部骨骼的起始位置来创建此视角,对正面和背面动画使用相同的装备。
初始目标位置的二维逆运动学: 手臂、脚和腿使用2D 逆运动学(2D IK) 根据目标位置计算骨骼链的位置。您可以通过查看 LimbSolver2D_Target 项来了解这些游戏对象的目标位置是如何重置的。
Happy Harvest 中处理从右侧动画到左侧动画的切换的方式是使用 ANIM_character_face_left 或 ANIM_character_face_right。它们修改的唯一参数是父游戏对象的比例,将 X 更改为值 1 或负 1,这使得整个视觉效果在 X 轴上翻转。这用于控制角色的动画师,这将在下一节中解释。
演示中动画剪辑之间的安排和转换是通过 Animator Controller完成的,它设置了动画剪辑和转换的流程,可以从游戏中读取变量或触发状态的变化。
在 Happy Harvest中,如果你打开 Animator 窗口或文件 CONTROLLER_PSD_Character_base_prefab,你会看到项目的 Animator Controller 已经设置好了。检查左侧管理不同身体部位的 层 。头部可以播放一个动画,而身体可以播放另一个动画,依此类推。这提供了更多的可能性,而无需增加要制作的动画数量。示例中的动画层如下:
头: 该层用于使角色眨眼并环顾四周。它以A标记,表示它是一个附加层。作为一个附加层,它将头部的动画(眨眼和环顾四周)与其他图层中的动画(如空闲或行走)融合在一起。如果此层是覆盖而不是添加的,则它不会混合其他几个动画同时使用的属性的动画。
根据: 这用于主要的身体动画——行走、闲置和使用工具。每个状态都有六边形的形状来表明它们是子状态机。例如,如果双击 IDLE,您将看到如何在过渡箭头的条件属性下使用参数 DirX、DirY 和 Speed 来根据速度和面向方向触发动画之间的过渡。
翻动: 此层根据 DirX 参数使角色向右或向左翻转。正如前面提到的,动画会改变整个游戏对象的比例,从 X 方向的比例为 1 变为负 1(翻转 X 方向)。
您可以使用“参数”选项卡(图层旁边)连接动画器
如果您学习基本的动画原理并花时间完善角色动作,您将能够在游戏中看到结果。
要为主角创建新动画,请通过 “窗口”>“动画”>“动画”打开“动画”窗口。
选择预制件 Prefab_character_base。单击下拉菜单中现有动画的 “创建新剪辑” 选项即可创建一个新的 动画剪辑。动画剪辑就像是对象的位置、旋转、比例和其他属性随时间变化的线性记录。您的新动画将自动添加到第一个动画层的现有动画控制器中。
单击红色的“录制”按钮开始制作动画。现在,您对角色所做的所有更改都已记录到动画剪辑中。您可以通过切换曲线或查看单个属性来继续修改动画。开始移动 root_bone 下的骨骼,看看角色如何像木偶一样表现。
人体的运动是复杂的。如果你想从桌子上拿起一杯水,你的手必须移动到玻璃杯所在的空间位置。你做这一切时甚至不需要考虑旋转你的手臂和前臂,因为你的大脑会在无意识中处理这些计算。
为了在游戏中实现相同的动作,您需要同时为手臂和前臂的旋转制作动画。使两个旋转动作一致并做出可信的手部动作是一项具有挑战性的任务。2D 逆运动学 工具是 2D 动画包的一部分,它可以计算旋转并允许骨骼链移动到目标位置。
首先,您需要在层次结构顶部的 GameObject 上添加一个 IK Manager 2D 组件,类似于 Prefab_character_base 的组件。该组件负责管理角色上的所有 IK 解算器 。单击 + 按钮可添加新的求解器。解算器计算骨骼的旋转来匹配目标变换。
在 Happy Harvest中,我们添加了肢体求解器。这是腿部和手臂的标准解算器,可以解算最多两根骨骼和效应器(定义 IK 解算器解算的骨骼或变换的属性)。通过查看角色父游戏对象层次结构底部名为 LimbSolver2D 的游戏对象,您可以了解它们的工作原理和组织方式。
Happy Harvest 包含许多简单实用的动画,可用于背景道具或其他角色。几个要点包括:
- 猪预制件有一个简单的设置,没有 2D IK,非常适合作为装饰元素。
- 路灯的摆动运动(P_Lantern_Hanging)是一个循环播放的动画剪辑,随着时间的推移只会改变精灵的旋转,无需索具。
- 翻书动画或逐帧动画是一种快速的为次要背景人物制作动画的方法,因为它涉及的帧较少,所以开销较少。它也非常适合水溅效果。
- 水的效果和微风吹动灌木丛和树木的效果是使用 Shader Graph 和 VFX Graph 创建的特殊效果。
如果您还没有,请务必下载这些涵盖 Unity 中的 2D 游戏开发和渲染以及视觉效果(3D 和 2D)的高级电子书:
另外,请查看我们的其他 2D 演示 《The Lost Crypt》 和 《Dragon Crashers》。
您可以在 Unity 最佳实践中心找到更多针对高级程序员、艺术家、技术艺术家和设计师的资源。