コルーチン(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