🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

解決済

1回答

1340閲覧

【Unity】text.colorの値の変化が上手くいかない

Y0241-N

総合スコア1066

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

0クリップ

投稿2019/11/27 09:02

実現したいこと

コルーチンを使ってテキストのcolor.aを変化させ、フェードを実行しているのですが、
一回フェードイン、フェードインを行った後に、もう一度実行するとcolor.aの値を変化させる処理は
実行されているのですが、見た目上は変化されず表示できずに困っています。

こうなる原因はフェードアウトの処理部分に原因があるのかな?とは思っているのですが、
はっきりとした理由が分かりません。どのようにすれば二回目以降も問題なくフェードイン/フェードアウトの処理を実行できますでしょうか?

イメージ説明

フェードの処理スクリプト

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using TMPro; 6 7public class DisplayLookOnStatus : MonoBehaviour 8{ 9 10 private GameObject Player; 11 private LockOnTargetDetector lockOnTargetDetector; 12 public TextMeshProUGUI[] Status; 13 int i; 14 float dis; 15 bool one; 16 public float ol = 0.02f; 17 void Start() 18 { 19 i = 0; 20 one = true; 21 22 Player = KITEIclass.Player; 23 lockOnTargetDetector = KITEIclass.lockOnTargetDetector; 24 } 25 26 void LateUpdate() 27 { 28 if (Input.GetButtonDown("R_StickPress")) 29 { 30 if(lockOnTargetDetector.hitsOb.Count > 0) 31 { 32 if(one) 33 { 34 i = 0; 35 StartCoroutine(FadeIN()); 36 one = false; 37 } 38 }else if(lockOnTargetDetector.hitsOb.Count <= 1) 39 { 40 if(one == false) 41 { 42 i = Status.Length -1; 43 SelectValveActivator.i = 0; 44 StartCoroutine(FadeOUT()); 45 one = true; 46 } 47 } 48 } 49 50 if(lockOnTargetDetector.hitsOb.Count > 0) 51 { 52 dis = Vector2.Distance(Player.transform.position,lockOnTargetDetector.hitsOb[SelectValveActivator.i].transform.position); 53 Status[2].text = " ターゲットまでの距離 : " + dis.ToString("f1") + "m"; 54 } 55 } 56 57 IEnumerator FadeOUT() 58 { 59 while(i >= 0) 60 { 61 Status[i].color -= new Color(0, 0, 0, ol); 62 63 if(Status[i].color.a <= 0) 64 { 65 if(i >= 1) 66 { 67 i--; 68 } 69 } 70 yield return null; 71 } 72 } 73 IEnumerator FadeIN() 74 { 75 while(i < Status.Length) 76 { 77 Status[i].color += new Color(0, 0, 0, ol); 78 Debug.Log("Status[i].color.a : " + Status[i].color.a); 79 80 if(i == 1) 81 { 82 Status[1].text = " 切り替え可能なターゲット数 : " + (lockOnTargetDetector.hitsOb.Count - 1); 83 } 84 85 if(Status[i].color.a >= 1) 86 { 87 if(i < Status.Length) 88 { 89 i++; 90 } 91 } 92 yield return null; 93 } 94 } 95} 96

試したこと

Debug.Logで色々な値を観察しながら原因を探っていたのですが、恐らくStatus[i].color.aの値が0~1の範囲を超えてしまっている
ことが原因ではないかと考えています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

さっと目を通しただけですが、FadeOUTが走りっぱなしになっているのではないですかね?
i=0の時のフェードアウト処理が終わった時のデクリメントが走らないので、一番外側のwhileを抜けないのではないかと思います。

投稿2019/11/27 23:28

YAmaGNZ

総合スコア10469

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

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

Y0241-N

2019/11/28 03:11

回答ありがとうございます。 ご指摘の通り、FadeOUTのWhileの条件を変更したところうまく回りました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問