Unity コルーチンって何?初心者でも大丈夫!【動画で解説】

当ページのリンクには広告が含まれています。
Unity コルーチン

コルーチンが分からない・・・

たくちん

Unityで分からないことがあると
朝から晩まで考えてしまうタイプです・・・

できるだけはやく、より深く理解したいですよね。

そんな悩めるUnityユーザーの助けになれば嬉しいです。

コルーチンでできることは「一時停止と再開」です。

この記事を読むと・・・

コルーチンについて「使える」レベルになること間違いなし。

「使える」レベルを目指してオリジナルゲームを使った動画とスクリプトの徹底解説を書いていきます。

たくちん

モヤモヤの解決と「分かる!」をお届けします。

コルーチンを学ぶことでゲーム開発の幅が広がり、ゲームの完成へ近づくことができます。

わたしはこんな人です
顔 イラスト

たくちん

  • 未経験でも他業種でも「できる」ゲームの作り方を発信中
  • 2歳の娘に挑戦する父ちゃんの背中をみて育ってほしい
  • 娘と一緒に遊べるゲームを!と制作開始→苦労はあったが完成

新しいゲームも作ったよ!(えっへん)

iPhoneアプリとしてリリースもできました!

ひらがなーず~ひらがなあどべんちゃあ~

ひらがなーず~ひらがなあどべんちゃあ~

無料 posted withアプリーチ



せっかく始めたゲーム開発・・・。

挫折してしまうのはもったいない!

たくちん

朝起きたら、ゲーム開発に関する知識詰め込まれてないかな・・・なんて。

アンケートで分かった「稼ぐこと」ができた学習方法をまとめました。

\ゲーム開発ができる「引き出し」が無限に!/

たくちん

ゲーム開発ができる世界へワープしませんか?

目次

コルーチンは何に使う?

キャラクターが動いた後〇〇する、〇〇には秒数やマウスをクリックしたら・・・などが入れられます。

コルーチンとは「一時停止と再開」をコントロールするスクリプトのことです。

Unityには「〇〇秒待つ」というスクリプトがありません。

そのため、一旦処理を中断→〇〇秒たったら再開とスクリプトを入力する必要があります。

たくちん

イメージしやすいよう具体例を動画で解説します。

爆弾が左右からランダムで〇〇秒ごとにでてくるというスクリプトです。

コルーチンを利用して作成しました。

たくちん

いろんなところからでてきたほうが面白いなと。
そこでランダムになるようスクリプトをいれました。

ランダムについてマスターしたい方はこちらから。

コルーチン実行のスクリプト解説

Unity スクリプト
public class Spawncfg : MonoBehaviour
{
    public GameObject boom;
    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(bakudan());
    }
    IEnumerator bakudan()
    {
        yield return new WaitUntil(() => Input.GetMouseButtonDown(0));
        while (true)
        {
            float y = Random.Range(-4.5f, 4.5f); //-4.5から4.5の間でランダム
            int direction = Random.Range(0, 2);//0か1かランダム
            if (direction == 0)
            {   //右から出現
                boom.transform.position = new Vector3(3.0f, y, 0);
            }
            else
            {   //左から出現
                boom.transform.position = new Vector3(-3.0f, y, 0);
            }
            Instantiate(boom);
            yield return new WaitForSeconds(1.5f);
        }
    }
  • startcoroutine(bakudan());

コルーチンをスタートするためのスクリプト。

  • IEnumerator bakudan()

コルーチンの中で何を実行するかを決める。

  • yield return new WaitUntil(() => Input.GetMouseButtonDown(0));
  • yield return :コルーチン内の処理を一時停止し処理を中断します。
  • new WaitUntil(() => Input.GetMouseButtonDown(0));マウスをクリックしたら処理を再開します。

組み合わせて【ボタン(マウス)を押したら先へ進む】となります。

  • while (true)
  • 無限ループさせるためのスクリプト。

解除されるまでこのあとのスクリプトが続きます。

たくちん

ここからランダム作成のスクリプトで解説済。
割愛します。
お手数ですが関連記事からご確認を。

・・・

コルーチンの部分に戻ってきました。

  • Instantiate(boom);

boomを生成するためのスクリプト。

  • yield return new WaitForSeconds(1.5f);
  • yield return:コルーチン内の処理を一時停止し処理を中断します。
  • new WaitForSeconds(1.5f); 新たに秒数(1.5秒)を数えたあとに次のスクリプトを実行。

この場合はwhile (true)へ戻ります。(無限ループ)

たくちん

コルーチンを生成するためのポイントは次見出しで解説します。

コルーチンを生成するためのポイント

Unity プレハブ

なんとなくスクリプトの意味はわかったけど組み合わせ方が分からない・・・

たくちん

ポイントがあります。
コルーチンにとって重要な部分がどれか分かれば、組み合わせも大丈夫。

