用代码设置UGUI渲染无非和三个API有关:
1.SetAsFirstSibling();
2.SetAsLastSibling();
3.SetSiblingIndex(n)
SetAsFirstSibling()是设置为最先渲染的,即会被后渲染的挡住。
SetAsLastSibling();是设置为最后渲染的,即会挡住比他先渲染的
SetSiblingIndex(n)是设置层级,从0开始到childcount -1
当n为0时,其效果与SetAsFirstSibling();相同
但是当层级小于0时,其效果与SetAsLastSibling()一致
当层级为大于等于transform.parent.childCount - 1时,其效果与SetAsLastSibling一致
代码太多不能一次性截图 复制 了一下 下面注释掉的代码是针对于 2D游戏中ICON的渲染先后顺序做的处理
SpriteRenderer 组件 对于渲染 还有一个组件 Sorting Group 但是不建议使用 基本来说使用一次增加Draw Call
/// <summary>
/// 修改UI背景图的层级
/// *******背景图和显示图层必须在同意级别**********
/// </summary>
/// <param name="Trans_Background">背景图</param>
/// <param name="Trans_Show">要显示的图层</param>
static void ChangeUI_Layer_Method (Transform Trans_Background, Transform Trans_Show)
{
if (Trans_Background != null && Trans_Show != null)
{
//1、获取要显示的图层信息
int Int_ShowLayer = Trans_Show.GetSiblingIndex();
Debug.Log("要显示的图层是:" + Int_ShowLayer);
//2、获取背景图层信息
int Int_BackgroundLayer = Trans_Background.GetSiblingIndex();
Debug.Log("背景图的图层是:" + Int_BackgroundLayer);
//3、修改背景图的层级
if (Int_ShowLayer == 0)
{
Trans_Background.SetAsFirstSibling();
}
else
{
//4、判断背景图和要显示的图层关系
if (Int_ShowLayer < Int_BackgroundLayer)
{
Trans_Background.SetSiblingIndex(Int_ShowLayer);
}
else
{
Trans_Background.SetSiblingIndex(Int_ShowLayer - 1);
}
}
}
}
指的是这里 SpriteRenderer 组件 提示需要在Update 理调用一下
/* static float scale = 1000;
protected static void LinkYwithOrderinlayer()
{
//chartransform为角色的transform组件
float yPos = chartransform.transform.position.y;
SpriteRenderer spriterenderer = chartransform.GetComponent<SpriteRenderer>();
//spriterenderer为角色的Sprite Renderer组件
//通过改变sortingorder来确定gameobject在sortinglayer中的order in layer
//因为y轴越大层级越靠后,所以给结果前加一个负数
//scale用来扩大y轴数据映射在层级上的影响,根据游戏中实际使用的素材尺度来确定,取100 1000都可以
spriterenderer.sortingOrder = 900;//-Mathf.RoundToInt(yPos * scale);//
}*/