我正在使用Unity构建AR应用程序。
它具有登录/注册场景,允许用户登录或注册应用程序。
对于错误处理和向用户显示错误消息(例如,无效的电子邮件),我只需创建一个带有一些文本的面板来显示错误消息。此面板上还有一个按钮用于关闭消息并再次隐藏错误面板。
此面板覆盖在主UI面板上,其上包含输入字段。
显然,错误面板应该在加载场景时隐藏,只有在出现错误信息时才会显示。
但我无法在 Awake()上设置此面板的状态。 我不断收到错误 NullReferenceException:对象引用未设置为对象的实例。
我已将脚本设置为错误面板,并将Panel对象添加到Inspector中的脚本中。附图供参考。
下面是我的缩写代码(使用为简洁而省略)。 我尝试在 Start()和 Awake()中设置它,但两者都抛出相同的错误。 如果我在 Awake()中设置 errorPanel.gameObject.SetActive( true ); - 则不会引发任何错误。它仅在设置为 false
时抛出Any
答案 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中找出并删除脚本: