質問: new Color(red, green, blue, alfa); } // スタートボタンを押したら実行する public void GameStart() { SceneManager.LoadScene("Opening"); } } ```
回答: `GameStart()`を呼び出すだけだとそのままシーン遷移するのですぐ切り替わるのは仕様です。 FadeOut処理を呼んで、なおかつフェードアウトが終わったことを検知してから遷移処理を始める必要があります。 あんまりきれいなやり方じゃないですが、下記ならたぶん動くと思います。 `changeSceneName`という変数名にシーン名が入っていれば、フェードアウト後にそのシーンに遷移します。変数にセットされていなければフェードアウトだけして終わります。 なのでGameStartでは、`isFadeOut`をtrueにしてフェードアウト処理を開始するのと共に、遷移したいシーン名をセットしています。 ``` using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; //パネルのイメージを操作するのに必要 using UnityEngine.SceneManagement; public class FadeController : MonoBehaviour { float fadeSpeed = 0.02f; //透明度が変わるスピードを管理 float red, green, blue, alfa; //パネルの色、不透明度を管理 public bool isFadeOut = false; //フェードアウト処理の開始、完了を管理するフラグ public bool isFadeIn = false; //フェードイン処理の開始、完了を管理するフラグ public string changeSceneName; // フェードアウト処理後、シーン遷移する場合のシーン名 Image fadeImage; //透明度を変更するパネルのイメージ void Start() { fadeImage = GetComponent(); red = fadeImage.color.r; green = fadeImage.color.g; blue = fadeImage.color.b; alfa = fadeImage.color.a; } void Update() { if (isFadeIn) { StartFadeIn(); } if (isFadeOut) { StartFadeOut(); } } void StartFadeIn() { alfa -= fadeSpeed; //a)不透明度を徐々に下げる SetAlpha(); //b)変更した不透明度パネルに反映する if (alfa <= 0) { //c)完全に透明になったら処理を抜ける isFadeIn = false; fadeImage.enabled = false; //d)パネルの表示をオフにする } } void StartFadeOut() { fadeImage.enabled = true; // a)パネルの表示をオンにする alfa += fadeSpeed; // b)不透明度を徐々にあげる SetAlpha(); // c)変更した透明度をパネルに反映する if (alfa >= 1) { // d)完全に不透明になったら処理を抜ける isFadeOut = false; if(changeSceneName != "") { Debug.Log(changeSceneName + "に遷移します。"); SceneManager.LoadScene(changeSceneName); } } } void SetAlpha() { fadeImage.color = new Color(red, green, blue, alfa); } // スタートボタンを押したら実行する public void GameStart() { isFadeOut = true; changeSceneName = "Opening"; } } ```