初心者必見!現場レベルの「ゲーム制作講座PDF」を無料プレゼント中!▶

Unityコルーチンの使い方 | 時間をずらして処理する

Unity 基礎操作・設定

3秒待ってから扉が開く演出、倒れたあと1秒してからリスポーン——こういう「時間をずらした処理」、Updateにタイマー変数を書いていませんか?

動きますが、コードが読みにくくなりがちです。
コルーチン(Coroutine)を使えば、「待つ → 実行する」を順番に書けるので、演出の意図が伝わりやすくなります。

この記事では、StartCoroutine、yield return WaitForSeconds、連続演出、停止方法まで解説します。
Updateでの無理なタイマー管理から卒業する第一歩として読んでください。

  • 数秒待ってから処理したいが、Updateにタイマー変数を書いている
  • StartCoroutineとIEnumeratorの関係が分からない
  • コルーチンを途中で止める方法が知りたい

この記事でわかること

  • コルーチンの基本とStartCoroutineの使い方
  • yield return WaitForSecondsなどの待機方法
  • 連続演出を順番に書く例
  • StopCoroutineで止める方法
  • Updateのタイマーとの使い分け
  • 初心者でも理解できる解説

\プログラミング未経験でも大丈夫!まずは1本作り切ろう/

初心者が最初に選ぶならコレ

Unity ノンフィールドRPG
+スレスパ風JRPG講座

★★★★★ (Unity6対応)

Unity6対応・スマホ化対応の最新カリキュラム。「何から始めればいいかわからない」という初心者でも、ステップごとに手を動かすだけでRPGが完成します。

講座を見てみる \ゼロからでもスマホ対応RPGが作れる!/

憧れのアクションゲームに挑戦

Unity 2Dアクションゲーム
の作り方講座(ロックマン風)

★★★★★ (スマホ化・広告実装)

初心者でもロックマン風の横スクロールACTが作れる講座。7ステージ+ラスボスという本格構成で、スマホ化・広告実装まで対応。「自分のゲームをリリースしたい」夢を叶えます。

講座を見てみる \初心者でも本格ACTが完成する!/

3Dゲーム開発の入口はここ

ゼルダ風3Dアクションゲーム
の作り方講座

★★★★★ (スマホ化対応)

「3Dゲームって難しそう…」と感じている初心者向けの講座。全16回でゼルダ風3Dアクションがスマホ対応で作れるようになります。3D開発の基礎がしっかり身につきます。

講座を見てみる \初心者でも全16回で3Dゲームが完成!/

コルーチンとは何か

コルーチンは、処理を途中で止めて、次のフレームや指定秒数後に再開できる仕組みです。
戻り値の型はIEnumerator、メソッド内でyield returnを使います。

using System.Collections;
using UnityEngine;

public class DoorOpen : MonoBehaviour
{
    void Start
    {
        StartCoroutine(OpenAfterDelay);
    }

    IEnumerator OpenAfterDelay
    {
        Debug.Log("3秒待機...");
        yield return new WaitForSeconds(3f);
        Debug.Log("扉が開いた!");
    }
}

StartCoroutineでコルーチンを開始します。
yield return new WaitForSeconds(3f)の行で3秒待ち、そのあと次の行が実行されます。

StartCoroutineの基本

コルーチンを動かすには、必ずStartCoroutine経由で呼び出します。
IEnumeratorメソッドを普通に呼ぶだけでは、待機は機能しません。

// 正しい呼び方
StartCoroutine(OpenAfterDelay);

// 引数付き
StartCoroutine(FadeOut(2f));

同じコルーチンを複数同時に走らせることもできます。
ただし、同じ演出を二重に開始しないよう、開始前にStopCoroutineする、またはフラグで管理する、といった工夫が必要になる場面もあります。

管理人
管理人

コルーチンは「時間の流れに沿ってコードを書ける」道具です。
Updateのタイマー変数より、演出の意図がそのまま読めるのが大きなメリットですよ。

yield returnの代表的な使い方

待機方法は用途によって使い分けます。

