Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9278

unityでシーン間のフェードインフェードアウトを行う

$
0
0

初めに

このプログラムはTama-Labさんの記事を参考にして作りました、
>Unityでフェードイン/フェードアウトを実装する方法
完成した物のイメージ画像がこちらになります
以下gifあり
Image from Gyazo
完成したスクリプトがこちらになります

プログラム文

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画像のようにフェードイン、フェードアウトができると思います。

最後に

こうした方が分かりやすい等のアドバイス頂けると嬉しいです!:grin:


Viewing all articles
Browse latest Browse all 9278

Trending Articles