Unity3D - GameObject.Find()为禁用的对象返回null

时间:2015-07-07 14:20:44

标签: unity3d

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

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

问题在于,当我做

时,开头的游戏对象被禁用
GameObject.Find("name")

我得到了空。所以我不知道如何激活它。它是画布。

2 个答案:

答案 0 :(得分:7)

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

例如:

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

public GameObject objectToEnable;

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

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

objectToEnable.SetActive(true);

即使禁用了该对象,该引用仍应有效。

答案 1 :(得分:1)

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

 GameObject tempVar; //this line goes outside any function, not in Start or Update 

然后在“开始”或“唤醒”功能中找到对象并保存

 tempVar = GameObject.Find("name"); // this line goes in Start, just before you disable the object
 tempVar.SetActive(false);  //now the object is disabled but saved in a variable with which you can access it at any time

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