Unity SortingGroup使用记录

2023/12 16 13:12

如果一个Spine有多个层,多个Spine放在一起,需要给每个Spine身上挂一个SortingGroup,以保证其渲染层次是正确的

如果一个Spine的骨骼下,挂了多个Spine,这个父级Spine身上挂了SortingGroup,则其子节点的渲染次序,是按节点的树形结构进行渲染,而非Z值


SortingGroup在2D项目非常重要,他“要求”此节点下的物件打成一组(视为一个整体)渲染成为一层
在SortingGroup内部,可以使用SortingLayer和OrderInLayer进行排序

SortingLayer的优先级大于OrderInLayer的优先级

SortingLayer 可以理解为 – 地表 、 人物、HUD层;每层都会严格区分渲染层级

OrderInLayer 可以理解为,HUD层,每个HUD需要内部进行一个渲染层次排序

每个HUD,都需要使用一个SortingGroup,以保证每个玩家的HUD是一次性绘制完的,在SortingGroup上面,设置好OrderInLayer即可

using UnityEngine;

[RequireComponent(typeof(MeshRenderer))]
[ExecuteInEditMode]
public class TextMeshSort : MonoBehaviour
{
    public string LayerName = "Layer1";
    public int mSortingOrder = 99;

    void Update()
    {
        var m = GetComponent<MeshRenderer>();
        if (m != null)
        {
            var mSortingLayerId = SortingLayer.NameToID(LayerName);
            m.sortingLayerID = mSortingLayerId;
            m.sortingOrder = mSortingOrder;
        }
    }
}