【Unity基础】Unity中元素的层级排序

发布于:2025-07-16 ⋅ 阅读:(19) ⋅ 点赞:(0)

在这里插入图片描述

在Unity中,控制元素的层级排序(渲染顺序)是确保场景正确显示的关键。以下是常见的层级排序方式及其适用场景:


1. 通过GameObject的层级顺序(Sorting Layer/Order in Layer)

适用对象:2D精灵(SpriteRenderer)、UI元素(Canvas)、粒子系统等。

  • Sorting Layer
    Tags and Layers设置中创建自定义层级(如"Background", “Characters”, “UI”),将对象分配到不同层级。高层级永远显示在低层级之上
  • Order in Layer
    同一Sorting Layer内的对象通过此数值排序,数值越大越靠前
// 代码示例(SpriteRenderer)
GetComponent<SpriteRenderer>().sortingLayerName = "Characters";
GetComponent<SpriteRenderer>().sortingOrder = 10;

2. 通过Z轴坐标(3D场景)

适用对象:3D物体。
Unity默认根据摄像机视角的Z轴距离排序(透视投影时),或直接按Z轴值(正交投影时)。

  • 正方向:Z值越大离摄像机越远(可能被遮挡)。
  • 负方向:Z值越小离摄像机越远(取决于坐标系)。

3. UI元素的层级控制(Canvas)

适用对象:UGUI系统。

  • Canvas层级
    • Screen Space模式:通过Canvas的Sort Order属性控制画布层级,数值高的覆盖低的。
    • World Space模式:结合Sorting Layer和Order in Layer。
  • UI子物体顺序
    同一Canvas下,Hierarchy面板中的顺序决定渲染顺序(下方的物体后渲染,显示在上层)。
// 动态调整UI顺序
transform.SetAsLastSibling(); // 置顶
transform.SetSiblingIndex(1); // 指定位置

4. 渲染队列(Shader中的Queue)

适用对象:自定义Shader或材质,控制透明/不透明物体的渲染顺序。

  • 内置队列
    • Background (1000)
    • Geometry (2000, 默认)
    • AlphaTest (2450)
    • Transparent (3000, 从后到前渲染)
    • Overlay (4000)
  • 自定义队列
    在Shader中声明 Queue 值(如Queue = Geometry+100)。
// Shader示例
SubShader {
    Tags { "Queue" = "Transparent" }
    // ...
}

5. 摄像机深度(Camera Depth)

适用对象:多摄像机场景。

  • 在Camera设置中调整Depth值,数值高的摄像机后渲染,覆盖之前的画面。
  • 结合Clear Flags控制清除规则(如仅渲染UI的摄像机设为Depth Only)。

6. 粒子系统排序

适用对象:Particle System。

  • 通过Renderer模块设置Sorting LayerOrder in Layer
  • 可选Sort Mode(如按距离、深度等)。

7. 自定义排序(脚本控制)

适用场景:动态调整渲染顺序(如角色移动时改变层级)。

// 动态修改Sorting Order
void Update() {
    if (isMoving) {
        GetComponent<Renderer>().sortingOrder = 20;
    }
}

选择建议

  • 2D游戏:优先使用Sorting Layer + Order in Layer
  • UI系统:利用Canvas层级和Hierarchy顺序。
  • 3D场景:调整Z轴或Shader队列(透明物体用Transparent队列)。
  • 复杂场景:结合多种方式(如多摄像机+分层渲染)。

通过灵活组合这些方法,可以精准控制Unity中元素的显示层级。


网站公告

今日签到

点亮在社区的每一天
去签到