処理を停止したい!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; }
実際にコルーチンを使用してみる
それでは実際にコルーチンを使用してみましょう。
今回は時間差でゲームオブジェクトを消去する処理を作成してみたいと思います。 Unityのプロジェクト内でCubeを二つ作成して見やすい位置に置いてください。
次に処理を作成していきましょう。
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を追加していってください。
消す2つのCubeはどうやって設定したらいいんですか〜?
Inspectorタブのスクリプトの項目に「Cube1」「Cube2」の欄があるので、そこに消したいオブジェクトをドラッグ&ドロップしよう。
なるほど、ここに入れたものが実行時に処理されるんですね。
下の画像のように順番に消えていったら成功です。
まとめ
今回はコルーチンについて解説していきました。
コルーチンは少し難しい知識になりますが、使いこなすことができれば、ゲームのクオリティを上げることができます。
ぜひ理解を深めていきましょう。
ゲームを再生するとどうなったかな?
1つのCubeが消えて少ししてから、もう1つのCubeが消えました!
待機する時間の設定などはIEnumerator型の解説の部分で復習してみよう。例えば今回でいうと「1.0f」の部分を「3.0f」にすると2つ目のCubeが消えるまでの時間が長くなるよ。
実際に書いて確認してみます。ありがとうございました!
[お知らせ]TechAcademyではオリジナルゲームアプリが公開できるUnityオンラインブートキャンプを開催しています。現役Unityエンジニアのサポートで効率的に学びたい場合はご検討ください。