c# - Unity 自动隐藏面板
问题描述
我正在使用 Unity 构建一个 AR 应用程序。
它具有登录/注册场景,可让用户登录或注册应用程序。
对于错误处理和向用户显示错误消息(例如无效的电子邮件),我只是创建了一个面板,上面有一些文本来显示错误消息。此面板上还有一个按钮可以关闭消息并再次隐藏错误面板。
此面板覆盖在具有输入字段的主 UI 面板上。
显然,错误面板应该在加载场景时隐藏,只有在出现错误消息时才会显示。
但我无法在Awake()上设置此面板的状态。我不断收到错误NullReferenceException:对象引用未设置为对象的实例。
我已将脚本设置为错误面板,并将 Panel 对象添加到检查器中的脚本中。附上图片供参考。
以下是我的缩写代码(为简洁起见,使用省略)。我尝试在Start()和Awake()中设置它,但都抛出相同的错误。如果我设置errorPanel.gameObject.SetActive( true ); 在Awake() - 没有错误被抛出。仅在设置为false时才抛出
public class RegisterScene : MonoBehaviour {
public GameObject errorPanel; // Error panel
void Awake()
{
errorPanel = GameObject.FindGameObjectWithTag("errorPanel"); // Error panel Tag
Debug.Log("Error Panel: " + errorPanel); // Outputs "ErrorPanel" as named in Inspector
errorPanel.gameObject.SetActive(false); // Have to hide on scene Awake - throws NullReferenceError here
//errorPanel.gameObject.SetActive(true); // This works as a test case
}
// Register button clicked
public void Register ()
{
// If error
showErrorPanel("You must complete all sections");
}
// Show error panel
public void showErrorPanel(string errorMessage)
{
Debug.Log("Showing error panel");
errorPanel.gameObject.SetActive(true); // Working - shows error panel
// Confirmation button on error panel clicked
hideErrorPanel();
}
// Hide error panel
public void hideErrorPanel()
{
Debug.Log("Hiding error panel");
errorPanel.gameObject.SetActive(false); // Working - hides error panel
}
}
解决方案
如果我设置- 不会引发错误
errorPanel.gameObject.SetActive(true);
。Awake()
仅在设置为 false 时才抛出。
这可能是正在发生的事情:
您的RegisterScene
脚本附加到另一个GameObject。GameObject.FindGameObjectWithTag("errorPanel")
调用时,将返回您的面板。当您将其设置为false
with 时errorPanel.gameObject.SetActive(false)
,它会停用它。
Awake
然后将在它所附加的另一个GameObject 上调用该函数,该 GameObject 也将调用但这次GameObject.FindGameObjectWithTag("errorPanel")
将返回。null
它将返回null
,因为GameObject.FindXXX
函数找不到停用的对象。因为它是null
,所以调用errorPanel.gameObject.SetActive
将抛出该异常。
你有两个选择:
1 .从其他游戏对象中查找并删除脚本:
2FindInActiveObjectByTag
.如果您需要查找未激活的游戏对象,请使用我的功能查找已停用的游戏对象。
推荐阅读
- python - 如何在excel的一个单元格中插入熊猫数据框(使用openpyxl),其中的值将用逗号分隔?
- python - 使用数据框中的排除规则创建集合
- javafx - JavaFX:BorderPane 的布局问题 - 错误或用户错误?
- rest - GraphQL 自省查询和通用解析器
- python - 在使用 OpenCv 对图像进行二值化时,究竟在哪里使用形态学操作(膨胀、侵蚀、打开或关闭)
- ruby-on-rails - 在 Rails 中加载 webpack javascript 时出现 EOFError
- jmeter - 如何在Jmeter中使用%20更改从空间的csv中获取的值?
- r - 如何使用预测获得标准偏差?
- java - 尝试 React Native 的 Expo,只是做了一个“init”,得到 socketException 错误?
- c++ - 什么是类型字段?