Unity-コルーチン

コルーチンは、Unityでゲームを作成するときに最も役立つツールです。コルーチンが何であるかを理解するために、以下に示すコード行を考えてみましょう。

IEnumerator MyCoroutineMethod() {
   // Your code here…
   
   yield return null;
}

一般に、Unity(または実際にはC#)で関数を呼び出すと、関数は最初から最後まで実行されます。これは、コードに関する限り、「通常の」動作と見なすものです。ただし、関数の速度を故意に遅くしたり、実行する1秒の長さより長く待機させたりする場合があります。コルーチンはまさにそれが可能です:コルーチンは次のことができる機能ですwaiting そして timing そのプロセス、およびそれを完全に一時停止します。

コルーチンがどのように機能するかを理解するための例を考えてみましょう。1秒間隔で赤と青の間で色が変わる正方形を作成するとします。

まず、スプライトを作成します。次に、新しいスクリプトを作成し、名前を付けますColorChanger。このスクリプトでは、への参照を取得しますSprite Rendererスプライトの。ただし、コンポーネントを取得する別の方法を使用します。これまでのようにコンポーネントをスロットにドラッグアンドドロップする代わりに、コンポーネント自体を検出するようにコードに要求します。

これは、 GetComponentメソッド。検出した最初の一致するコンポーネントを返します。オブジェクトごとに1つのスプライトレンダラーしか使用しないため、このメソッドを使用して、レンダラーへの参照を毎回自動的に検出して取得できます。

レンダラーは、スプライトを実際に画面に表示する責任があることを忘れないでください。レンダラーにはcolorスプライトのグローバルカラーに影響を与えるプロパティ。これは変更される値です。を作るColor 値publicを使用すると、オペレーティングシステムのデフォルトのカラーピッキングプログラムのエディターで値を選択できます。

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ステートメント。歩留まりのreturnステートメントは特別です。これは、実際にUnityにスクリプトを一時停止して次のフレームに進むように指示するものです。

リターンを生み出すために使用できる方法はいくつかあります。その1つは、のインスタンスを作成することですWaitForSecondsクラス。これにより、コルーチンは続行する前に実際の秒数だけ待機します。

コードをコンパイルして、Unityに戻りましょう。交互の色を選んで、プレイします。これで、オブジェクトは3秒間隔で2つの色を切り替えるはずです。間隔をパブリック変数にし、色の変更の頻度を調整することもできます。

コルーチンは次の目的で広く使用されています timed先ほど行ったような方法。の多様性WaitForXメソッドには独自の用途があります。コルーチンは、ゲームが同時に実行されている間に単独で実行される「サイド」プロセスを実行するためにも使用されます。これは、たとえば、プレーヤーが1つのポイントから開始しているときに、大きなレベルの画面外の部分をロードする場合に便利です。