NGUI中的面板显示和隐藏

我刚开始学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);

}

但是我遇到了这个错误:"NullReferenceException"。我需要NGUI的哪个脚本里编辑,怎么编辑呢?请帮助我解决这个问题,先谢谢了。

阅读 10k
2 个回答

@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);

}

@Nicolas Dai:
GameObject.Find("Something") 不能找到任何禁用的游戏对象,所以你不能用这种方式使用。你可以试试在按钮代码添加映射:

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);
}

GameObject.Find(字符串名称) 函数在Unity3D中并不是很有效,所以不要试着在Update(),或者每次点击按钮时用它。

最好不要用GameObject.Find 方法
你可以创建1个contoller脚本拖到 ROOT节点上
然后再脚本里声明
public GameObject Panel1 和Panle2
public UIevenListen btnPlay
然后再Play按钮上添加UIEventListen脚本(NGUI自带的)
在把这3个对象拖到脚本上
在start 方法中写 btnPlay.onClick = this.Play

void Play(GameObject go)
{
//在这里写你控制隐藏 显示
NGUITools.SetActive(panel2,true);
}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Stack Overflow 翻译
子站问答
访问
宣传栏