水無川旅館 2024/05/20 04:01

深夜の進捗 ローディング画面+Additiveを使った複数シーンの実装

 こんばんは! 今晩の進捗を報告します。

ローディング画面+シーン遷移爆速化

 一瞬過ぎてよくわからないと思うんですが、 Loading... の表示をしました。時間がかかるとちゃんとプログレスを表示してくれます。


↑こう表示されます。

コトの顛末

  1. シーンのロードの時間が気になったので
  2. ローディング画面を表示しようと思い色々試行錯誤していたところ、
  3. シーンのロードが爆速になりすごてローディング画面が不要になった

 な、なにを言っているのかわからねーと思うが(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 を使う実装パターンだと、シーンの遷移がかなり高速化されます。

 さらに UnloadSceneAsyncSetActiveScene を使うことで、 Single のように基本的には1度にひとつのシーンの表示、といったことができるようになります。

 それでは今回はこのへんで!

 もう寝ます! おやすみなさ~~~い!!!!!!!!!!!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

限定特典から探す

記事を検索