在我的场景设计中,我有一个立方体,我想单击该立方体开始游戏。在Start()函数中,我有两个invoke函数,但是在单击多维数据集之前,我不知道如何调用它们。其实
当前,我的启动功能如下所示。我试图使用IEnumerator函数来解决此问题。也如下图所示。在多维数据集对象中的另一个脚本中,我想在static bool star
时更改其他脚本中的OnMouseDown()
t。
public class Progress : MonoBehaviour
{
public bool start = false;
// Use this for initialization
void Start()
{
StartCoroutine(Begin());
Invoke("startCycle", 3);
Invoke("startCycle", 15);
}
void Start()
{
//StartCoroutine(Begin());
Invoke("startCycle", 3);
Invoke("startCycle", 15);
}
IEnumerator Begin()
{
while(!start){
yield return null;
}
}
}
和
public class CursorClick : MonoBehaviour
{
void OnMouseDown()
{
Progress.start = true;
}
}
但是,它只是行不通,即使我没有单击多维数据集,调用仍然会发生。请帮助!
答案 0 :(得分:1)
StartCoroutine(Begin());
启动Begin()
协程,但不等待其完成。由于您的Start
被定义为void
,因此它可以简单地遍历所有代码,而无需等待任何事情。
将要等待的呼叫移到协程中,以提高可读性,请使用WaitUntil
,例如
private void Start()
{
StartCoroutine(Begin());
}
private IEnumertor Begin()
{
return new WaitUntil(() => start);
Invoke("startCycle", 3);
Invoke("startCycle", 15);
}
或者-尽管没有真正记录,但您可以直接将Start
本身直接转换为协程
private IEnumerator Start()
{
return new WaitUntil(() => start);
Invoke("startCycle", 3);
Invoke("startCycle", 15);
}
如果Start
被实现为IEnumertor
,则Unity内部会自动将其称为协程。您实际上可以在Start