【问题标题】:Unity3D - GameObject.Find() returning null for disabled object [duplicate]Unity3D - GameObject.Find() 为禁用的对象返回 null [重复]
【发布时间】:2015-07-09 00:20:46
【问题描述】:

我有一个在游戏开始时被禁用的游戏对象。然后我想稍后通过脚本启用它。到目前为止,我已尝试使用以下代码:

GameObject.Find("name").SetActive (true);

问题是当我这样做时,一开始的游戏对象被禁用了

GameObject.Find("name")

我得到空值。所以不知道怎么激活。这是一个画布。

【问题讨论】:

  • 这个名字绝对正确吗?
  • 就像 rhughes 提到的,你需要正确定义名称。
  • 您是否一定需要禁用GameObject?您能否改为禁用它的一个组件,例如RendererRigidbody 和/或Collider

标签: unity3d


【解决方案1】:

您可以在脚本中创建一个类变量,然后在 Unity 场景编辑器中将禁用的对象分配给该类变量。

例如:

在你的脚本文件中,创建类变量:

public GameObject objectToEnable;

然后,在场景编辑器中,“objectToEnable”变量将出现在包含您的脚本的对象的脚本组件中。只需将禁用的对象拖到该变量(在场景编辑器中)即可设置参考。

一旦你这样做了,在运行时你可以这样做:

objectToEnable.SetActive(true);

即使对象被禁用,引用也应该仍然有效。

【讨论】:

    【解决方案2】:

    您可以首先将对象保存在变量中,例如您首先声明一个将保存对象的变量

     游戏对象 tempVar; //此行超出任何函数,不在 Start 或 Update 中 

    然后在 Start 或 Awake 函数中找到对象并保存

    tempVar = GameObject.Find("name"); // 这一行进入开始,就在你禁用对象之前 tempVar.SetActive(false); //现在对象被禁用但保存在一个变量中,您可以随时访问它

    当然,此代码假定对象在游戏开始前未被禁用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 2018-01-22
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      相关资源
      最近更新 更多