深夜の進捗 ローディング画面+Additiveを使った複数シーンの実装
こんばんは! 今晩の進捗を報告します。
ローディング画面+シーン遷移爆速化
一瞬過ぎてよくわからないと思うんですが、 Loading... の表示をしました。時間がかかるとちゃんとプログレスを表示してくれます。
↑こう表示されます。
コトの顛末
- シーンのロードの時間が気になったので
- ローディング画面を表示しようと思い色々試行錯誤していたところ、
- シーンのロードが爆速になりすごてローディング画面が不要になった
な、なにを言っているのかわからねーと思うが(ry
Before
↑元々はこれくら時間かかっていました。暗転している時がロード中です。2~3秒かな?
After
↑100ms 以内に高速化しましたw
ローディングの時間は体験にかなり影響する
個人的に……ゲームで最も大事と言っても過言ではない点のひとつとして、ロード時間が挙げられると思っています。
ロードでも、「起動時のロード」と「ゲーム中のロード」は違います。起動時は多少時間がかかっても、まぁ許容範囲です。でもゲーム中にローディングが頻繁にはさまるとかなりストレスになります。
心構えの問題だと思うんですが、「これから遊ぶぞ!」と準備する段階と、「今遊んでいる最中なのに!」という段階では、同じ数秒でもやっぱり違うのだと思います。
なので、私の作品では、基本的に「ゲーム中のロード」は執拗に高速化していたりします。どうしても難しい時は、起動時にできるだけロードする等していたりします。
このへんは、ちょっとしたこだわりですw
Unity で複数シーンを使ってゲームを作るには
色々試したんですが、今の所の結論は、以下のリンクの方法がFAです。
https://madnesslabo.net/utage/?page_id=11109#i-9
マネージャーシーンを常駐させ、必要に応じて追加のシーンをロード・アンロードする
簡単な実装方法としては、マネージャーシーンから起動するようにして、あとはゲームのUI遷移など応じて順番にシーンを加算でロードとアンロードをしていくことです。
マネージャーシーンはアンロードしないようにするだけで、常にマネージャーシーンのオンブジェクトはゲーム中に存在するようになります。
この方法だと高速化だけでなく、おまけに DontDestroyOnLoad
を使わなくても複数シーンでオブジェクトの共有ができるようになります。
LoadScene ではなく LoadSceneAsync、 LoadSceneMode.Single ではなく LoadSceneMode.Additive を使う
少し専門的な話になりますが、 LoadScene
(同期読み込み)ではなく LoadSceneAsync
(非同期読み込み)を使い、 Single
ではなく Additive
を使う実装パターンだと、シーンの遷移がかなり高速化されます。
さらに UnloadSceneAsync
と SetActiveScene
を使うことで、 Single
のように基本的には1度にひとつのシーンの表示、といったことができるようになります。
それでは今回はこのへんで!
もう寝ます! おやすみなさ~~~い!!!!!!!!!!!