Unity-coroutines
Unity-コルーチン
Unityでゲームを作成する場合、コルーチンは最も役立つツールです。 コルーチンが何であるかを理解するために、以下に示すコード行を考えてみましょう。
IEnumerator MyCoroutineMethod() {
//Your code here…
yield return null;
}
通常、Unityで関数(または実際にはC#)を呼び出すと、関数は最初から最後まで実行されます。 これは、コードに関する限り、「通常の」動作と見なすものです。 ただし、関数を意図的に遅くしたり、実行する1秒未満の時間だけ待機させたい場合があります。 コルーチンはまさにそれが可能です。コルーチンは、そのプロセスを完全に一時停止するだけでなく、そのプロセスを*待機*および*タイミング*することができる機能です。
コルーチンがどのように機能するかを理解するための例を考えてみましょう。 1秒間隔で色を赤と青の間で変える正方形を作りたいとします。
まず、スプライトを作成します。 次に、新しいスクリプトを作成し、 ColorChanger という名前を付けます。 このスクリプトでは、スプライトの Sprite Renderer への参照を取得します。 ただし、コンポーネントを取得する別の方法を使用します。 これまでのようにコンポーネントをスロットにドラッグアンドドロップする代わりに、コンポーネント自体を検出するようコードに要求します。
これは、 GetComponent メソッドを介して行われます。このメソッドは、検出した最初に一致するコンポーネントを返します。 オブジェクトごとに使用するスプライトレンダラーは1つだけなので、このメソッドを使用して、毎回レンダラーへの参照を自動的に検出および取得できます。
レンダラーはスプライトを実際に画面上に表示する責任があることに注意してください。 レンダラーには、スプライトのグローバルカラーに影響する color プロパティがあります。これは変更される値です。 *色*の値を公開すると、オペレーティングシステムのデフォルトの色選択プログラムのエディターでそれらを選択できるようになります。
private SpriteRenderer sr;
public Color color1;
public Color color2;
void Start () {
sr = GetComponent<SpriteRenderer>();
StartCoroutine(ChangeColor());
}
IEnumerator ChangeColor() {
while (true) {
if (sr.color == color1)
sr.color = color2;
else
sr.color = color1;
yield return new WaitForSeconds(3);
}
}
ここで、while関数でコルーチン関数をトラップします。
C#でコルーチンを作成するには、 IEnumerator を返すメソッドを作成するだけです。 また、 yield return ステートメントも必要です。 yield returnステートメントは特別です。 Unityに実際にスクリプトを一時停止して次のフレームに進むように指示するものです。
リターンを生み出すために使用できる方法はいくつかあります。その1つは、 WaitForSeconds クラスのインスタンスを作成することです。 これにより、コルーチンは続行する前に実世界の一定の秒数だけ待機します。
コードをコンパイルして、Unityに戻りましょう。 交互の色を選択して、プレイをヒットします。 これで、オブジェクトは3秒間隔で2色を切り替えるはずです。 間隔をパブリック変数にし、色の変更の頻度も調整できます。
コルーチンは、先ほど行ったような timed メソッドに広く使用されています。 さまざまな WaitForX メソッドには独自の用途があります。 コルーチンは、ゲームが同時に実行されている間に、単独で実行される「サイド」プロセスを実行するためにも使用されます。 これは、たとえば、プレーヤーが1つのポイントから開始している間に、大きなレベルのオフスクリーンパーツを読み込む場合に便利です。