如題,我們現(xiàn)在需要讓一個(gè)特效顯示在UI上,但是直接拖拽特效到canvas里和節(jié)點(diǎn)同級(jí)也沒(méi)有效果啊、

1
它明明有在運(yùn)行 也在ui 的前面了 為什么還是顯示不出來(lái)呢
其實(shí)是因?yàn)閷蛹?jí)的問(wèn)題導(dǎo)致的
這里的canvas order設(shè)置的是10

2
而特效的order還是默認(rèn)的值比我們的canvas order低
我們只需要獲取特效的renderer 然后在設(shè)置它的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("沒(méi)有在 "+ this.gameObject.name +" 找到父節(jié)點(diǎn)里的Canvas");
return;
}
order = rootCanvas.sortingOrder + 1;
renderArray = this.gameObject.GetComponentsInChildren<Renderer>();
if (renderArray == null || renderArray.Length == 0)
{
Debug.Log("沒(méi)有找到 " + 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設(shè)置完后就可以正常的顯示在ui上啦
3