はじめに
unityにて、非同期処理を行いたく調査をして実装したので、メモ。
(ちなみに非同期処理というのは、かなり簡潔に言うと自分以外の誰かに処理を任せるようなことを言う。)
内容
unityでは「コルーチン」という便利な仕組みがあり、非同期処理を簡単に実装できる。
非同期処理
IEnumerator Example()
{
// フラグを設定する
exFlg = true;
// 指定の秒数、処理を停止する
yield return new WaitForSeconds(waitSecond);
// フラグを解除する
exFlg = false;
}
上記のように、IEnumerator
というキーワードを用いて実装したい非同期処理を実装する。今回は、一定時間の間、フラグを設定する処理を実装してみた。
肝になるのはyield
というワードで、ここで指定した時間だけ処理が止まる。と言っても、この処理の内部で止まるだけで、ゲーム自体が止まるわけではないので、ご安心を。
非同期処理(呼び出し側)
public void waitExample(){
// 非同期処理の呼び出し
StartCoroutine("Example");
// ここは非同期処理を呼び出してすぐに実行される。
Debug.Log("test");
}
先ほど定義した非同期処理(コルーチン)を呼び出してみる。
呼び出すには、StartCoroutine("コルーチン名")
にて呼び出すことができる。
コルーチンを呼び出した後は、すぐにそのあとの行(Debug.Log
の部分)が呼び出される。まさに、処理を誰かに依頼しているイメージでいるとわかりやすい。
まとめ
-
IEnumerate
で実装したいコルーチンを定義。 - 定義する際は
yield
にて停止時間を定義する。 -
StartCoroutine
にてコルーチンを呼び出す。
これらを覚えておけば、おそらく簡単なゲームを作るのには困らないだろう。
ちなみに、誰かに処理を任せるようなイメージでいるとよい、ということは何度でも言っていく。