查看原文
其他

Unity独门秘籍,助你打造完美2D像素游戏

2016-01-11 Unity官方平台
如何制作一个看起来很棒的像素艺术游戏呢?这是我们经常会产生的疑问。完全使用Unity的默认设置制作出来的像素游戏会显得很糟糕。不过,只要巧妙运用Unity的最新版本功能,也可以将像素游戏渲染得更加漂亮。请阅读下面的详细说明,了解那些该做与不该做的事。
左边是未经校准的摄像机渲染的图像,右边是校准过的图像
独门秘籍
可以使你的像素化游戏看起来不错的秘技就是:确保Sprite渲染在一个正确的像素边界上。换言之,确保Sprite的每个像素都被渲染到对应的一个(或任意整数倍个)屏幕像素上。具体的技巧就是调整摄像机的Orthographic Size。
基础知识:什么是Orthographic Size?
一个Orthographic Camera的Orthographic Size, 代表在世界空间下,屏幕高度由多少个单元格组成。因此,当高度为1080像素,Orthographic Size为5时,每个世界空间单元将占据108个像素(1080 / (5*2))。5*2是因为Orthographic Size等于屏幕中心到顶部的距离。

所以,当Sprite的每单位像素(PPU)设置等于108时,它看起来会很棒。
实现完美像素的方法
要在实际项目中应用这个原则需要事前思考与计划。由于目标设备的物理分辨率是无法更改的,而且可供你选择的PPU(通过资产包变体(Asset Bundle Variant)的形式)也非常有限,所以,调整Orthographic Size 就是你唯一的选择。

更改正交尺寸会扩大或缩小世界空间的可视区域。这会直接影响你的代码,需要多加注意。以下是一个不同缩放场景下的对照表。
三大技巧

● 技巧1:加粗边框


对于小差异,简单的一条“粗边框”就足够了。根据你的游戏设计要求,与你参考屏幕尺寸相差正负几个百分比大小的区域都能用粗边框填充。
整体屏幕大小变大而美术资源尺寸保持不变。这只需改变底部和顶部的边框粗细即可轻松实现。

不过,当屏幕增大到一定尺寸时,粗边框就不适用了。

技巧2:增加美术资源分辨率

如果将初始参考屏幕设置为高度768、PPU 32,那在实际屏幕高度等于1080时,美术资源将会拉伸得比较难看。

上面的表格展示了对于目标高度1080时,从768开始一直到1536的3种缩放游戏的不同处理方式。Orthographics Size是最值得注意的数据。理想的情况是屏幕增大时正交尺寸保持不变。这将保证你的美术资源占据和屏幕空间相同比例的分辨率。

根据上表,使用一个PPU为48的替代Sprite将会创建一个比原先参考尺寸只缩小了6.25%的可视世界。这可以用粗边框方法来轻松处理。
Orthographics Size为11.25,屏幕高度为1080时 PPU 32 与 PPU 48的对比图。注意左侧糟糕的PPU 32 Sprite。右侧更改了颜色以更清楚得显示置换的资产变体。

使用Asset Bundle Variants可以在运行时置换Sprite 资源。点击以下链接,可查看Demo:

https://bitbucket.org/Unity-Technologies/2ddemos/branch/assetbundle

技巧3:对分正交尺寸

如果屏幕足够大,我们可以通过在Orthographic Size的计算中加入一个缩放因子来将你的Sprite放大2倍。以1440为例,我们可以继续使用PPU 32的Sprite,但orthographic size的计算公式改为(1440/(2*32)) * 0.5,最后得到11.25。

也就是说,每个世界空间单位将包含64个屏幕像素。这实际上就是告诉引擎将来自Sprite的32个像素渲染到屏幕上的64个像素去。这样整整放大两倍的效果不仅看起来不错,而且还能使世界空间比原先的参考设置只缩小6.25%。
* 现在PPU 32的Sprite渲染时放大了两倍,但依然看起来很棒。这技巧只在进行整数倍放大时才有效。
其他微调
这些“其它”设定也很重要。

● 对于Sprite:
- 确保Sprite使用的是无损压缩,即,真彩色(True Color)
- 关闭MipMapping Use Point sampling
- 使用点取样(Point Sampling)

● 在渲染质量设置(Render Quality Settings)中:
- 关闭各向异性过滤(Anisotropic Filtering)
- 关闭抗锯齿(Anti Aliasing)
(可选)通过创建一个使用Sprite/Default着色器的自定义材质,并附加到SpriteRenderer,勾选该着色器的Pixel snap属性。
实现细节
要实现上面提及的系统需要两个步骤。

1.创建一个简单的组件,根据屏幕高度计算摄像机的正交尺寸。
- 允许特定分辨率下可以进行重写,以便用户为该分辨率指定PPU设置。
- 计算要在场景启动时进行。

2.根据屏幕高度载入正确的资产包变体。要么载入默认包,要么载入与重写设定相对应的包。
PixelPerfect 组件

点击以下链接,查看演示这个方法的Demo:

https://bitbucket.org/Unity-Technologies/2ddemos/branch/PixelPerfect
已知问题

尽管对这些数字做了微调,但仍会有一些问题:


- 物理以及动画系统可能会将你的对象移动/旋转到一个不是很理想的位置或旋转角度。

- 单像素宽度的美术资产如果允许被任意旋转的话,渲染结果将看起来很糟。这是不可避免的,唯一的解决办法是:
a. 不要使用单像素美术资源;
b. 时刻确保它们是轴向对齐的。
结论
使用当前版本的Unity制作拥有完美像素的2D游戏是可行的。但是,如上所述,其中也存在一些影响和已知问题,但它们都是可以解决与克服的。复古风格游戏万岁!





点击“阅读原文”,关注UnIty中文官方社区,获取更多Unity技术文章!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存