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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Q&A

解決済

2回答

789閲覧

オブジェクトの色が一瞬で変更される

yuusukk

総合スコア29

C#

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

0グッド

0クリップ

投稿2019/04/02 07:00

前提・実現したいこと

オブジェクトRight1の色を1秒で白から赤に徐々に変更したい。

発生している問題・エラーメッセージ

色が一瞬で赤に変わってしまう。

該当のソースコード

C#

1using UnityEngine; 2using UnityEngine.EventSystems; 3using UnityEngine.UI; 4 5public class Right1 : MonoBehaviour 6{ 7 float green; 8 float blue; 9 void Start() 10 { 11 green = 255f; 12 blue = 255f; 13 Invoke("DelayMethod", 1.0f); 14 } 15 void Update() 16 { 17 GetComponent<Renderer>().material.color = new Color(255, green, blue, 255); 18 green -= 255f/ Time.deltaTime ; 19 blue -= 255f/ Time.deltaTime ; 20 } 21 void DelayMethod() 22 { 23 Destroy(gameObject); 24 } 25}

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

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

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

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

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

guest

回答2

0

ベストアンサー

すでに指摘していただいている通り、Time.deltaTimeは前フレームからの経過時間(秒)なので、計算がおかしいです。

さらに Color クラスの RGB 値は 0 〜 1 の値を指定する必要があるので、255 を指定するとおかしなことになります。
RGB 値に 0 〜 255 の値を指定したいのであれば、代わりに Color32 クラスを使ってください。

C#

1using UnityEngine; 2 3public class Right1 : MonoBehaviour 4{ 5 private float timeElapsed; 6 7 byte green; 8 byte blue; 9 10 void Start() 11 { 12 green = 255; 13 blue = 255; 14 15 Invoke("DelayMethod", 1.0f); 16 } 17 18 void Update() 19 { 20 timeElapsed += Time.deltaTime; 21 22 green = (byte)(255 - (timeElapsed * 255)); 23 blue = (byte)(255 - (timeElapsed * 255)); 24 25 GetComponent<Renderer>().material.color = new Color32(255, green, blue, 255); 26 } 27 28 void DelayMethod() 29 { 30 Destroy(gameObject); 31 } 32}

投稿2019/04/02 14:22

nskydiving

総合スコア6500

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

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

yuusukk

2019/04/03 07:01

直りました。解答ありがとうございました。
guest

0

色の変更を行う部分で処理がおかしくなっているからです。

c#

1 green -= 255f/ Time.deltaTime; 2 blue -= 255f/ Time.deltaTime;

Time.deltaTimeは前フレームからの経過時間が入っているので
実行する環境にもよりますが、0.01とか、0.02とかが入るはずです。

仮に0.02秒だったとすると、255 / 0.02 = 12750 とかになるので
1フレーム終わったあとにはオブジェクトのRGBA値はRGBA(255.000, -12495.000, -12495.000, 255.000) とかになっています。つまり一瞬で赤になります。

投稿2019/04/02 07:26

hogefugapiyo

総合スコア3302

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

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

yuusukk

2019/04/03 07:01

直りました。解答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問