Unity 2019.4.9f1(64bit)を使用
シーン開始時にフェードアウトを実行したいのですが
エディターのPlayボタンを押した後、
実行完了時のログが表示されるだけでフェードアウト自体が実行されません
フェードインアウトのコードはこちらのFaceCamera2を使用しています。
Inspectorでスライダーを動かしたときはフェードアウトが出来ました。
Fade.cs
C#
1public class Fade : MonoBehaviour 2{ 3 IFade fade; 4 5 void Start () 6 { 7 Init (); 8 fade.Range = cutoutRange; 9 } 10 11 float cutoutRange; 12 13 void Init () 14 { 15 fade = GetComponent<IFade> (); 16 } 17 18 void OnValidate () 19 { 20 Init (); 21 fade.Range = cutoutRange; 22 } 23 24 IEnumerator FadeoutCoroutine (float time, System.Action action) 25 { 26 float endTime = Time.timeSinceLevelLoad + time * (cutoutRange); 27 28 var endFrame = new WaitForEndOfFrame (); 29 30 while (Time.timeSinceLevelLoad <= endTime) { 31 cutoutRange = (endTime - Time.timeSinceLevelLoad) / time; 32 fade.Range = cutoutRange; 33 yield return endFrame; 34 } 35 cutoutRange = 0; 36 fade.Range = cutoutRange; 37 38 if (action != null) { 39 action (); 40 } 41 } 42 43 IEnumerator FadeinCoroutine (float time, System.Action action) 44 { 45 float endTime = Time.timeSinceLevelLoad + time * (1 - cutoutRange); 46 47 var endFrame = new WaitForEndOfFrame (); 48 49 while (Time.timeSinceLevelLoad <= endTime) { 50 cutoutRange = 1 - ((endTime - Time.timeSinceLevelLoad) / time); 51 fade.Range = cutoutRange; 52 yield return endFrame; 53 } 54 cutoutRange = 1; 55 fade.Range = cutoutRange; 56 57 if (action != null) { 58 action (); 59 } 60 } 61 62 public Coroutine FadeOut (float time, System.Action action) 63 { 64 StopAllCoroutines (); 65 return StartCoroutine (FadeoutCoroutine (time, action)); 66 } 67 68 public Coroutine FadeOut (float time) 69 { 70 return FadeOut (time, null); 71 } 72 73 public Coroutine FadeIn (float time, System.Action action) 74 { 75 StopAllCoroutines (); 76 return StartCoroutine (FadeinCoroutine (time, action)); 77 } 78 79 public Coroutine FadeIn (float time) 80 { 81 return FadeIn (time, null); 82 } 83}
フェード用スクリプトFadeCtrl.csと実行用スクリプトUICtrl.csは
同じGameObjectにアタッチして実行しています。
FadeCtrl.cs
C#
1 [SerializeField] Fade fade; 2 public void doFadeOut(float t) 3 { 4 fade.FadeOut(t, () => Debug.Log("EndFadeOut")); 5 }
UICtrl.cs
C#
1 static FadeCtrl fade; 2 bool isFadeOut; 3 4 void Start() 5 { 6 fade = GetComponent<FadeCtrl>(); 7 isFadeOut = false; 8 } 9 void Update() 10 { 11 if (isFadeOut == false) 12 { 13 fade.doFadeOut(1f); 14 isFadeOut = true; 15 } 16 17 }
試しにdoFadeOut()をStart()やupdate()からコルーチンで呼び出してStartCoroutine()したのですができませんでした。
(Start()とupdate()内のStartCoroutine()は片方ずつコメントアウトした状態で実行しました)
C#
1 2 public static IEnumerator startFadeOut(float t) 3 { 4 fade.doFadeOut(t); 5 yield return new WaitForSeconds(t); 6 } 7 8------------------------------------------------- 9 void Start() 10 { 11 //StartCoroutine(startFadeOut(1f)); //フェードアウト 12 } 13------------------------------------------------- 14 void Update() 15 { 16 if (isFadeOut == false) 17 { 18 StartCoroutine(startFadeOut(1f)); //フェードアウト 19 isFadeOut = true; 20 } 21 22 } 23
なぜ動かないのか、どう直せばいいのかわからないのでアドバイスお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。