書き方 意味 使う場面
WaitForSeconds(秒) 指定秒数待つ(timeScaleの影響を受ける) 演出の待ち、リスポーンまでの猶予
WaitForSecondsRealtime(秒) timeScaleに関係なく実時間で待つ ポーズ中でも進めたいUI演出
yield return null 1フレーム待つ フレームをまたいだ処理、UI更新
WaitUntil( => 条件) 条件がtrueになるまで待つ ロード完了待ち、入力待ち

WaitForSecondsの引数はfloat型です。
3秒なら3f、0.5秒なら0.5fと書きます。

連続演出を書く例

コルーチンの真価は、複数の待ちと処理を順番に書ける点にあります。

IEnumerator StageClearSequence
{
    Debug.Log("ステージクリア!");
    yield return new WaitForSeconds(1f);

    Debug.Log("スコア表示");
    yield return new WaitForSeconds(2f);

    Debug.Log("次のステージへ");
    // SceneManager.LoadScene(...);
}

Updateで「timer += Time.deltaTime; if (timer > 1) { phase = 2; }」のように段階管理するより、上のように縦に書いた方が読みやすいです。

コルーチン演出の実装手順
  • STEP1
    IEnumeratorメソッドを作る

    yield returnを含むメソッドを用意する
  • STEP2
    StartCoroutineで開始

    Startやボタンイベントから呼び出す
  • STEP3
    Playでタイミング確認

    待ち時間が意図どおりかSceneビューとConsoleで確認

コルーチンを止める方法

進行中のコルーチンを止めたいときは、StopCoroutineまたはStopAllCoroutinesを使います。

private Coroutine fadeCoroutine;

void StartFade
{
    fadeCoroutine = StartCoroutine(FadeOut);
}

void CancelFade
{
    if (fadeCoroutine != null)
    {
        StopCoroutine(fadeCoroutine);
        fadeCoroutine = null;
    }
}

void OnDisable
{
    StopAllCoroutines;
}

StartCoroutineの戻り値をCoroutine型の変数に保存しておくと、特定のコルーチンだけ止められます。
オブジェクトが非アクティブになるとコルーチンも止まるため、OnDisableで整理するのも有効です。

Updateのタイマーとの比較

「数秒後に1回だけ実行」なら、コルーチンの方が向いていることが多いです。

  • Update + タイマー変数:毎フレーム条件チェックが必要、段階が増えるとstate管理が複雑
  • コルーチン:待ち時間をそのままコードに書ける、連続演出に向く

毎フレーム動き続ける処理(移動や入力)はUpdateのまま、時間を区切った演出はコルーチン、と役割分担すると整理しやすくなります。

コルーチンでフェード演出を書く

CanvasGroupの透明度を変えるフェードは、コルーチンとの相性が良い例です。

IEnumerator FadeOut(CanvasGroup group, float duration)
{
    float elapsed = 0f;
    while (elapsed < duration)
    {
        elapsed += Time.deltaTime;
        group.alpha = 1f - (elapsed / duration);
        yield return null;
    }
    group.alpha = 0f;
}

yield return nullで1フレームずつ待ちながら、alphaを少しずつ下げています。
WaitForSecondsより細かい制御が必要なときに使えます。

管理人
管理人

「3秒待ってLogを出す」だけの小さなコルーチンから試してみてください。
動くと、Updateのタイマーがいかに読みにくかったか実感できますよ。

よくあるつまずき

  • StartCoroutineを忘れる → IEnumeratorメソッドを直接呼んでも待機しない
  • using System.Collections忘れ → IEnumeratorが見つからないエラー
  • timeScale = 0 → WaitForSecondsは止まる。
    UI演出はWaitForSecondsRealtimeを検討
  • Destroy後の実行 → オブジェクト破棄後にコルーチンが動かない。
    別オブジェクトで管理する

コルーチン内でGetComponentやFindを毎回呼ぶと重くなることがあります。
必要な参照はStartでキャッシュしておきましょう。

管理人
管理人

async/awaitは別の仕組みです。
Unity初心者のうちはコルーチンだけ押さえれば、大半の演出待ちはカバーできます。

