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

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

詳細はこちら
Unity

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

Q&A

解決済

1回答

2859閲覧

unity フェードインフェードアウトについて

yoshiteru21

総合スコア44

Unity

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

0グッド

0クリップ

投稿2019/12/19 02:20

フェードイン(Imageが透明になる)フェードアウト(徐々に不透明になる)するスクリプトを作成しました。
他のスクリプトでisFadeOut=trueにし、スペースボタン入力でisFadeIn=trueにしているのですが、
isFadeIn=trueにして数秒後に徐々に明るくなったりと、処理が遅いです。
原因は一体何なのでしょうか?

フェードイン、フェードアウトのスクリプト using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; //パネルのイメージを操作するのに必要 public class FadeContraller : MonoBehaviour { float fadeSpeed = 0.02f; //透明度が変わるスピードを管理 float red, green, blue, alfa; //パネルの色、不透明度を管理 public bool isFadeOut = false; //フェードアウト処理の開始、完了を管理するフラグ public bool isFadeIn = false; //フェードイン処理の開始、完了を管理するフラグ Image fadeImage; //透明度を変更するパネルのイメージ GameObject AntenCanvas; void Start() { AntenCanvas = GameObject.Find("AntenCanvas"); fadeImage = GetComponent<Image>(); red = fadeImage.color.r; green = fadeImage.color.g; blue = fadeImage.color.b; alfa = fadeImage.color.a; DontDestroyOnLoad(AntenCanvas); } void Update() { if (isFadeIn) { StartFadeIn(); } if (isFadeOut) { StartFadeOut(); } } void StartFadeIn() { alfa -= fadeSpeed / 4; //a)不透明度を徐々に下げる SetAlpha(); //b)変更した不透明度パネルに反映する if (alfa <= 0) { //c)完全に透明になったら処理を抜ける isFadeIn = false; fadeImage.enabled = false; //d)パネルの表示をオフにする } } void StartFadeOut() { fadeImage.enabled = true; // a)パネルの表示をオンにする alfa += fadeSpeed / 4; // b)不透明度を徐々にあげる SetAlpha(); // c)変更した透明度をパネルに反映する if (alfa >= 1) { // d)完全に不透明になったら処理を抜ける isFadeOut = false; } } void SetAlpha() { fadeImage.color = new Color(red, green, blue, alfa); } } コード
TimeCount = 3; TimeCount_2 = 1; void Update() { if (IventStart) //イベント開始。画面上下に黒帯 { TimeCount -= Time.deltaTime; Statuscanvas.SetActive(false); fadecontraller_1.isFadeOut = true; fadecontraller_2.isFadeOut = true; if (TimeCount <= 0) //時間経過でキャラが動き始める { playerScript.rigidbody2D.velocity = new Vector2(3, playerScript.rigidbody2D.velocity.y); //キャラが歩き始める TimeCount_2 -= Time.deltaTime; } if (TimeCount_2 <= 0) //時間経過でキャラが停止 { playerScript.rigidbody2D.velocity = new Vector2(0, playerScript.rigidbody2D.velocity.y); } if (Input.GetKeyDown("space")) { IventStart = false; fadecontraller_1.isFadeIn = true; } } } コード

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

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

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

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

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

guest

回答1

0

ベストアンサー

フェードを行うスクリプトの中にTime.deltaTimeがありません
イベント側にはちゃんと入っているので、フェード側もこれを使った形式に書き換えましょう

投稿2019/12/19 07:21

izmktr

総合スコア2856

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

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

yoshiteru21

2019/12/19 07:47

そういうからくりだったのですね。 ありがとうございました。
yoshiteru21

2019/12/19 08:41

どうにも修正できません。 すみませんが、どうしてフェードインの方にもTime.deltatimeを入れる必要があるのでしょうか?
izmktr

2019/12/19 16:14

Updateは定期的に呼ばれる関数ですが、具体的に何秒おきに呼ばれるかは不定です 1秒に100回呼んでもいいし、1回しか呼ばなくてもいい そのため、Time.deltaTimeを使ってどの間隔で呼ばれても同じ用に動くように調整する必要があります
yoshiteru21

2019/12/20 03:50

理解できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問