因为个人制作的奇葩游戏2D游戏是用Sprite当作角色和物体,然而Unity里不应该使用带透视的相机来渲染Sprite,因为会2个Sprite距离太近会出现闪烁,但是我就是想保留透视,同时使用Sprite,于是想了几个方法。
在Unity中制作2D游戏,前后遮挡关系总是让我很头疼。在PS里面有图层的概念,上面一层永远在下面一层的上面。然而Unity对于Sprite的渲染顺序很奇怪,是相机当前位置,到Sprite中心点的直线距离。距离越近,就越后渲染。看似没什么问题,但是因为是相机的当前位置,所以当2个Sprite相隔太近就会出现闪烁的现象,就像2个Cube交叉放在一起会出现闪烁一样,因为2个Sprite到相机的距离太接近了,导致Unity不知道谁前谁后。
例如我自己做的一个奇葩项目,斜45度的一个2D游戏,角色应该在宝石前面,现在看起来是正常的
侧面看是这样的
然而摄相机转到一定角度就会这样
有人会问,2D游戏相机不会转到这里啊,确实,但是因为我想保留一些透视的感觉,所以相机并没有调成正交视角,2个Sprite距离太近,到屏幕边缘的时候还是会错位。
这里,屏幕边缘的地方还是会错位
于是我就想能否手动指定Unity的渲染顺序,这里有2种方法。
1.多Camera分层渲染法
在Camera组件里面有Culling Mask一栏属性,这里是选择此相机渲染的Layers层。
此外还要在Clear Flags属性中选择Depth Only,即只渲染Culling Mask里选择的Layers层。
这样这个相机就只会显示出这一Layers层的物体,然后我们注意到Camera还有一个Depth的属性,用这个属性就可以控制多个摄影机渲染的先后次序了,Depth数字越小,渲染的次序就越前,即显示在后面。