質問: new Color (red, green, blue, alfa);** **alfa += speed;** print ("c\n"); //動作確認用出力3 **}** } ``` エラーメッセージなし ``` ### 試したこと 各所にprint処理を埋め込んだのですが、件のFadeout()の出力 C も得られました。 関数そのものは動いているようなのですが、オブジェクト Imageのフェードアウトが行われません。
回答: ### 問題点 一つ目の問題。`Fadeout()`が一回しか呼ばれていないため、あなたが思うような「フェードアウト」の動作はしません。一度だけ`alfa`が+0.01されるだけなので若干薄暗くなるぐらいです。(そして`alfa`ではなく`alpha`です) 二つ目。一度`Fadeout()`が呼ばれた後にUnityに描画させずSceneを変えているため、フェードアウトされたかどうかもわかりません。フェードアウトが完了してからシーンを変えると、思う通りの動作になるでしょう。 ### 解決法 どちらの問題も「コルーチン」というものを用いれば解決できます。あなたの成長の妨げにならないようここに答えは書かないでおきますが、いくつかの検索のキーワードは書いておきます。(どうしても無理だと言うならば書きますが) キーワード: コルーチン, Coroutine, IEnumerator ### 追記 ``` public IEnumerator Fadeout(float time) { var deltaAlpha = 1 / time; var image = GetComponent(); for (var alpha = 1f; alpha >= 1; alpha -= deltaAlpha * Time.deltaTime) { var color = image.color; color.a = a; image.color = color; yield return null; } color.a = 0; image.color = color; // 任意のScene読み込み } ``` `FadeScript`の中身はこれと`Fadeoutcall`のみ、それ以外は不要です。 `time`はその名前の通りフェードアウトに要する時間です。