【ハルシオンブログ】Unityのコルーチンで値を返す方法。いくつか方法あるぽいけど、その一つを紹介。
こんにちは。坂内っす。
本日のお題は「コルーチンで結果を返したい」について。
コルーチンってIEnumratorが戻り値だから、何も返せないっすよね。
そんな時、以下のようにやると値を返せます。

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

実際に10という数値を持っているのが「CoroutineCount」のメソッド内。
CoroutineメソッドでCoroutineCountから10を返してもらうのに、coroutine.Currentを使ってます。
OnClickButtonの中から
これをやろうとすると、StartCoroutineで2秒待たないため、coroutine.Currentが取れなくてエラーになります。
yield return StartCoroutineでちゃんと待たないといけないため、コルーチンの中でやるのがええかと思います。
では、実際に以下のコードの場合は何が返ってくるのか。
ボタンを押した瞬間にテキストに出力。

UnityEngine.WaitforSecondsが返ってきました。
coroutine.Currentは「yield return で戻ってきてる何か」を持ってる感じなんですね。
って感じで、返そうと思えばコルーチン内のモノはなんでも返せそうですね!
今後使っていきます!
ということで、今日はここまで!あでゅ~ノシ
本日のお題は「コルーチンで結果を返したい」について。
コルーチンって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)
« 【ハルシオンブログ】配列に特定の値を入れて初期化するとき | 【ハルシオンブログ】BuildSettingsに設定したシーンの数とか一覧がほしいとき »
コメント
| h o m e |