【Unity】フェード処理を作ってみる
フェード処理を作ってみる
フェード処理はゲーム作っていたらほぼほぼ必要になりますが、今現在もUnityのデフォルト機能ではないみたいですね。
フェードに関しては色々なやり方を見かけましたが、今回は自作してみることにしましたので一部ご紹介します。
※ゲームフローの制御はSceneではなくObject単位で行っています。
Unityバージョン:Unity 2018.3.13f1
順序
①FadeManagerというオブジェクトとスクリプトを作成
②フロー制御のManagerがフロー変更のタイミングでFade処理をリクエスト
③FadeManagerのUpdateがFade処理を実行
問題点
ゲームフローの制御をObject単位で行っており、動的に生成しているのでFadeManagerの上に描画されてしまいきちんとフェードがかかりませんでした。
なので、描画順を変更するためにSort Orderをスクリプト上から変更するのですが、変更後値を元に戻してもフローObjectのボタンが反応しないという問題も出ました……。
解決
きちんとフェードがフローObjectoにもかかるようにFadeManagerにあるCanvasのSort Orderを変更します。
フェード処理のリクエスト時に、Sort Orderを1にし描画順をフローObjectの上にします。
フェード処理が終わったら、Sort Orderを0へ戻しフローObjectへ影響がないようにします。
これで、きちんとフェードがかかるようになりましたが、次はフェード後フローObjectのボタンが押せなくなる問題です。
Sort Orderも元に戻しているし、他にも探してみましたが原因は分かりませんでした。
しかたがないので、フェード用PanelのRaycast Targetを切って対応することにしました。
まぁ、これでボタンは押せるようになったのでよしとしますか……('ω')
まとめ
・複数のCanvasで描画順を変更したいときはSort Orderを変更する
・判定させたくないオブジェクトのRaycast Targetは切る
まだまだ、足らない点が多いですがとりあえずは動くようになりましたw
そもそも、フロー制御をObject単位で行うというのも効率が良いかは今のところ分かりません。
今後もいじりながら最善の手法を模索していきたいですね。