LoginSignup
3
0

More than 1 year has passed since last update.

【初心者向け】Unityでの非同期処理、コルーチン、コールバックについて

Last updated at Posted at 2021-12-20

PONOS Advent Calendar 2021の21日目の記事です。

昨日は @Cal さんでした。

はじめに

この記事は、Unityを使用した非同期処理やコルーチンについて簡単にまとめたものです。
Unity初心者の方や、非同期処理に触れたことがない方などの参考になれば幸いです。

同期処理

    void Example()
    {
        Debug.Log("1");
        Debug.Log("2");
        Debug.Log("3");
    }

複数のタスクを実行する際に、1つずつ実行する処理のこと。
上記のコードの場合、「1」「2」「3」が出力されます。

非同期処理

    void Example2()
    {
        Debug.Log("1");
        StartCoroutine(Coroutine("2"));
        Debug.Log("3");
    }

    IEnumerator Coroutine(string str)
    {
        // 1秒待機
        yield return new WaitForSeconds(1);
        Debug.Log(str);
    }

複数のタスクを実行する際に、あるタスクの終了を待たずに他の処理を実行すること。
動作が重い処理や、時間を指定して実行する処理等に使われます。
上記のコードの場合、「1」「3」「2」が出力されます。

コルーチン

    IEnumerator Fade()
    {
        for (float alpha = 1f; alpha >= 0; alpha -= 0.1f)
        {
            Color col = renderer.material.color;
            col.a = alpha;
            renderer.material.color = col;
            yield return null;  // 1フレーム停止(次フレームはここから実行継続)
        }
    }

実行を停止して Unity へ制御を戻し、その次のフレームで停止したところから続行することができる関数です。(Unity公式ドキュメントより)

yield return で指定した場所で1フレーム停止し、次フレームはその行から実行継続されます。
非同期処理に載せたコードのように秒数を指定して待機させることも可能です。

コールバック

    void Example3()
    {
        Method(CallbackMethod);
    }

    void Method(System.Action callbackMethod)
    {
        // 処理(主に非同期処理)
        //-----

        callbackMethod();
    }

    void CallbackMethod()
    {
        // 処理
    }

ある処理が終わった後に、別の処理を呼び出すこと。
非同期処理の終了後に、別の処理をしたい際などに使います。
上記のコードでは、Method関数で処理を行なった後にCallbackMethod関数を呼び出しています。

まとめ

初見ではとっつきにくい部分もある非同期処理などですが、開発で使用される場面が多く、使えると実装できる幅が広がると思います。

明日は@ackylaさんです!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0