[Unity][NGUI]禁用UIRoot的子物体自动改变物体Layer

56 篇文章 0 订阅

 

 

NGUI的UIPanel.cs

void UpdateLayers ()//line 1598 

UIRoot的子物体会自动修改 为 UIRoot 的Layer一样的层级,在这里修改逻辑。

最好是 通过gameObject.tag进行逻辑判断。

...
public class UIPanel : UIRect
{
...
void UpdateLayers ()
	{
		// Always move widgets to the panel's layer
		if (mLayer != cachedGameObject.layer)
		{
			mLayer = mGo.layer;

			for (int i = 0, imax = widgets.Count; i < imax; ++i)
			{
				UIWidget w = widgets[i];
				if (w && w.parent == this) w.gameObject.layer = mLayer;
			}

			ResetAnchors();

			for (int i = 0; i < drawCalls.Count; ++i)
				drawCalls[i].gameObject.layer = mLayer;
		}
...
if(this.gameObject.Tag == "Test")
{
			ObjectCommon.changAllChildLayer(this.transform, 8);//
}

...
	}

...
}

 

如果把2D和3D放在一个 UIROOT 下面,最好是 把3DUI 的物体 添加 NGUIPlane组件。

因为修改NGUI的UIPanel.cs的UpdateLayers的逻辑,没有NGUIPlane组件,就不会执行。

 

public class ObjectCommon 
...
public static void changAllChildLayer(Transform trans,int layer)
	{
		Transform[] allTrans = trans.GetComponentsInChildren<Transform>(true);
		for (int i = 0; i < allTrans.Length; i++)
		{
			//Debug.Log("所有该脚本的物体下的子物体和孙物体名称:" + allTrans[i].gameObject.name);
			Debug.Log("transformList[" + i + "]" + allTrans[i].name + "/" + allTrans[i].gameObject.layer);
			allTrans[i].gameObject.layer = layer;
		}
	}
...

 

参考资料:

1.

Unity 遍历子物体与孙物体

2.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值