重要なお知らせ:誠に勝手ながら当サイト(unityroom質問掲示板)は2021年10月31日をもちまして閉鎖させていただきます。ご利用誠にありがとうございました。

unityroom.com については引き続きご利用いただけます。

0 支持
68 閲覧

UI TextをフェードアウトしたくてWaitForSecondsを使って調整をしようとしました。
コルーチン処理はDebug.Logで確認すると通っているみたいなのですが、WaitForSeconds処理だけが全く実行されず、使い方を色々調べてもさっぱり分からなくなりました。
あと、テキストもフェードアウトも全くしないのも同時に悩んでいます。
物凄く初歩的なことだと思うのですが、どうか、お分かりになられる方、ご教授お願いいたします。

以下、コードになります。

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

public class TextFadeout : MonoBehaviour
{
    public Text text;
    int a = 255;

    // Start is called before the first frame update
    void Start()
    {
        for (int i = 0; i < 255; i++)
        {
            text.color = new Color(0, 0, 0, a);
            a--;
            Debug.Log(a);

            StartCoroutine(Wait());
        }
    }

    // Update is called once per frame
    void Update()
    {

    }

    IEnumerator Wait()
    {
        Debug.Log("wait");
        yield return new WaitForSeconds(0.3f);
    }
}
初心者 (220 ポイント) | 68 閲覧

ログインまたはユーザー登録してから回答してください。

回答 1

0 支持

Start()の中でコルーチンを1回だけ呼び出して、for文をWait()の中に組み込み、for文の中でyield return すれば動作します。

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

public class TextFadeout : MonoBehaviour
{
    public Text text;
    int a = 255;

    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(Wait());
    }

    // Update is called once per frame
    void Update()
    {

    }

    IEnumerator Wait()
    {
        for (int i = 0; i < 255; i++)
        {
             text.color = new Color(0, 0, 0, a);
             a--;
             Debug.Log(a);
             yield return new WaitForSeconds(0.3f);
        }
    }
}
初心者 (440 ポイント)
0
アキオ様。
有難う御座います!!
なるほど。コルーチンは1回で処理するものなんですね。
色々触っているうちに何度もコルーチンを呼び出した方が良いのかな…と思い、やってみました。
教えて頂いた通りやってみたら、うまくいきました。
ありがとうございました。

関連する質問はありません。

2021-02-08 質問・回答をMarkdownで入力できるようにしました。
2020-09-03 新たなスパム対策を導入しました。

180 質問

161 回答

165 コメント

221 ユーザー