开发 2D 游戏必看,实用技巧大汇总

来源: Unity官方平台

Unity 作为用途广泛的游戏引擎,一直以来在 2D 游戏方面也做得十分出色。本文中,Unity 的 2D 技术产品经理 Rus Scammell 和 2D 产品营销经理 Eduardo Oriz 将介绍制作 2D 游戏的实用技巧,帮助开发者们快速上手、高效完成开发。

2D 项目模板


2D 项目模板非常适合作为 2D 项目的参考。模板可在 Unity Hub 中下载,其包含了一些特色 2D 内容:

  • 场景默认为 2D 视角,带有正交投影、纯色背景的摄像机
  • 编辑器默认设置为 2D 模式,纹理将作为精灵(Sprites)导入
  • 禁用了实时全局光照(RTGI)
  • 预装了 2D 所需软件包,包括 2D Animation、2D Pixel Perfect、2D PSD Importer、2D SpriteShape 及其它依赖项


自 Unity 2020.2 开始,2D 菜单选项成为了创建 GameObject 和 Asset 时的上级菜单选项,其中还将添加一组用于快速制作原型的原始 2D 精灵,同时SpriteShape 和 Pixel Perfect Camera 等新功能的菜单也会陆续加入。

精灵单位像素自定义


每单位像素(Pixels Per Unit, PPU)是 2D 开发的一个重要概念,精灵的 PPU 决定了图像长宽对应的空间单位占有多少个像素。

精灵的 PPU 应是开发的首要考虑之一。除了像素密度外,PPU 还会影响精灵渲染器(Sprite Renderer)的绘制模式、精灵在块图(Tilemap)等其他系统中的应用等等。合理的开发应该根据游戏需求与目标平台来确定像素密度,并尽量避免使用不必要的大型纹理。

2D PSD 导入器


2D PSD 导入器可将带图层的 Adobe Photoshop PSB 文件导入 Unity,让开发者可使用马赛克(Mosaic)等功能根据导入的图层和角色骨架自动生成精灵表单(Sprite Sheet)。在生成后,Unity 会将角色精灵重新组合、保存至源文件中。导入器的作用在于帮助引擎更好地兼容 2D Animation 系统与多图层角色设计流程。

减少像素重叠


该功能旨在减少色彩最终呈现到屏幕所需的绘制次数。以往半透明的像素其色彩在最终运算时,必须考虑到像素的重叠。过多地绘制重叠像素会降低 GPU 性能,使画面在低端设备或高帧率下显得不尽如人意。通常场景中所有的精灵都被视为透明像素,这时我们就需要一些减少过度绘制的方法来提高性能。

Unity 可以在精灵遮罩(Sprite Mask)划定的范围内允许过渡绘制。当遮罩设为方形时,整个方形区域都将允许过渡绘制,但如果网格类型(Mesh Type)设置为了紧缩(Tight),则生成的遮罩会跟随精灵的轮廓,忽略空白,从而减少过度绘制的区域。若想要更好地控制遮罩网格的轮廓,可在精灵编辑器内修改相关设定。


另一种减少过渡绘制的方法是合并重叠的静态精灵,不参与视差、静止不动的精灵可在关卡设计完成后合并。

组合碰撞体


当场景中存在多个附带静态 2D 碰撞体的精灵时,可使用 Composite 2D Collider 组件将多个碰撞体组合成一整个对象,减少计算负担,简化碰撞运算,让表面碰撞更加流畅。上图中的紫色图块便被用作了碰撞体,Composite Collider 可与 Tilemaps 一起使用,在添加组件选项中选择 Composite Collider、勾选 Composite 后便可启用功能。

Composite 2D Collider 也可以与父级 GameObjects 一起使用。为此,我们需要勾选碰撞体的 Used by Composite 选框来启用子碰撞体。当然,还有一种优化碰撞体的方法是手动绘制一个能覆盖 GameObject 的简单多边形。

块图渲染器


每个 GameObject 附带的渲染器(如精灵渲染器)都会占用部分运算开销。当场景中包含了多个静态精灵,若想提高画面性能、让游戏设计更加快捷,可使用块图渲染器(Tilemap Renderer)。单个块图渲染器可以渲染上百个精灵。当场景中有大量无需排序的精灵时,可使用块图大图块模式(Tilemap Chunk Mode)来降低精灵的 CPU 和内存占用,该功能在低端设备上尤为重要。将所有静态图块放在同一块图中,然后启用 Chunk 模式便能使用该功能。

