1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UnityでのC#文法 〜コルーチン編

Posted at

コルーチンの使いどき

Unityでゲームを作っていると、次のような処理を書きたくなることがあります。
・数秒待ってから処理を実行したい
・フェードイン、フェードアウトを少しずつ行いたい
・攻撃演出 → ヒット判定 → クールタイム、という流れを作りたい

こうした時間経過を伴う処理を素直に書こうとすると、Update内でフラグ管理をするなど、コードが複雑になりがちです。
そこで登場するのが コルーチン(Coroutine) です。

コルーチンとは

コルーチンとは、 処理の途中で一時停止し、後のフレームで続きを実行できる仕組み です。

通常のメソッドは、呼び出されたら最後まで一気に実行されます。

void Example()
{
    Debug.Log("A");
    Debug.Log("B");
    Debug.Log("C");
}

一方コルーチンでは、処理の途中で「ここで止める」という指定ができます。

IEnumerator Example()
{
    Debug.Log("A");
    yield return null;
    Debug.Log("B");
}

これが、コルーチンの特徴の1つです。

コルーチンの基本文法

コルーチンには、いくつか独特な文法があります。

戻り値はIEnumerator

コルーチンのメソッドは、必ずIEnumeratorを戻り値とします。

IEnumerator SampleCoroutine()
{
    // 処理
    yield return null;
}

voidなどでは書くことが出来ません。

StartCoroutineで実行する

コルーチンは普通のメソッドのように直接呼び出すことはできません。
StartCoroutine()を使って開始します。

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

yield returnで処理を一時停止

yield returnの後に何を返すかで、どれくらい待つかが変わります。

次のフレームまで待つ

yield return null;

指定秒数待つ

yield return new WaitForSeconds(1.5f);

条件が満たされるまで待つ

yield return new WaitUntil(() => isReady);

コルーチンを止める

2つ方法があります。

StopCoroutine(coroutine);

StopAllCoroutines();

StopAllCoroutineの方は、同じオブジェクト上で動いている全コルーチンが停止します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?