搜索 Unity

大量2D游戏开发技巧来袭

2021年2月9日 类别 技术 | 12 分 阅读
涵盖的主题
分享

本次,2D技术产品经理Rus Scammell和2D产品营销经理Eduardo Oriz将介绍许多引擎实用技巧,帮助开发者们快速上手、高效地完成开发。

2D Template项目模板

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

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

自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(切分)。

Transparency Sort Mode(透明度排序模式)

在设计2D游戏时,时常会出现多个GameObject处于同一排序层或顺序的情况,或者精灵要用多个排序层和逻辑才能达成正确的渲染顺序,但此类做法并不高效。此时,我们可以使用项目设置(Project Settings)下的透明度排序模式(Transparency Sort Mode)来告诉Unity正确的 渲染 顺序。Unity将按照一个Vector2方向(以X和Y轴坐标表示)描述的顺序对精灵进行排序。Unity产品市场经理Eduardo Oriz和产品经理Rus Scammell在其Unite Now演讲上详细介绍了此优化方法(时间轴9:15)

2D Animation

在Unity中制作逐帧动画片段很简单。在项目窗口选择创建一个精灵序列,拖入场景视图或层级视图中,Unity将自动生成一个动画片段和一个Animator。要想在现有Animator上添加动画片段,只需将动画帧拖到Animator的GameObject上,片段将自动添加到Animator中。如果要为每个Sprite创建一个单独的GameObject,可按住Alt键或Option键再将动画帧拖入层级视图。

逐帧动画与骨骼动画

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

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

骨骼动画

  • 动画帧由同个精灵生成
  • 动画片段由同个精灵生成
  • 可兼容不同的播放速度
  • 可用于制作过渡动画
  • 支持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 Physics 物理

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

像素美化与锐化

2D游戏画面的开发关键点之一在于资源需要有一致的像素密度。如果项目中的像素密度为32 PPU,则每个面积单位就应包含32个像素,类似上图左侧的图块。默认的2D摄像机以镜头中心为原点、以垂直方向为单位来描述图像尺寸。比如在下方图示中,镜头的平行方向上可以塞下10个图块:

如果资源在加入场景视图时与参考图像相比显得过小,则很可能是由于分辨率不匹配。Unity默认的精灵PPU为100,当我们将设置改为32 PPU后,精灵可能才会正常显示。

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

纹理导入预设

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

  1. 选中带有所需配置的资源
  2. 点击Sprite Asset旁的Settings图标来创建模板
  3. 以好记的名字保存
  4. 将模板设为默认,新导入的资源便会自动应用该配置(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在使用纹理上的精灵时,不必多次绘制单独的精灵,只需绘制一次纹理即可,从而提高图像性能。 在生成精灵图集时,如果以文件夹作为图像源,则图集的内容可在制作过程中轻松地增减,我们只需修改文件夹内容即可。

我们还可以将大小或压缩比例不同的精灵变体塞入同一张精灵图集,使用一个资源来应对不同平台的要求。 请根据自己的游戏来制定图集的使用方法。精灵图集的设计目的在于实现生产力、灵活性和性能的平衡。

更多2D 游戏开发的提示与技巧

在此处了解Unity在2D美术方面的努力;了解Odd Bug在游戏 《Tails of Iron(钢铁之尾)》中使用2D光照营造的氛围;下载2D示例项目《The Lost Crypt(失落的地穴)》,再阅读这份2D资源分辨率选择的深入指南。最后,下方可以观看Eduardo和Rus的Unite Now演讲。

此内容由第三方提供商托管,该第三方提供商不允许在未接受“Targeting Cookies”的情况下观看视频。如果想观看来自这些提供商的视频,请将“Targeting Cookies”的 Cookie 首选项设置为“是”。

2021年2月9日 类别 技术 | 12 分 阅读
涵盖的主题