ポイントとなる部分はこちら。

  • IEnumerator(何を実行するのか決める)
  • yield return(1つ以上必要)
  • wait for seconds(秒数を管理)

IEnumerator(何を実行するか決める)

コルーチンとセットで使われるIEnumerator。(読みはアイイニューマレイター)

たくちん

読みは覚えなくても大丈夫ですが
コルーチンを使う時はセットで使うことが多いです。

先頭に書くことで戻り値として設定ができます。

  • IEnumerator bakudan()

この部分ですね。

IEnumerator に続くのは任意の単語で大丈夫。(bakudanのセンスの無さよ・・・)

この後に続くコルーチンで何を実行するのかを決めます。

yield return(1つ以上必要)

yield returnは必ず1つ以上必要です。(読みはイールドリターン)

コルーチンの一時停止処理と再開処理を担っています。

  • yield return new WaitUntil(() => Input.GetMouseButtonDown(0));

この部分です。

マウスのボタンをクリックするまで停止・クリックされたら次のスクリプトへとなります。

If文に近い使い方ができそうですね。1つ以上ないとエラーになるのも注意が必要です。

wait for seconds(秒数を管理)

  • yield return new WaitForSeconds(1.5f);

秒数を管理するためのスクリプトです。

(1.5f)の数字を大きくすると再開するまでの時間が長くなります

出現時間のコントロールやターン制の秒数管理に役に立ちますね。

たくちん

基本のコルーチン生成はこれで問題ないかと思います。
実際にコードを書いてお試しください。

コルーチンを応用しよう

ここからは応用編です。

そんなことできたのか。と後から気づいたことを書いていきます。

たくちん

できることが広がるとゲーム開発に幅が生まれます。
より楽しでもらえるゲームを作るために頑張りましょう。

  • コルーチンのループ
  • コルーチンの停止(秒数で停止)
  • コルーチンの停止(回数で停止)

コルーチンをループさせたい

  • while (true)

後に続くスクリプトをループさせることができます。

今回のスクリプトは生成(Instantiate(boom);)した後、1.5秒待機してwhile (true)に戻ります。(無限ループ)

たくちん

無限ループと聞くと止まらなくなったら・・・と怖い気もしませんか?
コルーチンを止める方法もご紹介します。

コルーチン止めるには?

一連の動作をした後に途中で止める方法と何周回ったら止めるなどコントロールすることができます。

たくちん

今回のスクリプトには入っていませんが
追加して動画を撮ってみました。

秒数で止める(StopCoroutine)

public class Spawncfg : MonoBehaviour
{
    public GameObject boom;
    private Coroutine bakudanCoroutine;
    // Start is called before the first frame update
    void Start()
    {
        bakudanCoroutine = StartCoroutine(bakudan());
    }
    IEnumerator bakudan()
    {
        while (true)
        {
            yield return new WaitUntil(() => Input.GetMouseButtonDown(0));
            Instantiate(boom);
            yield return new WaitForSeconds(3f);
            StopCoroutine(bakudanCoroutine);
        }
    }
}

3秒たったら止めるコルーチンです。

  • StopCoroutine(coroutine);

こちらのスクリプトで停止しています。

if式と組み合わせるとより自由に設定できます。

たくちん

なお、停止したスクリプトを再開させることはできません。
あらかじめご注意を。

回数で止める(yield break)

IEnumerator bakudan()
    {
        yield return new WaitUntil(() => Input.GetMouseButtonDown(0));
        int i = 0;
        while (true)
        {
            if (i > 4) yield break;
            i = i +1;
            Instantiate(boom);
            yield return new WaitForSeconds(1.5f);
        }
    }

5周スクリプトが回ったらコルーチンが停止して生成しなくなります。

たくちん

個数限定のレアアイテムの生成などの数をコントロールできますね。

\ゲーム開発ができる「引き出し」が無限に!/

たくちん

ゲーム開発ができる世界へワープしませんか?

まとめ コルーチンを使いこなしてゲームを充実させよう

コルーチンについて理解を深めることができましたか?

基本的な使い方から繰り返し使う方法をまとめました。

一度読むだけでは分かりにくいところもあるかと思います。

手を動かしながら自分の技術へ変換していきましょう。

たくちん

これでやりたいことが実装できる!
とゲーム開発が進むことを願っております。

ゲームの作り方総集編!

11ステップであなたもゲームが作れる。喜んでもらえる。

未経験からでも、分かる!が積み上がりゲームを完成できる。

詳細はこちらから。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ゲーム開発をしている人が挫折せず「楽しく続けられること」

知識ゼロからUnityを使ってゲームを完成させることができました。
ゲームの作り方を無料で公開!
ご不明点はお問い合わせまで♪

コメント

コメントする

CAPTCHA


目次