プレイヤーがステージから落下したら画面を一瞬暗転(フェードアウト)させて開始位置に戻し、フェードインさせる、という処理を作りたいと思っています。そのために、以下の関数を作りました。
ただ、以下の処理ではプレイヤーを元に戻す処理とフェードインが2回行われているような挙動をします。恐らくコルーチンを使い慣れていないことが原因だと思うのですが解決できません。
C#
1private IEnumerator salvation(float fadeOutTime, float fadeInTime = 0.1f) 2 { 3 float time = 0; 4 5 while (true) 6 { 7 Color color = m_fadePlane.GetComponent<Image>().color; 8 color.a = time / fadeOutTime; 9 m_fadePlane.GetComponent<Image>().color = color; 10 time += Time.deltaTime; 11 12 if (color.a > 1f) 13 { 14 break; 15 } 16 yield return null; 17 } 18 19 20 //プレイヤーを元の位置に戻す処理が入る 21 22 23 time = 0; 24 while (true) 25 { 26 Color color = m_fadePlane.GetComponent<Image>().color; 27 color.a = 1f-time / fadeOutTime; 28 m_fadePlane.GetComponent<Image>().color = color; 29 time += Time.deltaTime; 30 31 if (color.a < 0f) 32 { 33 break; 34 } 35 yield return null; 36 } 37 38 39 } 40
そして、この関数を呼び出す場所で
C#
1StartCoroutine(salvation(fadeOutTime, fadeInTime));
と呼び出しています。
このとき、おおよそはうまく動作するのですが、プレイヤーを元に戻す処理とフェードインが2回行われているような挙動をします。恐らくコルーチンを使い慣れていないことが原因だと思うのですが解決できません。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー