FC2ブログ
11 «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.31.» 01

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

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

 

【ハルシオンブログ】Unityのコルーチンで値を返す方法。いくつか方法あるぽいけど、その一つを紹介。 

こんにちは。坂内っす。

本日のお題は「コルーチンで結果を返したい」について。

コルーチンってIEnumratorが戻り値だから、何も返せないっすよね。

そんな時、以下のようにやると値を返せます。



こんな感じの画面。
ボタンを押すと、2秒後にテキストに「10」という文字を出す。

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Script_20190225 : MonoBehaviour
{
[SerializeField]
private Text txtView;

void Start()
{
txtView.text = "";
}

public void OnClickButton() {
StartCoroutine(Coroutine());
}

private IEnumerator Coroutine() {
IEnumerator corutine = CoroutineCount();
yield return StartCoroutine(corutine);
txtView.text = "「" + (int)corutine.Current + "」";
}

private IEnumerator CoroutineCount() {
int retNum = 10;
yield return new WaitForSeconds(2f);
yield return retNum;
}
}


ボタンを押した2秒後に以下の画面になります。


実際に10という数値を持っているのが「CoroutineCount」のメソッド内。
CoroutineメソッドでCoroutineCountから10を返してもらうのに、coroutine.Currentを使ってます。

OnClickButtonの中から
        IEnumerator corutine = CoroutineCount();
StartCoroutine(corutine);
txtView.text = "「" + (int)corutine.Current + "」";


これをやろうとすると、StartCoroutineで2秒待たないため、coroutine.Currentが取れなくてエラーになります。
yield return StartCoroutineでちゃんと待たないといけないため、コルーチンの中でやるのがええかと思います。

では、実際に以下のコードの場合は何が返ってくるのか。

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Script_20190225 : MonoBehaviour
{
[SerializeField]
private Text txtView;

void Start()
{
txtView.text = "";
}

public void OnClickButton() {
IEnumerator corutine = CoroutineCountSec();
StartCoroutine(corutine);
txtView.text = corutine.Current.ToString();
}

private IEnumerator CoroutineCountSec() {
yield return new WaitForSeconds(2f);
}
}


ボタンを押した瞬間にテキストに出力。



UnityEngine.WaitforSecondsが返ってきました。

coroutine.Currentは「yield return で戻ってきてる何か」を持ってる感じなんですね。

って感じで、返そうと思えばコルーチン内のモノはなんでも返せそうですね!
今後使っていきます!


ということで、今日はここまで!あでゅ~ノシ
スポンサーサイト



Category: 開発日記(Unity)

tb 0 : cm 0   

コメント

コメントの投稿

Secret

トラックバック

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