Unity 在让特效显示在UI上

如题,我们现在需要让一个特效显示在UI上,但是直接拖拽特效到canvas里和节点同级也没有效果啊、


1

它明明有在运行 也在ui 的前面了 为什么还是显示不出来呢

其实是因为层级的问题导致的
这里的canvas order设置的是10


2

而特效的order还是默认的值比我们的canvas order低
我们只需要获取特效的renderer 然后在设置它的order = canvas的order + 1就可以显示啦

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

public class SetOrder : MonoBehaviour
{
    public int order = 0;
    int lastorder = 0;

    [SerializeField]
    Canvas rootCanvas;
    Renderer[] renderArray;

    void Start()
    {
        rootCanvas = this.gameObject.GetComponentInParent();
        if (rootCanvas == null)
        {
            Debug.LogError("没有在 "+ this.gameObject.name +" 找到父节点里的Canvas");
            return;
        }   
        
        order = rootCanvas.sortingOrder + 1;

        renderArray = this.gameObject.GetComponentsInChildren();
        if (renderArray == null || renderArray.Length == 0)
        {
            Debug.Log("没有找到 " + this.gameObject.name + " 下的Renderer");
            return ;
        }

        int len = renderArray.Length;
        for (int i = 0; i < len; i++)
            renderArray[i].sortingOrder = order;

        lastorder = renderArray[0].sortingOrder;
    }

    void Update()
    {
        if (lastorder != order)
        {
            int len = renderArray.Length;
            if (renderArray != null && len > 0)
            {
                for(int i = 0; i < len; i++)
                    renderArray[i].sortingOrder = order;

                lastorder = renderArray[0].sortingOrder;
            }
        }
    }
}

把特效的order设置完后就可以正常的显示在ui上啦
3

你可能感兴趣的:(Unity 在让特效显示在UI上)