Unity2D 渲染层级

本文介绍了Unity2D中的渲染层级概念,包括Camera的Depth、Sorting Layer和Order in Layer。通过设定这些参数,可以控制物体的前后显示顺序。例如,将Player层设在Default层之上,使Player层的物体显示在Default层物体上方。通常,设计流程包括为Camera划分Culling Mask,设置Sorting Layer,然后调整Order in Layer。文中用实例说明了如何使用这些技巧来实现特定的渲染效果,如主Camera显示背景和角色,而UI Camera用于显示UI元素。

Unity 渲染层级

  • 渲染效果:谁被在下面,谁在上面。

-渲染层级

  1. camera(摄像机)
    Depth(值越高物体越在上面)

  2. 在同一个camera中
    sorting layer(越在下面的sorting layer 越在上面)
    player 层物体比default层 显示在上方
    例如:player 层物体显示在default层物体的上面
  3. 最后 order in layer(谁的数值大,谁在上方)
  4. 一般设计思路:
    第一步、 对camera进行分层(l利用Culling Mask 属性设置显示的内容的分类)

    第二步、设置同一个camera中sort layer
    第三步、设置sort layer中的order in layer

  5. 分析上图设计思路:
    1、利用main camera显示后面的游戏物体(小猪,小鸟,背景,弹弓)
    将小猪,小鸟,弹弓属性sort layer设置成player ,背景设置成default
    左弹弓的order in layer的值 比小鸟的order in layer值大。
    2、UI 新建camera 显示UI. UI背景Canvas的属性sort layer设置成default。
    粒子系统的属性 sort layer 设置成player。
    结果如图:这里写图片描述

Unity2D 中,层级排序主要依赖于 **Sorting Layer(排序层)** 和 **Order in Layer(层内排序)** 两种机制,它们共同决定了场景中不同精灵(Sprite)的渲染顺序。以下是具体方法和实现方式: ### 1. 使用 Sorting Layer(排序层) Sorting Layer 是 Unity2D 中用于定义不同对象组之间渲染顺序的核心机制。默认情况下,Unity 提供一个名为 `Default` 的排序层,但可以通过编辑器添加更多层。每个排序层具有不同的优先级,层级越靠上的层越晚渲染,因此会显示在更前面。 - 创建新的排序层可以通过 `Tags and Layers` 窗口完成,之后可以在 `SpriteRenderer` 组件中选择相应的层。 - 排序层之间的渲染顺序可以通过拖动调整层级顺序来控制,层级越靠下的层优先级越低,会被上层遮盖[^3]。 例如,可以创建名为 `Background`、`Map` 和 `Character` 的排序层,分别用于背景、地图瓦片和角色,确保角色始终显示在地图和背景之上[^4]。 ### 2. 使用 Order in Layer(层内排序) 在同一 Sorting Layer 内部,Unity2D 通过 `Order in Layer` 属性对精灵进行进一步排序。该属性是一个整数,数值越大,精灵渲染得越靠前。这在需要精细控制同一层内多个对象显示顺序时非常有用。 - 例如,在 `Character` 排序层中,可以让主角的 `Order in Layer` 值大于敌人,从而确保主角始终显示在敌人前面[^1]。 ### 3. 自定义 Y 轴排序 Unity 默认使用 Z 轴作为排序依据,但在一些 2D 游戏(如 DNF)中,开发者更倾向于使用 Y 轴作为排序标准。可以通过启用 Unity 的 `Sorting Group` 组件或自定义脚本实现基于 Y 轴的动态排序。 - 一种常见做法是编写脚本,根据对象的 Y 坐标实时更新 `Order in Layer` 值,从而实现类似 DNF 的“Y 轴小的延迟渲染,显示在 Y 轴大的层级上方”的效果[^2]。 ```csharp using UnityEngine; public class YSorter : MonoBehaviour { private SpriteRenderer spriteRenderer; void Awake() { spriteRenderer = GetComponent<SpriteRenderer>(); } void LateUpdate() { spriteRenderer.sortingOrder = Mathf.RoundToInt(transform.position.y * -100f); } } ``` ### 4. 使用 Sorting Group(排序组) 当多个精灵组成一个整体(如角色和其装备)时,可以使用 `Sorting Group` 组件,确保整个组共享相同的排序层和层内顺序,避免因单个精灵设置不同而导致渲染顺序混乱。 - `Sorting Group` 会强制其下的所有子精灵使用相同的 `Sorting Layer` 和 `Order in Layer` 设置,从而统一渲染顺序[^1]。 ### 5. 注意事项与限制 - Unity2D 的 Sorting Layer 数量虽然可以通过配置扩展,但仍然存在一定的限制。如果游戏中需要大量不同的排序层级,可能会面临资源不足的问题。 - 同一层级内的微调必须依赖 `Order in Layer` 或脚本控制,Sorting Layer 本身无法实现层内精细排序。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值