Sai*_*aif 2 c# unity-game-engine
我有两个脚本。第一个脚本在开始时被调用,如下所示:Script1.cs
private Script2 script2;
void Start () {
script2= (Script2) GameObject.FindObjectOfType (typeof (Script2));
StartCoroutine("CallTrigger");
}
IEnumerator CallTrigger() {
while(script2.hasTriggered == true){
Debug.Log("Success");
script2.hasTriggered = false;
}
yield return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的脚本2如下:
public bool hasTriggered = false;
Run Code Online (Sandbox Code Playgroud)
由于我的第一个脚本首先被调用,所以我希望 CallTrigger() 函数等待,直到 script2 中的 bool 设置为 true。不幸的是, while() 不是我认为的正确方法,因为它不适合我。我知道最好的方法是使用 Update() 但我正在使用此脚本的多个实例,其中只有一些实例在开始时被调用。
那么如何让 CallTrigger 等待,直到 script2 中的 hasTriggered 设置为 true 为止?
我希望 CallTrigger() 函数等待,直到 script2 中的 bool 设置为 true
你可以简单地使用WaitUntil
IEnumerator CallTrigger()
{
yield return new WaitUntil(() => script2.hasTriggered);
Debug.Log("Success");
}
Run Code Online (Sandbox Code Playgroud)
这基本上等于做类似的事情
IEnumerator CallTrigger()
{
// As long as the flag is NOT set
while(!script2.hasTriggered)
{
// wait a frame
yield return null;
}
Debug.Log("Success");
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你也可以直接制作它
// Yes, if Start returns IEnumerator Unity automatcally runs it as a coroutine
IEnumerator Start()
{
// Rather use the generic versions
script2 = GameObject.FindObjectOfType<Script2>();
yield return new WaitUntil(()=> script2.hasTriggered);
Debug.Log("Success");
}
Run Code Online (Sandbox Code Playgroud)