Unity引擎中精灵图(Sprite)显示顺序详解
Unity引擎中精灵图(Sprite)显示顺序详解
在Unity开发中,正确理解精灵图(Sprite)的显示顺序对于创建高质量的游戏画面至关重要。本文将详细介绍Unity中控制精灵图显示顺序的三个关键因素:Sorting Layer、Order in Layer和Transparency Sort Mode,并通过具体示例帮助开发者掌握这些概念。
判断顺序
在Unity中,当多张精灵图在同一平面上重叠时,会根据以下策略判断上下关系:
- 比较Sprite Renderer组件的Sorting Layer,排列越前的Sorting Layer,显示在越下层;
- 若多张精灵图的Sorting Layer一致,则继续比较同样是Sprite Renderer组件的 Order in Layer,默认值是0,数值越小,显示在越下层;
- 若以上两项都一致,最后根据Transparency Sort Mode的策略来判断。
Sorting Layer
Sorting Layer列表中,越后面的Layer显示在越上层。有两种方式可以设置Sorting Layer:
- 通过 Edit -> Project Settings -> Tags and Layer
- 通过某些组件(如Sprite Render、Mesh Renderer)的下拉菜单中点击添加按钮
Transparency Sort Mode
Transparency Sort Mode(透明度排序模式)用于处理半透明物体的渲染顺序,因为如果不正确地排序这些物体,可能会导致错误的渲染结果。例如,一个远离摄像机的半透明物体可能会错误地渲染在一个靠近摄像机的半透明物体之上,虽然不能用于处理完全不透明物体,但它可以用于处理精灵图的渲染顺序。
它有四种模式,这四种模式的作用分别是:
- Default:根据摄像机模式自动选择,若摄像机是透视模式,则使用Perspective,若摄像机是正交模式,则使用Orthographic。
- Perspective:基于物体距离摄像机的距离来排序,距离更近的物体会被先渲染。
- Orthographic:基于物体在摄像机视图的深度(Z轴)来排序,深度较小的物体会被先渲染。
- Custom Axis:基于物体在自定义轴向上的位置来排序,位置较小的物体会被先渲染。
Custom Axis
这个选项是基于物体与物体之间锚点(Pivot)或物体中心(Center)的位置来比较的,比较的则是笛卡尔坐标系的某个轴(简单点说就是unity中物体xyz的三个轴)。
举个例子,现在摄像机正对着z轴正方向,当Transparency Sort Axis设定z=1,xy均为0,则GameObject所处的z坐标越大,渲染优先级越高(即越先渲染,即越在下层)。
再举个例子,当两个GameObject以y轴确认前后关系时,则Transparency Sort Axis设定y=1,xz均为0,会出现以下效果。青蛙越过树后,青蛙的y坐标大于树的y坐标,那么会先渲染青蛙再渲染树木,青蛙则被树木挡在后边。
拓展
Custom Axis是通过物体的锚点(Pivot)或物体中心(Center)的某个轴坐标来判断精灵图前后关系的,在Sprite Renderer中,可以选择是基于Pivot还是Center。
可选Pivot或Center
若选择Center,那么Unity就根据自动计算出的中心点来比较精灵图之间的前后关系。还是上面青蛙的例子,若树木和青蛙都选择Center,则会出现以下效果。
在青蛙的中心点穿越树木的中心点后,青蛙精灵图才置于树木之后,非常别扭
而当选择Pivot时,则根据锚点(可在精灵图资产的Sprite Editor中自定义设置)的位置来判断,如上面的树木与青蛙,都应该将锚点设置在精灵图下方根部。