質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1895閲覧

WaitForSecondsについて

kumao23

総合スコア10

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/07/19 13:42

編集2021/07/19 13:44

前提・実現したいこと

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); }

}

色んな方々が教えてくれているサイトを探しまくってやってみたつもりなのですが、何が悪いのか完全にお手上げ状態になったので、こちらでご質問させて頂きました。
どうか、お分かりになられる方、ご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そのコードではゲーム開始と同時にWait関数を255回呼び出すので意図した動作にはならないです。
コルーチンを使う場合は遅延したい処理も関数の中に入れるように心掛けて下さい。
若しくはIEnumerator Start()に変えて待ち合わせを行うよう修正して下さい。

それともう一つ修正点がありColorを使う場合の数値範囲は0~1fとなります。
int a = 255とした場合は255fで割る必要があります。
若しくはbyte a = 255としてColor32を使うように修正して下さい。

合わせてWaitForSeconds(0.3f)も完全に消えるには76.5秒掛かるのでWaitForSeconds(0.01f)に変えると判り易いかと思います。

下記は修正例のコードです。

C#

1using System.Collections; 2using UnityEngine; 3using UnityEngine.UI; 4 5public class TextFadeout : MonoBehaviour 6{ 7 public Text text; 8 int a = 255; 9 10 void Start() 11 { 12 StartCoroutine( Wait() ); 13 } 14 15 IEnumerator Wait() 16 { 17 for( int i = 0; i < 255; i++ ) 18 { 19 text.color = new Color( 0, 0, 0, a / 255f ); 20 a--; 21 Debug.Log( a ); 22 yield return new WaitForSeconds( 0.01f ); 23 } 24 } 25}

投稿2021/07/19 14:59

編集2021/07/19 15:51
Hawn

総合スコア1222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kumao23

2021/07/19 23:33

Hawn様。 有難う御座います! 当初はコルーチン処理内に繰り返し処理を入れていたのですが、全く待機時間を処理してもらえず、試行錯誤していくうちに待機時間処理だけを繰り返してみよう、とこんなコードに行きついてしまいました。 教えて頂いたコードでやってみると正常に動作いたしました。まだまだ勉強不足です。 あと、colorの処理については、全く理解できていなかったです。0~1fまでの範囲しかないっていうのを知らずにやっていました。 本当に基礎的な部分から手探りでやっていますので、幼稚な質問が恥ずかしいのですが、やはり教えてもらわないと解決できないので本当に助かります。 Hawn様は何でUnityをマスターされていますか?やはり沢山触って経験を積むのが一番確実な覚え方なのかな…。
Hawn

2021/07/20 06:25 編集

>Hawn様は何でUnityをマスターされていますか?やはり沢山触って経験を積むのが一番確実な覚え方なのかな…。 何か新しい事を覚える際はUnityマニュアルで検索して読むのが先決です。 後はテラシュールブログなどの様な詳しい解説があるブログなどを参考にすると良いです。 Unityの本を1,2冊買ってやるのも良いかと思います。 Unityの機能自体はグラフィック関係をやらなければ必要な事は一週間もあれば覚えてしまえるので、 以降はC#の本や記事を読むだけでも十分です。
kumao23

2021/07/20 08:18

なるほど。色々教えていただきありがとうございます。 本は4,5冊ほど入門書等を読んでやってみましたが、いざ手放しで自分から作っていこうとするとすっかり飛んでしまって…。身に付くまではやっぱりUnityマニュアルが大切なんですね。 あの字ばっかりの構成が苦手で遠ざけておりました。これからも勉強頑張ります。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問