注意,所有块图需要保存在同一张精灵图集(Sprite Atlas)中。块图可能无法在场景视图中正常显示,但在播放模式中会正确排序。显示问题的一种解决方法是在设计关卡时使用 Individual 独立图块模式,在发布时切换为 Chunk 大图块模式。

如果精灵的排序必须准确,比如某个角色需要移动至图块的前面或后面,则可以使用 Individual 独立图块模式。对于需要移动或具有游戏功能的精灵,可使用 Regular 常规模式。

形状精灵烘焙

形状精灵(Sprite Shape)是灵活设计形状和关卡的 2D 工具。Sprite Shape API 默认允许在运行时修改样条线的节点(对性能有一定影响),如果无须在运行时修改精灵,则可以烘焙或缓存样条线的几何形状,提高图像性能。选择形状精灵控制器(Sprite Shape Controller),点击启用样条线编辑(Edit Spline)、缓存几何体(Cache Geometry)即可完成网格的烘焙。使用 Unity 2019 LTS 及以上版本时,要想在运行时修改样条线,可在包管理器(Package Manager)中安装 1.3 及以上版本的 Burst 软件包来极大提升图像性能。

使用形状精灵快速制作场景美术


Sprite Shape Profiles 具备常见矢量绘图软件类似的作画方法,可用于绘制游戏性和装饰性元素。功能适用于多种艺术风格、能快速填充大片区域,同时所需的资源更少。

平铺精灵与九宫格精灵

精灵渲染器具备的各种绘制模式可降低资源数据量大小、让关卡设计更加好玩。平铺精灵(Tileable Sprites)可生成多个带有同一精灵、不同大小的 GameObject。打开精灵编辑器,使用黄色把手将平铺部分框起来,应用设置后转到 GameObject,将精灵渲染器的绘制模式更改为平铺(Tile)模式。

九宫格精灵(9-slicing Sprite)具备图像清晰、比例随长宽变化的特点。功能的具体使用方法是在精灵编辑器中划分出平铺的主图块与不变的四个角,在绘制模式中选择切分(Slice)。

透明度排序模式

在设计 2D 游戏时,时常会出现多个 GameObject 处于同一排序层或顺序的情况,或者精灵要用多个排序层和逻辑才能达成正确的渲染顺序,但此类做法并不高效。此时,我们可以使用项目设置(Project Settings)下的透明度排序模式(Transparency Sort Mode)来告诉 Unity 正确的渲染顺序。Unity 将按照一个 Vector2 方向(以X和Y轴坐标表示)描述的顺序对精灵进行排序。


2D 动画

在 Unity 中制作逐帧动画片段很简单。在项目窗口选择创建一个精灵序列,拖入场景视图或层级视图中,Unity 将自动生成一个动画片段和一个 Animator。

要想在现有 Animator 上添加动画片段,只需将动画帧拖到Animator的 GameObject 上,片段将自动添加到 Animator 中。如果要为每个 Sprite 创建一个单独的 GameObject,可按住 Alt 键或 Option 键再将动画帧拖入层级视图。

逐帧动画与骨骼动画


Unity 同时支持逐帧动画与骨骼动画,两者间的不同点在于:

01 逐帧动画

  • 每帧被视作单独的精灵
  • 额外的动画需要用额外的精灵
  • 帧率与播放速度通常为固定的
  • 过渡动画须用额外精灵制作
  • 不支持2D反向动力学(2D IK)

02 骨骼动画

  • 动画帧由同个精灵生成
  • 动画片段由同个精灵生成
  • 可适应播放速度变化
  • 可用于制作过渡动画
  • 支持 2D IK

Burst 对 2D 动画性能的提升


Burst/Collections 软件包可以优化带有大量骨骼的 2D 动画,带有大量顶点数的精灵网格,以及运行时的精灵变形动画。其原理是借助 Burst 编译与底层数组处理程序来加快引擎对精灵网格变形的处理速度。

若想启用Burst,请使用 Unity 2020.2 以及 2D Animation 5.0.x,安装 Burst 1.3.3 及以上版本并安装 Collections 预览包。

Burst 1.3.3 与 Collection 0.9.0-preview.6 是本次 2D Animation 中的受测版本

