コルーチンの使い方
コルーチンは、並行処理をしたいときによく使われます
次のいくつかのサンプルから動作を確認しましょう
目次
1秒おきに処理をしたい場合
Update()メソッドを使う方法
前フレームとの時間差(Time.deltaTime)を足していき、合計が1になった時(つまり1秒経過した時)に必要な処理を実行します
using UnityEngine;
public class TimeDeltatimeSample : MonoBehaviour
{
float sum;
float span = 1;
void Update()
{
sum += Time.deltaTime;
if (sum > span)
{
sam = 0;
Debug.Log("Loop");
}
}
}
InvokeRepeating()メソッドを使う方法
指定したメソッドを条件に応じて繰り返します
Update()メソッドは使わない方法になります
using System.Collections;
using UnityEngine;
public class CoroutineSample : MonoBehaviour
{
void Start()
{
// 引数1:繰り返すメソッド(string型) 引数2:繰り返し開始までの時間 引数3:繰り返し間隔
InvokeRepeating(nameof(Loop2), 0, 1);
}
void Loop2()
{
Debug.Log("Loop2");
}
}
StartCoroutine()メソッドを使う方法
繰り返す条件は、メソッド側で設定します
これも同様にUpdate()メソッドは使いません
using System.Collections;
using UnityEngine;
public class CoroutineSample : MonoBehaviour
{
void Start()
{
StartCoroutine(Loop1());
}
private IEnumerator Loop1()
{
while (true)
{
Debug.Log("Loop");
// ここで制御を他のスクリプトに戻します。次の条件が満たされると、その続きから実行されます
yield return new WaitForSeconds(1.0f);
}
}
}
別のスクリプトからコルーチンを止める方法
同じゲームオブジェクトに2つのスクリプトをコンポーネントとしてアタッチしているケースになります
コルーチンを止める処理を記述したスクリプト
using UnityEngine;
public class StopCoruotine : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
GetComponent<CoroutineSample>().Stop();
}
}
}
コルーチンを実行するスクリプト
using System.Collections;
using UnityEngine;
public class CoroutineSample : MonoBehaviour
{
public Coroutine coroutine;
void Start()
{
coroutine = StartCoroutine(Loop1());
}
IEnumerator Loop1()
{
while (true)
{
Debug.Log("Loop");
yield return new WaitForSeconds(1.0f);
}
}
public void Stop()
{
StopCoroutine(coroutine);
}
}
ディスカッション
コメント一覧
まだ、コメントがありません