コルーチン(Unity3D およびおそらく他の場所) がどのように機能するかについて、私は混乱しており、興味があります。コルーチンは新しいスレッドですか? 彼らが言ったUnityのドキュメント:
コルーチンは、指定された YieldInstruction が終了するまで実行 (yield) を一時停止できる関数です。
そして、彼らはここにC#の例を持っています:
using UnityEngine;
using System.Collections;
public class example : MonoBehaviour {
void Start() {
print("Starting " + Time.time);
StartCoroutine(WaitAndPrint(2.0F));
print("Before WaitAndPrint Finishes " + Time.time);
}
IEnumerator WaitAndPrint(float waitTime) {
yield return new WaitForSeconds(waitTime);
print("WaitAndPrint " + Time.time);
}
}
この例について多くの質問があります。
上記の例で、コルーチンはどの行ですか?
WaitAndPrint()コルーチンですか?WaitForSeconds()コルーチンですか?この行で:
yield return new WaitForSeconds(waitTime);、なぜ と の両方yieldがreturn存在するのですか? Unity のドキュメントで、「yield ステートメントは特別な種類の return であり、次に呼び出されたときに関数が yield ステートメントの後の行から継続することを保証する」と読みました。yieldが特別な場合、ここreturnで何をreturnしていますか?を返す必要があるのはなぜ
IEnumeratorですか?StartCoroutine新しいスレッドを開始しますか?上記の例で何回
WaitAndPrint()呼び出されましたか?yield return new WaitForSeconds(waitTime);本当に戻ってきたの?WaitAndPrint()はいの場合、上記のコードで 2 回呼び出されたと思います。そして、私は複数回StartCoroutine()電話していたと思います。しかし、別の Unity ドキュメントWaitAndPrint()を見ました。「コルーチンの実行は、yield ステートメントを使用して任意の時点で一時停止できます。yield の戻り値は、コルーチンがいつ再開されるかを指定します。」これらの言葉は、実際には戻っていないことを感じさせます。一時停止しただけです。戻るのを待っていました。この場合、上記のコードは 1 回だけ呼び出され、関数を複数回呼び出すのではなく、関数の開始のみを担当していました。WaitAndPrint()WaitForSeconds()WaitAndPrint()StartCoroutine