我是NGUI和unity 3d的新手。我在一个ui根中有两个面板。它被命名为firstPanel和secondPanel。secondPanel在场景中被停用。在firstPanel中,我有这么多的按钮,其中一个是play按钮,即图像按钮。点击play按钮时,firstPanel应该得到隐藏,secondPanel应该向显示.I添加一个新脚本到play按钮并在其中编写代码
void OnClick(){
GameObject panel2 = GameObject.Find("secondPanel");
NGUITools.SetActive(panel2,true);
GameObject panel1 = GameObject.Find("firstPanel");
NGUITools.SetActive(panel1,false);
}但是我得到了Error:"NullReferenceException",我必须在哪个ngui脚本中进行编辑,以及如何进行编辑?请帮我解决这个问题,谢谢。
发布于 2013-02-07 11:28:48
如果您的面板名为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);
}发布于 2013-03-25 07:12:26
GameObject.Find(“某某物”)找不到任何禁用的游戏对象,所以您不能这样使用。您可以尝试在按钮代码中添加反射:
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(string )函数在Unity3D中效率不高,所以不要尝试在Update()或每次单击按钮时使用它。
发布于 2014-09-28 12:13:55
我知道这个线程是旧的,但是如果其他人在面板处于非活动状态时调用面板时出现问题,您可以预定义面板并使用NGUITools.AddChild调用面板。看起来会是这样的。
public GameObject parent;
public GameObject child;
void Spawn () {
NGUITools.AddChild (parent, child);
}将您的UIRoot分配给父(或您想要向其添加面板的任何内容),并在编辑器中将您的面板分配给子面板,您就都设置好了!我希望这能帮到别人,这是第一次和NGUI一起工作时的一个常见问题。
快乐编码:)
https://stackoverflow.com/questions/14744155
复制相似问题