【发布时间】:2018-10-25 23:35:48
【问题描述】:
我有以下代码:
void Start()
{
gameObject.SetActive(false);
StartCoroutine(Load());
}
IEnumerator Load()
{
yield return new WaitForSeconds(waitTime);
gameObject.SetActive(true);
}
这给了我一个错误,上面写着:
无法启动协程,因为游戏对象“NameOfObj” 处于非活动状态!
这是有道理的,因为游戏对象已设置为在运行脚本之前停用。即便如此,那我该怎么办?我尝试在WaitForSeconds() 之前将gameObject.SetActive(false) 移动到协程。这样做完全停止了游戏对象的加载。
据我了解,当执行gameObject.SetActive(false) 行时,脚本会停止运行,直到重新激活游戏对象。但是,如果是这种情况,是否不可能重新激活游戏对象(因为脚本已禁用)?
无论如何,我如何将我的游戏对象从加载延迟到游戏开始后的 2-3(或任意时间长度)?
【问题讨论】:
-
将脚本移动到不同的游戏对象并引用您要激活的对象?
-
哪个函数?
Load()? -
它是一样的,只是附加到一个不同的空游戏对象上。然后,您要停用的游戏对象与脚本分开,因此脚本将继续运行。
-
我有很多游戏对象(都是一样的);这是否意味着在这个游戏对象中引用所有这些对象,或者为我想要延迟的每个对象创建一个单独的游戏对象?