粒子特效与UI的排序
using UnityEngine;

[AddComponentMenu("UI/UIOrder")]
public class UIOrder : MonoBehaviour {

    [SerializeField]
    private int _sortingOrder = 0;
    public int sortingOrder
    {
        get {
            return _sortingOrder;
        }
        set {
            if (_sortingOrder != value)
            {
                _sortingOrder = value;
                Refresh();
            }
        }
    }

    private Canvas _canvas = null;
    public Canvas canvas
    {
        get {
            if (_canvas == null)
            {
                _canvas = gameObject.GetComponent<Canvas>();
                if (_canvas == null)
                    _canvas = gameObject.AddComponent<Canvas>();
                _canvas.hideFlags = HideFlags.NotEditable;
            }
            return _canvas;
        }
    }

    public void Refresh()
    {
        canvas.overrideSorting = true;
        canvas.sortingOrder = _sortingOrder;
        foreach(ParticleSystemRenderer particale in transform.GetComponentsInChildren<ParticleSystemRenderer>())
        {
            particale.sortingOrder = _sortingOrder;
        }
    }

#if UNITY_EDITOR
    private void OnValidate()
    {
        Refresh();
    }

    private void Reset()
    {
        Refresh();
    }
#endif
}



Canvas下的3个物体,分别挂上脚本,设置sortingOrder分别为0,1,2,这样粒子就被两张图片夹在中间了。

图片.png

图片.png



首页 我的博客
粤ICP备17103704号