【ハルシオンブログ】コルーチン使っててちょっと嵌ったのでメモ
こんにちは。
大坂です。
急に寒くなってきましたね。
知り合いでも風邪をひいてる人がちらほら…。
僕も鼻水と咳が止まりませんが…まぁ気にしないでおきます。
皆様体調にはお気を付けを。
さて、コルーチンを呼び出しまくってて動かないなーってなってちょっと嵌ったのでメモ的なヤツ。
結論から言うと呼び出し元のオブジェクト消したら処理が途中で止まったってだけですが…
こんな感じで書いたらダメだったよってやつ。
ポップアップで他のオブジェクトのコルーチンを呼び出してそのままポップアップオブジェクトを削除した。
呼び出された方。
コルーチンからさらにコールチンを呼び出して2個目のコルーチンが終わってさらに処理をしたい。
実行ログ

最初に呼ばれたコルーチンの終了が出てませんね。
対策は一応こんな感じ。
ポップアップからは呼び出す先のコルーチンを実行するメソッドを呼ぶようにして、メソッドからコルーチンを呼ぶように変更。
動いたのでまぁこれでいいんでしょうかね…。
たいして変わりませんが、ポップアップのコード
呼び出された方
こちらも実行ログ

これで1個目のコルーチンの終了までログがちゃんと出てますね。
ということで、こんなことをする人がいるのかはよくわかりませんが、想定通り動くようになったのでメモです。
ではまたノシ
大坂です。
急に寒くなってきましたね。
知り合いでも風邪をひいてる人がちらほら…。
僕も鼻水と咳が止まりませんが…まぁ気にしないでおきます。
皆様体調にはお気を付けを。
さて、コルーチンを呼び出しまくってて動かないなーってなってちょっと嵌ったのでメモ的なヤツ。
結論から言うと呼び出し元のオブジェクト消したら処理が途中で止まったってだけですが…
こんな感じで書いたらダメだったよってやつ。
public class BlogTestPopup : MonoBehaviour {
public void CallBlogTestCorutine() {
StartCoroutine(GameObject.Find("BlogTest").GetComponent().BlogTestCoroutine());
Destroy(gameObject);
}
}
ポップアップで他のオブジェクトのコルーチンを呼び出してそのままポップアップオブジェクトを削除した。
呼び出された方。
public class BlogTest : MonoBehaviour {
public IEnumerator BlogTestCoroutine() {
Debug.Log("BlogTestCoroutine開始");
yield return StartCoroutine(BlogTestCoroutine_2());
Debug.Log("BlogTestCoroutine終了");
}
public IEnumerator BlogTestCoroutine_2() {
Debug.Log("BlogTestCoroutine_2開始");
yield return null;
Debug.Log("BlogTestCoroutine_2終了");
}
コルーチンからさらにコールチンを呼び出して2個目のコルーチンが終わってさらに処理をしたい。
実行ログ

最初に呼ばれたコルーチンの終了が出てませんね。
対策は一応こんな感じ。
ポップアップからは呼び出す先のコルーチンを実行するメソッドを呼ぶようにして、メソッドからコルーチンを呼ぶように変更。
動いたのでまぁこれでいいんでしょうかね…。
たいして変わりませんが、ポップアップのコード
public class BlogTestPopup : MonoBehaviour {
public void CallBlogTestMethod() {
GameObject.Find("BlogTest").GetComponent().BlogTestMethod();
Destroy(gameObject);
}
}
呼び出された方
public class BlogTest : MonoBehaviour {
public void BlogTestMethod() {
StartCoroutine(BlogTestCoroutine());
}
public IEnumerator BlogTestCoroutine() {
Debug.Log("BlogTestCoroutine開始");
yield return StartCoroutine(BlogTestCoroutine_2());
Debug.Log("BlogTestCoroutine終了");
}
public IEnumerator BlogTestCoroutine_2() {
Debug.Log("BlogTestCoroutine_2開始");
yield return null;
Debug.Log("BlogTestCoroutine_2終了");
}
こちらも実行ログ

これで1個目のコルーチンの終了までログがちゃんと出てますね。
ということで、こんなことをする人がいるのかはよくわかりませんが、想定通り動くようになったのでメモです。
ではまたノシ
Category: 開発日記(Unity)
« 【ハルシオンブログ】ネタがないので小ネタを二つ。デジゲー飲み会まだ空いてますよー! | ポケガ1は勝手にやってくれたようだけど、ポケガ2中国語対応しちゃうよ? »
コメント
そういう時は、適当なマネージャークラス(Singletonとかで)からコルーチン呼ぶようにしとくと楽です。
よくミスるのが、StartCoroutineをしたけど、そのObjectがActiveになっていないのでエラー出るやつ。
しろくろ #- | URL | 2017/10/05 16:53 [edit]
Re: タイトルなし
しろくろさん
コメントありがとうございます!
確かにそういった工夫をすると楽そうですね!
Objectが非アクティブ状態で呼び出すのは僕もよくやります…orz
株式会社ハルシオンシステム #- | URL | 2017/10/06 10:35 [edit]
| h o m e |