処理を停止したい!Unityでコルーチンを使う方法【初心者向け】

初心者向けにUnityでコルーチンを使う方法を解説しています。処理を停止して、また再開するなどを時間を絡めた処理を行うのに役立つ知識です。様々なシチュエーションで応用できる技術なので、ぜひご覧ください。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が1,000以上あります。

Unityでコルーチンを使う方法を解説しています。

コルーチンは時間に絡んだ処理を行うのに便利です。本格的なゲームを作っていく中で作業を効率化させるなど覚えておいて損はないので実際に書きながら覚えていきましょう。

 

なお、本記事はTechAcademyのUnity入門オンライン講座の内容をもとにしています。

 

20163020-2

 

今回はUnityでコルーチンを使用する方法を練習しよう。

 

20160620

 

田島メンター!!コルーチンというのは何ですか〜?

 

20163020-2

 

コルーチンは一度処理を中断したあとに、その続きから処理を再開する構造だよ。

 

20160620

 

どういうときに役立つんでしょうか?

 

20163020-2

 

これを使うことによって、一定の時間を置いてから次の処理を行うというようなことができるんだ。実際にやってみよう。

 

コルーチンとは

コルーチンとはプログラミングの技法、構造の一種です。コルーチンを使用すると、ある特定の場所からの処理を中断して、そこからまた再開することができます。Unityでは「IEnumerator」という型でコルーチンを表現します。

コルーチンを使用するとx秒待つといった処理を簡単に行うことができます。

似たような処理を行うものいInvokeというものがありますが、コルーチンで処理を行う方が様々なケースに対応できるので、ぜひ覚えておきましょう。

 

Unityでのコルーチンの実装方法

前述の通りUnityではIEnumeratorという型でコルーチンを表現します。

IEnumerator SamplecoRoutine() {

}

コルーチンには呼び出すための関数があり、通常の関数と同じように呼び出すことはできません。

SamplecoRoutine(); //動かない
StartCoroutine("SamplecoRoutine"); //動く

コルーチンで待機の秒数を指定する方法は以下のように書きます。

IEnumerator coRoutine(){
  yield return null; //1フレーム待機
  yield return new WaitForSeconds( num ); // num秒待機
}

コルーチンを終了させるためには以下のように書きます。

IEnumerator coRoutine(){
  yield break;
}

 

[PR] Unityを使ったゲーム開発で挫折しない学習方法を動画で公開中

実際にコルーチンを使用してみる

それでは実際にコルーチンを使用してみましょう。

今回は時間差でゲームオブジェクトを消去する処理を作成してみたいと思います。 Unityのプロジェクト内でCubeを二つ作成して見やすい位置に置いてください。

unity_10_01

次に処理を作成していきましょう。

using UnityEngine;
using System.Collections;
public class coroutineSample : MonoBehaviour {

  public GameObject cube1;
  public GameObject cube2;

    void Start () {
    StartCoroutine("SampleCoroutine");
    }

    void Update () {

    }

  IEnumerator SampleCoroutine(){
    Destroy(cube1.gameObject);
    yield return new WaitForSeconds(1.0f);
    Destroy(cube2.gameObject);
  }
}

このスクリプトをMainCameraに追加してください。cube1,cube2にはそれぞれのcubeを追加していってください。

unity_10_02

 

20160620

 

消す2つのCubeはどうやって設定したらいいんですか〜?

 

20163020-2

 

Inspectorタブのスクリプトの項目に「Cube1」「Cube2」の欄があるので、そこに消したいオブジェクトをドラッグ&ドロップしよう。

 

20160620

 

なるほど、ここに入れたものが実行時に処理されるんですね。

 

下の画像のように順番に消えていったら成功です。

unity_10_03

 

まとめ

今回はコルーチンについて解説していきました。

コルーチンは少し難しい知識になりますが、使いこなすことができれば、ゲームのクオリティを上げることができます。

ぜひ理解を深めていきましょう。

 

20163020-2

 

ゲームを再生するとどうなったかな?

 

20160620

 

1つのCubeが消えて少ししてから、もう1つのCubeが消えました!

 

20163020-2

 

待機する時間の設定などはIEnumerator型の解説の部分で復習してみよう。例えば今回でいうと「1.0f」の部分を「3.0f」にすると2つ目のCubeが消えるまでの時間が長くなるよ。

 

20160620

 

実際に書いて確認してみます。ありがとうございました!

 

 

[お知らせ]TechAcademyではオリジナルゲームアプリが公開できるUnityオンラインブートキャンプを開催しています。現役Unityエンジニアのサポートで効率的に学びたい場合はご検討ください。