Version: 2021.1
Creating a 2D game
精灵

2D 排序

概述

Unity 根据优先级顺序对渲染器进行排序,而优先级顺序取决于渲染器的类型和用途。可以通过渲染队列指定渲染器的渲染顺序。通常有两个主要队列:不透明队列透明队列。2D 渲染器主要位于透明队列中,包括精灵渲染器 (Sprite Renderer)瓦片地图渲染器 (Tilemap Renderer)精灵形状渲染器 (Sprite Shape Renderer) 类型。

透明队列按优先级排序

透明队列中的 2D 渲染器通常遵循以下优先级顺序:

  1. 排序图层和图层中的顺序
  2. 指定渲染队列
  3. 与摄像机的距离
  4. 排序组
  5. 材质/着色器
  6. 多个渲染器具有相同的排序优先级时,将由仲裁程序决定优先级。

还有其他一些因素可能导致排序顺序与常规优先级顺序不同。这些因素因项目而异。

排序图层和图层中的顺序

可以通过 Inspector 窗口或通过 Unity Scripting API 将排序图层 (Sorting Layer)图层中的顺序 (Order in Layer)(位于渲染器的 Property 设置中)用于所有 2D 渲染器。为确定渲染器在渲染队列中的优先级,可以将渲染器设置为现有的排序图层,或创建一个新排序图层。更改 Order in Layer 的值,即可设置渲染器在同一排序图层中的其他渲染器之间的优先级。

指定渲染队列

可以在渲染器材质设置中或渲染器材质的着色器设置中指定渲染器的渲染队列类型。这对于使用不同材质的渲染器的分组和排序很有用。请参阅关于 ShaderLab:SubShader 标签的文档以了解更多详细信息。

与摄像机的距离

Camera 组件根据其 Projection 设置对渲染器进行排序。两个选项分别是 PerspectiveOrthographic

透视 (Perspective)

在此模式下,渲染器的排序距离是渲染器与摄像机位置的直接距离。

正交 (Orthographic)

渲染器的排序距离是渲染器位置与摄像机沿着摄像机视图方向的距离。对于默认的 2D 设置,此方向是指沿着 (0, 0, 1) 轴。

将 Camera 组件设置为 PerspectiveOrthographic 时,Unity 会自动设置摄像机的 TransparencySortMode 以匹配所选的模式。可以通过两种方式手动设置透明排序模式 (Transparency Sort Mode):

  • 打开 Project Settings,选择 Graphics,然后在 Camera Settings 下设置 Transparent Sort Mode
  • 通过脚本 API 设置摄像机的 TransparencySortMode

摄像机 Transparency Sort Mode 设置位于 Project Settings 中的 Graphics 类别下(主菜单:Edit > Project Settings > Graphics)。当此设置为 Default 时,Camera 组件的 Projection 设置将具有更高优先级。当此设置为 Default 以外的选项时,Camera 组件的 Projection 设置保持不变,但摄像机的 Transparency Sort Mode 将更改为该选项。

通过 Project Settings 和脚本 API 提供的另一个选项是自定义轴 (Custom Axis) 排序模式

自定义轴排序模式

选择此模式可根据 Project Settings(主菜单:Edit > Projecting Settings > Graphics > Transparency Sort Axis)中设置的渲染器在自定义轴上的距离对渲染器进行排序。此模式通常用于具有等距瓦片地图 (Isometric Tilemaps) 的项目中,以便在瓦片地图 (Tilemap) 上正确排序和渲染瓦片精灵 (Tile Sprites)。请参阅创建等距瓦片地图以了解更多信息。

精灵排序点

默认情况下,精灵的 Sort Point(排序点)设置为其 Center,因此 Unity 会测量摄像机的变换位置与精灵的中心之间的距离,以确定它们在排序过程中的渲染顺序。另一种选项是将精灵的 Sort Point 设置为世界空间中的 Pivot 位置。为此,请在精灵的 Sprite Renderer 属性设置中选择 Pivot 选项,然后在 Sprite Editor 中编辑精灵的 Pivot 位置。

排序组

排序组 (Sorting Group) 是一个组件,它将具有共同根的渲染器分组到一起以进行排序。同一排序组中的所有渲染器具有相同的排序图层 (Sorting Layer)、图层中的顺序 (Order in Layer)与摄像机的距离 (Distance to Camera)。请参阅有关排序组 (Sorting Group) 组件及其相关设置的文档以了解更多详细信息。

材质/着色器

Unity 将具有相同材质设置的渲染器排序到一起,以获得更高效的渲染性能,例如在进行动态批处理时。

仲裁程序

当多个渲染器具有相同的排序优先级时,由仲裁程序决定 Unity 将渲染器放置在渲染队列中的顺序。因为这是您无法控制的内部过程,所以您应该使用排序选项(例如 Sorting LayersSorting Groups)确保所有渲染器具有不同的排序优先级。

Creating a 2D game
精灵