【问题标题】:Can GameObject automatically find references?GameObject 可以自动查找引用吗?
【发布时间】:2020-11-08 02:09:26
【问题描述】:

我是 Unity 新手,正在经历一个简单的突破性克隆。目前,我正在开发一个游戏管理器并尝试在面板之间切换为 ui。

但是,unity 似乎无法从我的项目中找到 PanelMenu 对象,并且我不断收到空实例错误。

我不知道为什么会突然出现这个错误,因为我之前没有(或不记得)从 GameObject 访问面板对象。

这是我的代码和统一层次结构:

谁能解释一下为什么 GameObject 找不到面板或如何分配面板实例?

谢谢!

【问题讨论】:

  • 请勿发布代码、数据、错误消息等的图片 - 将文本复制或输入到问题中。 How to Ask

标签: unity3d


【解决方案1】:

将您的面板对象创建为预制件,就像您对 Ball、Player 等所做的那样。然后将您的游戏管理器类中的面板引用更改为 public 而不是 private

然后,当您在检查器中单击您的游戏管理器时,您会看到面板引用列在其属性下(它们将被取消分配)。将适当的面板预制件从资产浏览器拖到管理器对象的正确属性中。

【讨论】:

  • 我决定序列化这些字段。我正在看的教程没有做这一步,我认为 GameObject 能够以某种方式分配实例。
  • 稍微改变了我的答案 - 忘了提到将面板创建为预制件。如果您的面板没有首先被实例化到世界中,您的游戏对象将找不到它们。所以它归结为在代码中手动生成它们,或者使用预制 + 检查器属性方法,这是 UI imo 最干净的选项。
  • 太酷了!只是澄清一下,如果我决定将我的面板用作预制 gamebobj 将能够找到它们吗?
  • 如果你给你的面板命名或标签,当然,你可以找到它们。 GameObject.Find("name")GameObject.FindWithTag("yourtag") 是你的朋友 - 只是不要在更新循环期间使用它们,因为众所周知它们总体上很慢。将它们保留在初始化/启动函数中将是最有效的。但请记住 - 他们不会找到尚未在场景中实例化的游戏对象!
猜你喜欢
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
相关资源
最近更新 更多