Unity自动隐藏面板

时间:2018-06-11 16:46:52

标签: c# unity3d nullreferenceexception

我正在使用Unity构建AR应用程序。

它具有登录/注册场景,允许用户登录或注册应用程序。

对于错误处理和向用户显示错误消息(例如,无效的电子邮件),我只需创建一个带有一些文本的面板来显示错误消息。此面板上还有一个按钮用于关闭消息并再次隐藏错误面板。

此面板覆盖在主UI面板上,其上包含输入字段。

显然,错误面板应该在加载场景时隐藏,只有在出现错误信息时才会显示。

但我无法在 Awake()上设置此面板的状态。 我不断收到错误 NullReferenceException:对象引用未设置为对象的实例。

我已将脚本设置为错误面板,并将Panel对象添加到Inspector中的脚本中。附图供参考。

下面是我的缩写代码(使用为简洁而省略)。 我尝试在 Start() Awake()中设置它,但两者都抛出相同的错误。 如果我在 Awake()中设置 errorPanel.gameObject.SetActive( true ); - 则不会引发任何错误。它仅在设置为 false

时抛出
Any

enter image description here

1 个答案:

答案 0 :(得分:1)

  

如果我在<div contenteditable id="a">Please click here and hit TAB, the word before cursor should be replaced by something else.</div>设置errorPanel.gameObject.SetActive(true); - 没有   错误被抛出。它仅在设置为false时抛出。

这可能发生了什么:

您的Awake()脚本附加到另一个 GameObject。调用RegisterScene时,将返回您的面板。当您使用GameObject.FindGameObjectWithTag("errorPanel")将其设置为false时,会将其停用。

errorPanel.gameObject.SetActive(false)函数将在其他附加的游戏对象上调用,该游戏对象也会调用Awake,但这次会返回GameObject.FindGameObjectWithTag("errorPanel")。它将返回null,因为null函数无法找到取消激活的对象。因为它是GameObject.FindXXX,所以调用null会抛出该异常。

您有两种选择:

1 。从其他GameObject中找出并删除脚本:

works for a textarea

2 。如果您需要查找非活动的游戏对象,请使用我的enter image description here函数查找取消激活的游戏对象。