面板在NGUI中隐藏和显示

时间:2013-02-07 05:22:42

标签: c# monodevelop unity3d ngui

我是NGUIunity 3d的新手。   我在ui根目录中有两个面板。它的名称为firstPanelsecondPanel。 secondPanel在场景中停用。在firstPanel我有很多按钮,一个是play按钮,即图像按钮。在点击play按钮时,firstPanel隐藏secondPanel显示。我会向{{1添加新脚本按钮和编写的代码

play

但我得到错误void OnClick(){ GameObject panel2 = GameObject.Find("secondPanel"); NGUITools.SetActive(panel2,true); GameObject panel1 = GameObject.Find("firstPanel"); NGUITools.SetActive(panel1,false); }  "NullReferenceException"我必须编辑哪个脚本,我该怎么做?请帮我解决这个问题     提前谢谢。

4 个答案:

答案 0 :(得分:8)

如果你的面板被命名为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);

}

答案 1 :(得分:3)

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()或每次单击按钮时使用它。

答案 2 :(得分:1)

我知道这个帖子已经过时了但是如果其他人在调用面板时遇到问题,你可以预制你的面板并使用NGUITools.AddChild来调用你的面板。它看起来像这样。

public GameObject parent;
public GameObject child;

void Spawn () {

NGUITools.AddChild (parent, child);

}

将您的UIRoot分配给父级(或者您想要添加面板的任何内容),并在编辑器中将您的面板分配给子级,然后全部设置!我希望这可以帮助某人,这是第一次使用NGUI时的常见问题。

快乐编码:)

答案 3 :(得分:0)

你不能使用GameObject.Find()来找到一个禁用的游戏对象,它会返回null;