2D 动画自定义曲面细分功能


在预处理需要绑定骨架的精灵时,我们有对网格的完全控制。蒙皮编辑器(Skinning Editor)带有的自动曲面细分选项可以快速完成细分处理,而我们可借助网格工具来自定义细分配置,添加或移除顶点,制作出想要的网格。

2D 动画中的 2D 物理


为带骨骼的角色添加 2D 碰撞体和 2D 刚体组件可做到用 2D 物理系统驱动运动。在上方图示中,胶囊碰撞体(Capsule Collider)被添加到了每根骨骼及 2D 刚体组件上,碰撞体再借助铰链关节(Hinge Joint)连接,每个关节可设置运动限制角度,相邻关节的刚体组件也能设置是否相互碰撞。

像素美化与锐化

资源尺寸参考:32 像素每单位(PPU)

2D 游戏画面的开发关键点之一在于资源需要有一致的像素密度。如果项目中的像素密度为 32 PPU,则每个面积单位就应包含 32 个像素,类似上图左侧的图块。

默认的 2D 摄像机以镜头中心为原点、以垂直方向为单位来描述图像尺寸。比如在下方图示中,镜头的平行方向上可以塞下 10 个图块:


如果资源在加入场景视图时与参考图像相比显得过小,则很可能是由于分辨率不匹配。

Unity 默认的精灵 PPU 为 100,当我们将设置改为 32 PPU 后,精灵可能才会正常显示。


引擎默认会开启双线性过滤(Bilinear Filtering)来平整突出的边角,如果想要制作复古风的像素图像,可将过滤模式(Filter Mode)改为点(Point),在划定的屏幕空间内实现锐利的图像效果。

纹理导入预设

当项目需要导入大量资源时,一个个地去更改精灵的导入设置会非常耗时耗力。而创建一个导入模板或预设后,资源在导入时便能以预定好的配置导入。要创建模板:

  • 选中带有所需配置的资源
  • 点击 Sprite Asset 旁的 Settings 图标来创建模板
  • 以好记的名字保存
  • 将模板设为默认,新导入的资源便会自动应用该配置,Preset 资源可在 Project 视图中找到


在制作像素美术时,屏幕必须始终显示相同数量的像素,且所有像素的大小必须相等。为此,我们可以找到摄像机配置,添加像素完美相机(Pixel Perfect Camera),将资源 PPU 设置为像素图用到的参数。

在添加像素完美相机(Pixel Perfect Camera)组件后,组件会作用于播放模式的摄像机,如果启用了在编辑模式下运行模式(Run in Edit Mode),则效果在编辑器中便能查看。


在项目中,角色和对象可以改变位置、转向和尺寸。默认时变化插值会非常平滑,但如果想要保留PPU带来像素图像缺陷,可以启用纹理扩张(Upscale Texture)。GameObject 将以一个像素为单位扩张,转向与比例的变化也将遵守图像约束。我们之前也分享了更多有关制作8位(点击回看)和16位(点击回看)复古游戏的技巧。

生产力工具 2D 编辑器

排序层组(Sorting Groups):排序层组可为多个 2D 渲染器划分群组。排序层(Sorting Layer)与图层顺序(Order in Layer)的确可以确定单个角色的渲染顺序,但并不足以处理角色重叠时各部位互相交织的问题。


我们可为每个角色的根游戏对象设置一个排序层组,将所有的渲染器划分为一组。有了排序层组后,角色将不再交织,且会根据组顺序排序。排序层组适用于所有的 2D 渲染器以及粒子系统。

精灵图集(Sprite Atlas):精灵图集是指包含多个精灵的单张纹理。Unity 在使用纹理上的精灵时,不必多次绘制单独的精灵,只需绘制一次纹理即可,从而提高图像性能。

在生成精灵图集时,如果以文件夹作为图像源,则图集的内容可在制作过程中轻松地增减,我们只需修改文件夹内容即可。


我们还可以将大小或压缩比例不同的精灵变体塞入同一张精灵图集,使用一个资源来应对不同平台的要求。

请根据自己的游戏来制定图集的使用方法。精灵图集的设计目的在于实现生产力、灵活性和性能的平衡。

本文转自: Unity官方平台,转载此文目的在于传递更多信息,版权归原作者所有。

最新文章