FC2ブログ
10 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 12

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【ハルシオンブログ】コルーチンのお話。Aコルーチン中に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)

tb 0 : cm 0   

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://halcyonsystemblog.blog.fc2.com/tb.php/646-b4b76bd5
この記事にトラックバックする(FC2ブログユーザー)