Help us understand the problem. What is going on with this article?

コルーチンの初歩的な使い方【Unity, 初心者】

More than 3 years have passed since last update.

コルーチンの初歩的な使い方

コルーチンは処理の開始や停止を別スレッドのようなふるまいでコントロールすることができます。
シーケンシャルなUIの時とかにすごく使えます。

毎フレーム処理

毎フレーム処理を開始します。
yield return のところで

void Start () {
    // コルーチンを設定
    StartCoroutine(loop());
}

private IEnumerator loop() {
    // ループ
    while (true) {
        // 毎フレームループします
        yield return null;
        Debug.Log("loop");
    }
}

指定のフレーム分だけ処理

10フレームだけ処理を行います。

void Start () {
    // コルーチンを設定
    StartCoroutine(loop(10));
}

private IEnumerator loop(int frame) {
    // ループ
    while (frame > 0) {
        // frameで指定したフレームだけループします
        yield return null;
        Debug.Log("loop");
        frame--;
    }
}

秒数指定

yield return のところをWaitForSecondsにします。

void Start () {
    // コルーチンを設定
    StartCoroutine(loop(10f));
}

private IEnumerator loop(float second) {
    // ループ
    while (true) {
        // secondで指定した秒数ループします
        yield return WaitForSeconds(second);
        Debug.Log("loop");
    }
}

yield returnの挙動

yield returnのたびに処理が中断して次のフレームまで待つみたいです。
下のサンプルではUpdate内でマイフレーム"update------"を出力していて、コルーチンではyield returnの度に文字列を出力しています。

void Start () {
    StartCoroutine (loop ());
}

void Update () {
    Debug.Log ("update------");
}

private IEnumerator loop() {
    for (int i = 0; i < 5; i++) {
        yield return null;
        Debug.Log ("loop" + i.ToString());
    }
}

yield returnのたびにそのフレームの処理が止まって次のフレームまで待ってます。
updateが最初重なってしまうのはどうしてだろうか。
yield returnとDebug.Logの順番を逆にしたら今度はloop0のあとに2回updateが来てしまいました。

update------
update------
loop0
update------
loop1
update------
loop2
update------
loop3
update------
loop4
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away