三流豆腐。

三流のゲームプログラマ。C/C++/C#/Objective-C/python/技術向上を目指します。

【Unity】フェード処理を作ってみる

フェード処理を作ってみる

フェード処理はゲーム作っていたらほぼほぼ必要になりますが、今現在もUnityのデフォルト機能ではないみたいですね。

フェードに関しては色々なやり方を見かけましたが、今回は自作してみることにしましたので一部ご紹介します。

※ゲームフローの制御はSceneではなくObject単位で行っています。

Unityバージョン:Unity 2018.3.13f1

 

順序

①FadeManagerというオブジェクトとスクリプトを作成

②フロー制御のManagerがフロー変更のタイミングでFade処理をリクエス

③FadeManagerのUpdateがFade処理を実行

 

問題点

ゲームフローの制御をObject単位で行っており、動的に生成しているのでFadeManagerの上に描画されてしまいきちんとフェードがかかりませんでした。

なので、描画順を変更するためにSort Orderをスクリプト上から変更するのですが、変更後値を元に戻してもフローObjectのボタンが反応しないという問題も出ました……。

f:id:tofu_doon:20190430204508p:plain

f:id:tofu_doon:20190430204526p:plain

 

解決

きちんとフェードがフローObjectoにもかかるようにFadeManagerにあるCanvasのSort Orderを変更します。

フェード処理のリクエスト時に、Sort Orderを1にし描画順をフローObjectの上にします。

フェード処理が終わったら、Sort Orderを0へ戻しフローObjectへ影響がないようにします。

f:id:tofu_doon:20190430210341p:plain

f:id:tofu_doon:20190430210129p:plain

 

これで、きちんとフェードがかかるようになりましたが、次はフェード後フローObjectのボタンが押せなくなる問題です。

Sort Orderも元に戻しているし、他にも探してみましたが原因は分かりませんでした。

しかたがないので、フェード用PanelのRaycast Targetを切って対応することにしました。

まぁ、これでボタンは押せるようになったのでよしとしますか……('ω')

f:id:tofu_doon:20190430210039p:plain

 

まとめ

・複数のCanvasで描画順を変更したいときはSort Orderを変更する

・判定させたくないオブジェクトのRaycast Targetは切る

まだまだ、足らない点が多いですがとりあえずは動くようになりましたw

そもそも、フロー制御をObject単位で行うというのも効率が良いかは今のところ分かりません。

今後もいじりながら最善の手法を模索していきたいですね。