这里主要介绍的是ngui 工具面板里面的显示和隐藏,供大家来学习交流。
本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章
问题:
Sona
我刚开始学NGUI和Unity。在UI root里有两个面板,分别叫做firstPanel和secondPanel。secondPanel在场景里是隐藏的。firstPanel里有许多按钮,其中一个是play按钮,是个图像按钮。当我点击play按钮的时候,firstPanel应该隐藏,secondPanel应该显示。我给play按钮添加了一个新脚本,并在里面写了代码:
- void OnClick(){
- GameObject panel2 = GameObject.Find("secondPanel");
- NGUITools.SetActive(panel2,true);
- GameObject panel1 = GameObject.Find("firstPanel");
- NGUITools.SetActive(panel1,false);
- }
答案:
onevcat
如果你的面板命名的是 Panel1 和Panel2, 你将不能通过GameObject.Find("secondPanel") 和 GameObject.Find("firstPanel")找到它们。如果"Panel1" 和"Panel2"是游戏场景里唯一的名称(没有其他的Panel1 或者Panel2),那么你可以尝试:
- void OnClick(){
- GameObject panel2 = GameObject.Find("Panel2");
- NGUITools.SetActive(panel2,true);
- GameObject panel1 = GameObject.Find("Panel1");
- NGUITools.SetActive(panel1,false);
- }
GameObject.Find("Something") 不能找到任何禁用的游戏对象,所以你不能用这种方式使用。你可以试试在按钮代码添加映射:
1
2
public GameObject pannel1 = null;
public GameObject pannel2 = null;
并在场景编辑窗口中将它们设置到相应的面板。
另一种方法,首先在场景中保证两个面板都是活跃的,然后在按钮添加这样的脚本:
- private GameObject panel1 = null;
- private GameObject panel2 = null;
- void Start()
- {
- panel1 = GameObject.Find("Panel1");
- panel2 = GameObject.Find("Panel2");
- }
- void OnClick()
- {
- panel2.SetActiveRecursively(true);
- panel1.SetActiveRecursively(false);
- }