「ゲームを開発してみたい」

という方にお馴染みのゲーム開発ツールであるUnityは、使いこなすまでに時間と労力がかかります。

そんな時におすすめするのが、今回ご紹介する「コルーチン」です。

今回の記事では、このツールの概要と使い方、注意点について解説します。

ゲーム開発を始めたばかりの方は、ぜひ参考にしてみてください。

|Unityとは

出典:https://unity.com/ja

Unityは、アメリカのユニティ・テクノロジーズ社が提供しているゲーム開発エンジンです。

世界中の著名なゲームメーカーに採用され、100万人以上の開発者によって広く利用されています。

一般的なゲームエンジンは、ゲーム開発に必要なライブラリやアセットを提供するものですが、Unityはそれだけでなく、開発環境や実行環境を包括的に提供する「ゲーム開発プラットフォーム」として位置づけられます。

これにより、ゲーム制作を簡素化し、開発者がアイデアを現実にするための強力なツールを提供します。

さらに、10万ドル以上の収益を得ていないなどの該当する条件を満たす限り、無料ライセンスプランを利用することができます。

ゲーム開発の入門者から上級者まで幅広く利用できるゲームエンジンであり、豊富なリソースで効率的な作業が期待できます。

Unityとは?特徴や作品事例、価格など徹底解説!
Unityとは?特徴や作品事例、価格など徹底解説!

|コルーチンとは

出典:https://docs.unity3d.com/ja/2018.4/Manual/Coroutines.html

これは、中断と再開が可能な関数で構成されたもので、数秒後のタイミングや非同期処理の実現に用いられます。

具体的な用途として、アニメーションの後に処理を行ったり、オブジェクトの読み込み後にアクションを起こしたりする際に役立ちます。

これは、ある処理の完了を待機することを意味し、ゲーム開発において不可欠なスキルです。

その柔軟性と効率性から、さまざまな用途に使用できる汎用的な機能であると言えます。

|コルーチンを使うメリット

この利便性が高いツールを使う、具体的なメリットは以下の通りです。

複数の処理を並行できる

通常、関数は一つずつ実行され、同時に複数の処理を行うにはマルチスレッドが必要です。

しかし、このツールを活用することで、完全な並列ではないものの、異なる処理を擬似的に同時に実行できます。

この擬似的な並列処理は、通信処理やロード処理など、時間のかかる処理を行う際に非常に便利です。

ゲームの画面が処理のために停止することなく、プログラムがより効率的に動作し、滑らかなゲームプレイが実現できます。

無駄な処理を省ける

通常、Update関数で同じ処理を行う場合、ローカル変数は毎フレーム初期化され、メンバ変数を使わなければなりません。

さらに、毎フレームごとに関数の先頭から処理を再開するため、不要な処理が繰り返し実行されます。

このツールを使用することによって、処理を一時停止した場所から再開できるため、ローカル変数は前回の値を保持し、関数の途中から再開されるため、初期化や不要な処理を省略できます。

よってコードの可読性を向上させ、変数のスコープを小さく保つことができます。

|コルーチンの使い方

では、早速このツールを使ってみましょう。

初心者の方でも理解できるように、こちらではその使い方について、詳しく説明していきます。

コルーチンを宣言する

使用するにはまず、IEnumerator型の新しい関数を宣言する必要があります。

この関数は、後で呼び出すコルーチンの本体となり、中にその処理を記述します。

関数内には処理が記述され、後でこのコルーチンを呼び出すことができます。

コルーチン処理をこの関数内に記述することで、時間差を持たせたり非同期処理を実現できます。

コードを入力する

関数内に、時間差を持たせたり非同期処理を実行するためのコードを記述します。

たとえば、待機時間を挿入するにはyield returnステートメントを使用します。このステートメントは、一時停止して指定した時間待機することを可能にします。

このようにして、コルーチンの中に時間差を持たせたり、非同期処理を挿入するためのコードを記述します。

コルーチンの途中で終了させたい場合

途中で処理を中断したい場合は、 yield break; ステートメントを使用します。

これを挿入することで実行が中断され、その時点から処理が終了します。

これは不要な処理の実行を避け、特定の条件が満たされた場合には、即座に終了させるのに役立ちます。

コルーチン内で条件を監視し、条件が満たされたら yield break; を呼び出すことで、処理の中途終了を実現できます。

コルーチンを複数使用したい場合

複数を同時に実行したい場合、StartCoroutineメソッドを活用します。

これを使うことで、他のコルーチンを呼び出し、同時に実行できます。

これは、ゲーム内で複数の非同期タスクを同時に処理したい場合や、複数のオブジェクトに対して同時にアクションを実行したい場合に非常に有用です。

この方法により、効果的なタスク管理とアプリケーションの効率的な制御が実現され、ゲームやアプリの多くの側面で応用できます。

|コルーチンを使用する上での注意事項

Unityを使いこなすために、是非とも習得したいツールではありますが、使用上の注意点も存在します。

以下の事項に留意しておきましょう。

あくまでも「疑似並列」である

本ツールは、メインスレッド上で実行されるため、完全に並列処理とは言えません。

あくまでも疑似並列であるということを理解しておく必要があります。

処理を中断して後から再開することができるため、複数の処理を同時に実行しているように見えることがありますが、実際には、メインスレッドが複数の処理を交互に実行しているだけです。

そのため、処理の仕方によっては、並列処理と同じパフォーマンスが得られない場合があります。

GameObjectが非アクティブだと動作しない

GameObject上で実行されるものであり、非アクティブになっていると動作しません。

アクティブ環境でない場合、通常のアップデートや処理の実行から除外されてしまいます。

つまり、そのオブジェクト上に存在する処理は中断され、再開されません。

たとえば、オブジェクトが非アクティブになった瞬間にコルーチンが実行中だった場合、そのコルーチンは中断され、後で再開されることはできなくなります。

停止後は再開できない

上述した、一度でも停止したら再開できない点について具体的に説明すると、一度StopCoroutineが使用された場合や、GameObjectが非アクティブになった場合、その続きを再開することはできません。

これは、本ツールが逐次的な処理を行う性質から来るもので、途中で停止された場合、停止地点からの再開は難しいためです。

この制約を考慮して、使用時には適切な管理と設計が必要です。

yieldを1つ以上入れる必要がある

本ツールを使用する上での重要なポイントの一つは、少なくとも1つのyieldステートメントを含める必要があることです。

処理の途中で一時停止し、次のフレームで処理を再開するための重要な要素であるため、「yield return 0」の場合、処理を実行せずに終了してしまいます。

そのため、少なくともyieldを1つ以上挿入し、コード内で適切な停止ポイントとタイミングを設定することが不可欠です。

|まとめ

Unityにおけるコルーチンは、ゲーム開発の鍵となる非常に強力なツールです。

今回は、このゲームエンジンの概要、使い方、注意点について簡単に解説しました。

これを使いこなせるようになると、効率的なゲームプログラミングが可能となり、ゲームの品質とパフォーマンス向上に大きく影響するでしょう。

ぜひ、本エンジンを活用して、より魅力的なゲームを開発してみてください。

Unityの魅力を最大限に引き出すためにも、コルーチンをマスターしましょう!