如题,我们现在需要让一个特效显示在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
网友评论