void Start()
{
StartCoroutine(Message(i));
StartCoroutine(Message(i));
StartCoroutine(Message(i));
StartCoroutine(Message(i));
}
:あなたはまた、私は降伏リターンがどのように動作するかに慣れてくるために、次のテストを実行することをお勧め
yield return Wait
https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html
後の行動を見ることができるドキュメントの例では
私はそれがあなたが考えるべきことをしているとは思わない。これは各StartCoroutine
が終了するのを待つことはなく、次にStartCoroutine
を呼び出すでしょう。
最初StartCoroutine(Message(i));
呼び出しがMessage
機能を開始します:
これは何が起こるかです。 コードがyield return new WaitForSeconds(waitTime = 2f);
のコード行に一致すると、Start()
関数にジャンプします。
次のStartCoroutine(Message(i));
が呼び出され、同じことが再び起こります。限り、あなたはyield return new WaitForSeconds
、yield return null;
、またはyield return
を持っているように何史上YieldInstruction
実装され、実行はStartCoroutine
関数が呼び出された中に、その非コルーチン関数に戻ります
非コルーチン関数からコルーチン関数を呼び出し、他のコードを実行し続けます。
コルーチンが別のコルーチンを終了するのを待たせるには、別のコルーチン関数からStartCoroutine(Message(i));
関数呼び出しを行います。これにより、各コルーチン関数の呼び出しをyield
にすることができます。これは連鎖コルーチンと呼ばれます。
yield
コルーチン関数呼び出しを呼び出すには、yield return
をStartCoroutine
関数の前に置きます。今yield return StartCoroutine(Message(i));
public class Wait : MonoBehaviour {
private int i = 0;
public string[] message;
[SerializeField]
private Text toText;
public IEnumerator Message(float waitTime)
{
// toText.text = message[i];
i++;
yield return new WaitForSeconds(waitTime = 2f);
}
void Start()
{
StartCoroutine(startMessage());
}
IEnumerator startMessage()
{
yield return StartCoroutine(Message(i));//Wait until this coroutine function retuns
yield return StartCoroutine(Message(i));//Wait until this coroutine function retuns
yield return StartCoroutine(Message(i));//Wait until this coroutine function retuns
yield return StartCoroutine(Message(i));//Wait until this coroutine function retuns
}
}
、各StartCoroutine(Message(i));
コールは、最初の1が終了するまで待機します。これを行うには、常にboolean
変数を使用できますが、yield
StartCoroutine
コールよりはるかに良いです。
キーワードを指定すると、メソッドが遅延実行されます。したがって、 'Enumerator.MoveNext()'を呼び出すときにのみ実行されます。これは決して呼び出されません(例えばforループを使用するため)。 – HimBromBeere
@HimBromBeereは 'StartCoroutine'の仕事ではありませんか? –