Coroutine(コルーチン)について初心者の方でもわかりやすく解説します。
Coroutineって何?
Coroutineは、ゲーム作りで使う道具のようなもので、特に時間をかけたり、待ったりする作業に役立ちます。通常の作業が直ぐに行われるのに対して、Coroutineは時間をかけて実行されます。
例えば3秒間時間をあけて何か処理を行いたいときの処理を作成するときなどに使うことができます。
Coroutineの基本
Coroutineを使うためには、簡単な構造を知っておく必要があります。以下はその例です。
コルーチンの関数を書くときはIEnumerator 関数名()と書きます。
IEnumerator MyCoroutine()
{
// 何か処理
yield return new WaitForSeconds(2f);
// 別の処理
}
この例では、yield returnで少し待ったり、waitForSecondsで指定した秒数だけ待ったりすることができます。
使い方の具体例
もっと具体的な例を挙げてみましょう。以下の例では、オブジェクトを指定した位置までスムーズに移動させるCoroutineを作っています。
IEnumerator MoveObject(Vector3 targetPosition, float duration)
{
float time = 0f;
Vector3 initialPosition = transform.position;
while (time < duration)
{
transform.position = Vector3.Lerp(initialPosition, targetPosition, time / duration);
time += Time.deltaTime;
yield return null;
}
// 移動が終わった後の処理
Debug.Log("オブジェクトが成功裏に移動しました!");
}
使い方の具体例2
以下の例では、赤い球体を生成した後に3秒間待ち青い球体を生成するCoroutineを作っています。
生成するオブジェクトはこちらの記事でprefabにした球体を使用しています。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
public GameObject[] Prefabs;
void Start()
{
StartCoroutine("Sphere");
}
void Update()
{
}
IEnumerator Sphere()
{
//赤の球体を生成する
Instantiate(Prefabs[0], new Vector3(0, 0, 0), Quaternion.identity);
//3秒間待つ
yield return new WaitForSeconds(3);
//青色の球体を生成する
Instantiate(Prefabs[1], new Vector3(0, 0, 0), Quaternion.identity);
}
}
コルーチンの関数を実行するにはStartCoroutine(“関数名”);と書きます。
Instantiate~でプレファブ(赤い球体)が生成されます。
yield return new WaitForSeconds(止めたい秒数);で指定した秒数止まります。
その後処理が再開し青い球体が生成されます。

注意点
Coroutineを使う時には、無駄な処理を避けるために気をつけることがあります。例えば、yield returnnullは次のフレームまで待つことなので、使い方には注意が必要です。