記事を読んで「作ってみたい!」と思ったら!初心者でも1本完成できる講座で実力をつけよう

知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを1本完成させることで、理解が一気に深まります。プログラミング未経験からでも取り組める講座で、ゲーム開発の第一歩を踏み出しましょう。

Unity ノンフィールドRPG+スレスパ風JRPG講座【Unity6対応!初心者でもデッキ構築×JRPGをスマホ向けに作れる!】

Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座

  • Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
  • Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
  • 初心者でも迷わず進められる丁寧な解説構成
  • ノンフィールドRPGとデッキ構築JRPGの2つをまとめて学べるセット講座

Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、プログラミング未経験の初心者でも取り組みやすい、ステップバイステップ形式の講座です。

Unity6対応・スマホ化対応の最新カリキュラムで、読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。

「何から始めればいいかわからない…」という初心者が最初に選ぶ一本として最適な講座です。

Unity6対応・スマホ化対応の最新カリキュラム
ゼロからでもRPGを完成させよう
→ スレスパ風デッキ構築JRPG講座を見てみる
初心者でもスマホ対応のRPGが作れる!まずは1本完成を目指そう!

Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!初心者でもスマホ化・広告実装まで対応した本格横スクロールACTが作れる!】

Unity 2Dアクションゲームの作り方講座(ロックマン風)

  • ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
  • 7ステージ+ラスボスステージの本格的なゲーム設計を初心者でも実現
  • スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
  • 敵AI15体・多彩なマップギミック・武器システムを完全実装
  • 完全オリジナルゲームをアセット不使用で素材提供付きで制作

Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを、初心者でもゼロから開発できるようになる講座です。

全16回で当たり判定・物理挙動・敵AIの知識を実際のゲームコードとして実装する体験が詰め込まれています。スマホ化・広告実装まで対応しているため、「作って終わり」ではなくリリースまで見据えた実践スキルが身につきます。

「憧れのアクションゲームを自分の手で作ってみたい」という初心者に強くおすすめの一本です。

スマホ化・広告実装まで対応した本格横スクロールACT
初心者でもロックマン風2Dアクションをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
初心者でも本格ACTが完成する!広告収益まで視野に入れた実践スキルを手に入れよう!

ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

ゼルダ風3Dアクションゲームの作り方講座

  • ゼルダの伝説・モンハン・原神のような3Dアクションをゼロから開発
  • 「3Dは難しそう」と感じている初心者でも取り組みやすい丁寧な解説構成
  • スマホ化対応で実機で動かせるゲームが完成
  • アセットを使った実践的なゲーム開発手法が身につく
  • 画像・動画・全ソースコード公開の充実したサポート

ゼルダ風3Dアクションゲームの作り方講座は、「3Dゲームは難しそう…」と感じている初心者こそおすすめの入門講座です。

全16回の丁寧な解説で、ゼルダの伝説・モンハン・原神のような本格的な3Dアクションゲームを確実に完成まで導きます。スマホ化対応で実機で動かせるため、初めて3Dゲームを作り上げた達成感がひときわ大きい講座です。

「3Dゲームを自分でも作れるか試してみたい」という初心者の最初の一歩として最適です。

初心者でも3Dアクションがスマホ対応で完成する
ゼルダ風3Dアクションゲームで3D開発の壁を一気に突破しよう
→ ゼルダ風3Dアクションゲームの作り方講座を見てみる
全16回でスマホで動くオリジナル3Dゲームを完成させよう!

まとめ

コルーチンは、StartCoroutineとIEnumerator、yield returnを組み合わせて、時間をずらした処理を書く仕組みです。
WaitForSecondsで秒数待ち、連続演出は上から順に書く、停止はStopCoroutineで行います。

Updateのタイマー変数より、演出の流れが読みやすくなるのが大きな利点です。
3秒待ってLogを出す小さな例から試してみましょう。
演出やゲーム全体の流れを学びたい方は、Unity入門の森で、実践的な制作と合わせて身につけられます。
今日はStartCoroutineとWaitForSeconds(3f)を1つ書いて、Playで確認してみてください。

コメント

タイトルとURLをコピーしました