美文网首页
Unity 在让特效显示在UI上

Unity 在让特效显示在UI上

作者: 摸狗 | 来源:发表于2020-03-11 15:33 被阅读0次

    如题,我们现在需要让一个特效显示在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<Canvas>();
            if (rootCanvas == null)
            {
                Debug.LogError("没有在 "+ this.gameObject.name +" 找到父节点里的Canvas");
                return;
            }   
            
            order = rootCanvas.sortingOrder + 1;
    
            renderArray = this.gameObject.GetComponentsInChildren<Renderer>();
            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上

          本文链接:https://www.haomeiwen.com/subject/pjpcjhtx.html