【ハルシオンブログ】コルーチンのお話。Aコルーチン中にAコルーチンを止めてBコルーチンを動かす方法。
おはようございます。坂内です。
さっそくUnityのお話。
コルーチン使ってますか?
Cor1が終わってからCor2を動かしたいとき。
もちろんこんな結果

こういう書き方しちゃってます?
ちゃんとCor1が終わってからCor2を動かすなら、こう書くのがいいのかな?
もちろん結果は同じですけどね。

さて、それではCor1をやっている途中(Cor1が開始されてから1秒後)で処理をCor2に移したい場合はどうでしょうか。
IEnumeratorの変数を作って、そいつでCor1を動かします。
Cor2に移るタイミングでStopCoroutineでCor1を止めてからCor2を行います。
結果は

Cor1のはじめの待ち時間2秒のうち、1秒経ったところで、Cor2が開始され、ログとしては2のみが出力されました。
こんな感じでIEnumratorにコルーチンを突っ込んで実行してあげることで、Aコルーチン処理中にBコルーチン処理を強制的に実行することができます。
ということで、本日は簡単なコルーチンのお話でした。
あでゅ~ノシ
さっそくUnityのお話。
コルーチン使ってますか?
Cor1が終わってからCor2を動かしたいとき。
using System.Collections;
using UnityEngine;
public class Test20191028 : MonoBehaviour
{
IEnumerator Start()
{
StartCoroutine(Cor1());
yield return new WaitForSeconds(2f);
StartCoroutine(Cor2());
}
private IEnumerator Cor1() {
yield return new WaitForSeconds(2f);
Debug.Log("1");
yield return new WaitForSeconds(2f);
}
private IEnumerator Cor2() {
yield return new WaitForSeconds(2f);
Debug.Log("2");
yield return new WaitForSeconds(2f);
}
}
もちろんこんな結果

こういう書き方しちゃってます?
ちゃんとCor1が終わってからCor2を動かすなら、こう書くのがいいのかな?
using System.Collections;
using UnityEngine;
public class Test20191028 : MonoBehaviour
{
IEnumerator Start()
{
yield return StartCoroutine(Cor1());
yield return StartCoroutine(Cor2());
}
private IEnumerator Cor1() {
yield return new WaitForSeconds(2f);
Debug.Log("1");
yield return new WaitForSeconds(2f);
}
private IEnumerator Cor2() {
yield return new WaitForSeconds(2f);
Debug.Log("2");
yield return new WaitForSeconds(2f);
}
}
もちろん結果は同じですけどね。

さて、それではCor1をやっている途中(Cor1が開始されてから1秒後)で処理をCor2に移したい場合はどうでしょうか。
using System.Collections;
using UnityEngine;
public class Test20191028 : MonoBehaviour
{
private IEnumerator coroutine;
IEnumerator Start()
{
coroutine = Cor1();
StartCoroutine(coroutine);
yield return new WaitForSeconds(1f);
StopCoroutine(coroutine);
coroutine = Cor2();
StartCoroutine(coroutine);
}
private IEnumerator Cor1() {
yield return new WaitForSeconds(2f);
Debug.Log("1");
yield return new WaitForSeconds(2f);
}
private IEnumerator Cor2() {
yield return new WaitForSeconds(2f);
Debug.Log("2");
yield return new WaitForSeconds(2f);
}
}
IEnumeratorの変数を作って、そいつでCor1を動かします。
Cor2に移るタイミングでStopCoroutineでCor1を止めてからCor2を行います。
結果は

Cor1のはじめの待ち時間2秒のうち、1秒経ったところで、Cor2が開始され、ログとしては2のみが出力されました。
こんな感じでIEnumratorにコルーチンを突っ込んで実行してあげることで、Aコルーチン処理中にBコルーチン処理を強制的に実行することができます。
ということで、本日は簡単なコルーチンのお話でした。
あでゅ~ノシ
Category: 開発日記(Unity)
« 【ハルシオンブログ】Getterしかないプロパティって1行で書けるのね。 | 【ハルシオンブログ】Subsequence的な文字列の検索 »
コメント
| h o m e |