Unity___粒子特效与UI的排序

问题#

有多个UI,身上都有粒子特效时,为了防止不同粒子之间的冲突,我们需要决定这些粒子排序。

大致步骤:可以利用Canvas组件去修改UI的排序,再通过脚本控制UI子物体粒子特效的排序。

如下图,通过脚本中sortingOrder变量排序,值越大,越靠前

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


[AddComponentMenu("UI/UIOrder")]

public class UIOrder : MonoBehaviour
{
    [SerializeField]
    private int _sortingOrder = 0;
    public int sortingOrder
    {
        get
        {
            return _sortingOrder;
        }
        set
        {
            if (value != _sortingOrder)
            {
                _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 particle in transform.GetComponentsInChildren<ParticleSystemRenderer>(true))
        {
           
                Debug.Log(this.gameObject.name);
            
            particle.sortingOrder = _sortingOrder;
        }
    }
#if UNITY_EDITOR
    private void OnValidate()
    {
        Refresh();
    }
    private void Reset()
    {
        Refresh();
    }
#endif
}

Quote#

宣雨松:Unity3D游戏开发(第二版)P145

posted @   lxp_blog  阅读(567)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
主题色彩