初めに
このプログラムはTama-Labさんの記事を参考にして作りました、
>Unityでフェードイン/フェードアウトを実装する方法
完成した物のイメージ画像がこちらになります
以下gifあり
完成したスクリプトがこちらになります
プログラム文
SceneFadeManager.cs
usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;usingUnityEngine.SceneManagement;publicclassSceneFadeManager:MonoBehaviour{//フェードアウト処理の開始、完了を管理するフラグprivateboolisFadeOut=false;//フェードイン処理の開始、完了を管理するフラグprivateboolisFadeIn=true;//透明度が変わるスピードfloatfadeSpeed=0.75f;//画面をフェードさせるための画像をパブリックで取得publicImagefadeImage;floatred,green,blue,alfa;//シーン遷移のための型stringafterScene;// Start is called before the first frame updatevoidStart(){DontDestroyOnLoad(this);SetRGBA(0,0,0,1);//シーン遷移が完了した際にフェードインを開始するように設定SceneManager.sceneLoaded+=fadeInStart;}//シーン遷移が完了した際にフェードインを開始するように設定voidfadeInStart(Scenescene,LoadSceneModemode){isFadeIn=true;}/// <summary>/// フェードアウト開始時の画像のRGBA値と次のシーン名を指定/// </summary>/// <param name="red">画像の赤成分</param>/// <param name="green">画像の緑成分</param>/// <param name="blue">画像の青成分</param>/// <param name="alfa">画像の透明度</param>/// <param name="nextScene">遷移先のシーン名</param>publicvoidfadeOutStart(intred,intgreen,intblue,intalfa,stringnextScene){SetRGBA(red,green,blue,alfa);SetColor();isFadeOut=true;afterScene=nextScene;}// Update is called once per framevoidUpdate(){if(isFadeIn==true){//不透明度を徐々に下げるalfa-=fadeSpeed*Time.deltaTime;//変更した透明度を画像に反映させる関数を呼ぶSetColor();if(alfa<=0)isFadeIn=false;}if(isFadeOut==true){//不透明度を徐々に上げるalfa+=fadeSpeed*Time.deltaTime;//変更した透明度を画像に反映させる関数を呼ぶSetColor();if(alfa>=1){isFadeOut=false;SceneManager.LoadScene(afterScene);}}}//画像に色を代入する関数voidSetColor(){fadeImage.color=newColor(red,green,blue,alfa);}//色の値を設定するための関数publicvoidSetRGBA(intr,intg,intb,inta){red=r;green=g;blue=b;alfa=a;}}
注意
作成したイメージをSceneFadeManagerをアタッチしたオブジェクトの子要素に設定しないと、ロード先のシーンで画像が見つからないので、エラーが発生してしまいます。
ただこのプログラム単体ではシーン遷移することが出来ないので、別プログラムから呼び出す必要があります。
呼び出し例
SceneChange.cs
usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassSceneChange:MonoBehaviour{GameObjectManageObject;SceneFadeManagerfadeManager;// Start is called before the first frame updatevoidStart(){//SceneFadeManagerがアタッチされているオブジェクトを取得ManageObject=GameObject.Find("ManageObject");//オブジェクトの中のSceneFadeManagerを取得fadeManager=ManageObject.GetComponent<SceneFadeManager>();}// Update is called once per framevoidUpdate(){if(Input.GetMouseButtonDown(0)){//SceneFadeManagerの中のフェードアウト開始関数を呼び出しfadeManager.fadeOutStart(0,0,0,0,"Scene2");}}}
この↑のプログラムを別のオブジェクトにアタッチして使用すれば
トップにあるgif画像のようにフェードイン、フェードアウトができると思います。
最後に
こうした方が分かりやすい等のアドバイス頂けると嬉しいです!