Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
80
Help us understand the problem. What is going on with this article?
@fujimisakari

コルーチンについて

More than 5 years have passed since last update.

シングルスレッド環境でマルチスレッドっぽく動作できる
コルーチンについての理解度が低かったので挙動を確認してみた

コルーチンの特徴

コルーチンについては、通常の関数のとは異なり、
処理を途中で抜けて任意のタイミングで中断部分から処理を再開することが特徴です。
yield return が呼び出されると、その時点で関数は処理を中断して制御を返します。
シングルスレッドの環境で擬似的にマルチスレッドを実現するための手段です。

使いどころ

遅延評価をする場合に使用するので、ゲームでは状態シーケンス管理になどに使えそう。
バトルに入る前では、フィールドオブジェクト生成 → バトル初期値設定 → プレイヤー、敵オブジェクトを生成
→ バトルシーントランザクション → バトル開始 みたいな感じで

UnityのStartCoroutineを使用しての動作確認

以下の実行結果より処理を途中で抜けて
任意のタイミングで中断部分から処理を再開していることがわかります

void Start () {
    StartCoroutine("Coroutine1");
}

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

public IEnumerator Coroutine1()
{
    Debug.Log("Start-1");
    Debug.Log("--------");
    yield return StartCoroutine("Coroutine2");
    Debug.Log("--------");
    Debug.Log("Start-2");
    yield return null;
    Debug.Log("Start-3");
}

private IEnumerator Coroutine2()
{
    Debug.Log("Nest-1");
    yield return null;

    Debug.Log("Nest-2");
    yield return null;

    Debug.Log("Nest-3");
}

// 実行結果
//
//   Start-1
//   --------
//   Nest-1
//   Update.
//   Update.
//   Nest-2
//   Update.
//   Nest-3
//   --------
//   Start-2
//   Update.
//   Start-3
//   Update.
//   Update.
//   :
//   :
80
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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
fujimisakari
通りすがりのエセ力士

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
80
Help us understand the problem. What is going on with this article?