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さんです!