icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

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

 

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

 

田島悠介

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

大石ゆかり

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

田島悠介

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

大石ゆかり

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

田島悠介

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

 

コルーチンとは

コルーチンとはプログラミングの技法、構造の一種です。コルーチンを使用すると、ある特定の場所からの処理を中断して、そこからまた再開することができます。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

 

大石ゆかり

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

田島悠介

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

大石ゆかり

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

 

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

unity_10_03

 

まとめ

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

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

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

 

田島悠介

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

大石ゆかり

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

田島悠介

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

大石ゆかり

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

 

 

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

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する