実現したいこと
- フェードを利用したシーン切り替えを行いたい。
前提
私は現在2Dゲーム制作を行っており、
ブログ及び動画 https://dkrevel.com/makegame-beginner/make-2d-action-scene-change/
を参考にさせて頂いております。
制作中ゲームでは実遊戯を想定したシーン切り替えを行いたいと考えております。
実装目標はステージシーンやステージクリアからタイトル画面へ戻り、
"再度"ステージシーンへの遷移です。
(初回のタイトル画面からステージシーンへのフェードを利用したシーン切り替えは動く)
発生している問題・エラーメッセージ
<シーンが切り替わらない>
現在、
ステージ→中断(ポーズ画面)→タイトル画面
を作成したのですが、
タイトル画面へ切り替え後、”再度”ステージシーンへの切り替え(再度ゲームプレイ)をすることができません。
FadeImage.csの改修が必要であると考えますが私には改良方法が不明であった為、
その方法をご教示頂きたく思います。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class FadeImage : MonoBehaviour 7{ 8 [Header("最初からフェードインが完了しているかどうか")] public bool firstFadeInComp; 9 10 private Image img = null; 11 private int frameCount = 0; 12 private float timer = 0.0f; 13 private bool fadeIn = false; 14 private bool fadeOut = false; 15 private bool compFadeIn = false; 16 private bool compFadeOut = false; 17 18 /// <summary> 19 /// フェードインを開始する 20 /// </summary> 21 public void StartFadeIn() 22 { 23 if (fadeIn || fadeOut) 24 { 25 return; 26 } 27 fadeIn = true; 28 compFadeIn = false; 29 timer = 0.0f; 30 img.color = new Color(1, 1, 1, 1); 31 img.fillAmount = 1; 32 img.raycastTarget = true; 33 } 34 35 /// <summary> 36 /// フェードインが完了したかどうか 37 /// </summary> 38 /// <returns></returns> 39 public bool IsFadeInComplete() 40 { 41 return compFadeIn; 42 } 43 44 /// <summary> 45 /// フェードアウトを開始する 46 /// </summary> 47 public void StartFadeOut() 48 { 49 if (fadeIn || fadeOut) 50 { 51 return; 52 } 53 fadeOut = true; 54 compFadeOut = false; 55 timer = 0.0f; 56 img.color = new Color(1, 1, 1, 0); 57 img.fillAmount = 0; 58 img.raycastTarget = true; 59 } 60 61 /// <summary> 62 /// フェードアウトイン変数の中身確認 63 /// </summary> 64 /// <returns></returns> 65 public bool CheckFadeOut() 66 { 67 return fadeOut ; 68 } 69 public bool CheckFadeIn() 70 { 71 return fadeIn; 72 } 73 74 /// <summary> 75 /// フェードアウトを完了したかどうか 76 /// </summary> 77 /// <returns></returns> 78 public bool IsFadeOutComplete() 79 { 80 return compFadeOut; 81 } 82 83 /// <summary> 84 /// フェードアウト完了フラグの変更 85 /// </summary> 86 /// <returns></returns> 87 public void ChengeFadeOutComplete() 88 { 89 compFadeOut = true; 90 } 91 92 void Start() 93 { 94 img = GetComponent<Image>(); 95 if (firstFadeInComp) 96 { 97 FadeInComplete(); 98 } 99 else 100 { 101 StartFadeIn(); 102 } 103 } 104 105 106 void Update() 107 { 108 //シーン移行時の処理の重さでTime.deltaTimeが大きくなってしまうから2フレーム待つ 109 if (frameCount > 2) 110 { 111 if (fadeIn) 112 { 113 FadeInUpdate(); 114 } 115 else if (fadeOut) 116 { 117 FadeOutUpdate(); 118 } 119 } 120 ++frameCount; 121 } 122 123 //フェードイン中 124 private void FadeInUpdate() 125 { 126 if (timer < 1f) 127 { 128 img.color = new Color(1, 1, 1, 1 - timer); 129 img.fillAmount = 1 - timer; 130 } 131 else 132 { 133 FadeInComplete(); 134 } 135 timer += Time.deltaTime; 136 } 137 138 //フェードアウト中 139 private void FadeOutUpdate() 140 { 141 if (timer < 1f) 142 { 143 img.color = new Color(1, 1, 1, timer); 144 img.fillAmount = timer; 145 } 146 else 147 { 148 FadeOutComplete(); 149 } 150 timer += Time.deltaTime; 151 } 152 153 //フェードイン完了 154 private void FadeInComplete() 155 { 156 img.color = new Color(1, 1, 1, 0); 157 img.fillAmount = 0; 158 img.raycastTarget = false; 159 timer = 0.0f; 160 fadeIn = false; 161 compFadeIn = true; 162 } 163 164 //フェードアウト完了 165 private void FadeOutComplete() 166 { 167 img.color = new Color(1, 1, 1, 1); 168 img.fillAmount = 1; 169 img.raycastTarget = false; 170 timer = 0.0f; 171 fadeOut = false; 172 compFadeOut = true; 173 } 174} 175
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class title : MonoBehaviour { [Header("フェード")] public FadeImage fade; [Header("ゲームスタート時に鳴らすSE")] public AudioClip startSE; private bool firstPush = false; private bool goNextScene = false; bool checkIn; bool checkOut; bool checkOutComplete; // スタートボタンを押されたら呼ばれる public void PressSrart() { Debug.Log("Press Start"); if (!firstPush) { GManager.instance.PlaySE(startSE); // 次のシーンへ行く命令 Debug.Log("Go Next Scene!"); checkIn = fade.CheckFadeIn(); Debug.Log("FadeIn is" + checkIn); checkOut = fade.CheckFadeOut(); Debug.Log("FadeOut is" + checkOut); fade.StartFadeOut(); checkIn = fade.CheckFadeIn(); Debug.Log("FadeIn is" + checkIn); checkOut = fade.CheckFadeOut(); Debug.Log("FadeOut is" + checkOut); firstPush = true; } firstPush = false; } private void Update() { goNextScene = false; if (!goNextScene && fade.IsFadeOutComplete()) { Debug.Log("Go Scene1 again"); SceneManager.LoadScene("stage1"); goNextScene = true; } } }
試したこと
- 再度ゲームプレイ時のタイトル画面のフェードアウトから動作しません。
- フェードアウトが完了していないので title.cs の Update() の if (!goNextScene && fade.IsFadeOutComplete()) 以降は動いていない。
- タイトル画面のstartボタン押下時のSE音は動作します。
- fade.StartFadeOut(); がうまく動作していない?
- 変数 FadeOut は再度ゲームプレイ(start再押下)時前に false になっている。
補足情報
Unity2021.3.23f1
※補足
各所スクリプトはブログ・動画を想定下さい。
![guest](/img/icon/icnUserSample.jpg)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/06/13 13:26
2023/06/13 14:19
2023/06/14 08:01
2023/06/17 13:44 編集
2023/06/23 11:56 編集
2023/06/26 04:49 編集
2023/06/23 12:21
2023/06/25 09:00
2023/06/25 09:38
2023/06/25 10:53
2023/06/26 11:53 編集
2023/06/27 08:52 編集
2023/06/27 09:31