You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity 2D层级控制:实现窗口与块的特定显示层级逻辑

实现思路与代码方案

要实现「窗口外Block在所有窗口下方,窗口内Block在所属窗口上方」的层级逻辑,核心是通过**Sorting Layer(排序层)**结合动态脚本判断来控制Sprite Renderer的显示层级,具体步骤如下:

1. 配置排序层

在Unity编辑器中创建3个排序层,层级优先级从低到高:

  • Block_Bottom:用于所有不在窗口内的Block
  • Window_Layer:所有Window的专属层级
  • Block_Top:用于窗口内的Block

配置路径:Edit > Project Settings > Tags and Layers > Sorting Layers,拖拽调整层级顺序确保Block_Bottom < Window_Layer < Block_Top。

2. 给Block挂载层级控制脚本

创建如下C#脚本,挂载到所有Block预制体上,用于动态判断Block是否处于Window内,并切换对应的排序层:

using UnityEngine;

public class BlockLayerManager : MonoBehaviour
{
    private SpriteRenderer _sr;
    [Header("排序层配置")]
    public SortingLayer bottomLayer; // 赋值为Block_Bottom
    public SortingLayer topLayer;    // 赋值为Block_Top

    void Awake()
    {
        _sr = GetComponent<SpriteRenderer>();
        UpdateBlockLayer();
    }

    // 当父物体变化时自动更新层级(比如用户拖拽Block进/出窗口)
    void OnTransformParentChanged()
    {
        UpdateBlockLayer();
    }

    void UpdateBlockLayer()
    {
        // 判断当前Block是否是Window的子物体(这里假设Window有专属脚本Window.cs)
        bool isInsideWindow = transform.parent != null && transform.parent.GetComponent<Window>() != null;
        
        // 切换排序层
        _sr.sortingLayerID = isInsideWindow ? topLayer.id : bottomLayer.id;

        // 可选:让窗口内的Block始终在所属Window上方(结合Order in Layer)
        if (isInsideWindow)
        {
            SpriteRenderer windowSr = transform.parent.GetComponent<SpriteRenderer>();
            _sr.sortingOrder = windowSr.sortingOrder + 1;
        }
        else
        {
            _sr.sortingOrder = 0;
        }
    }
}

3. 配置Window的层级

给所有Window的Sprite Renderer设置:

  • Sorting Layer:Window_Layer
  • Sorting Order:可根据需求设置(比如按创建顺序递增,确保后创建的Window显示在前面)

关键说明

  • 如果不用专属脚本判断Window,也可以给Window添加Window标签,将判断逻辑改为transform.parent != null && transform.parent.CompareTag("Window")
  • 若场景中有大量Block,可考虑将OnTransformParentChanged替换为批量检测逻辑(比如每帧检测或用户操作触发),减少性能消耗

内容的提问来源于stack exchange,提问作者Jaimin Vashi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 02:08:19