Version: 2023.1
Creating a 2D game
Work with sprites

2D 排序

概述

Unity sorts Renderers according to a priority order that depends on their types and usages. You can specify the render order of Renderers through their Render Queue. In general, there are two main queues: the Opaque queue and the Transparent queue. 2D Renderers are mainly within the Transparent queue, and include the Sprite Renderer, Tilemap Renderer, and Sprite Shape Renderer types.

透明队列按优先级排序

透明队列中的 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) 排序模式

自定义轴排序模式

Select this mode to sort Renderers based on their distance along the custom axis you set in the Project settings (main menu: Edit > Project Settings > Graphics > Transparency Sort Axis). This is commonly used in projects with Isometric Tilemaps to sort and render the Tile Sprites correctly on the Tilemap. Refer to Creating an Isometric Tilemap for further information.

精灵排序点

默认情况下,精灵的 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
Work with sprites