テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

ロードの待ち時間を短くする(その2)

この記事は、「ロードの待ち時間を短くする(その1)」の続き

Unity3D]ロードの待ち時間を短くする(その1)
http://terasur.blog.fc2.com/blog-entry-218.html

ということで、今回は「必要な部分のみ順次読み込む」について。

■必要なモノだけを読み込む発想

単純な話、ゲーム画面ではメニューのテクステャは必要ない。
ならばメニューを読み込む時だけ読めばいい、ということ。

例えばサブメニューで使うリソースはゲーム画面では必要ないし、
ステージ毎の音楽や戦闘用の効果音も使うシーンと使わないシーンがはっきりしている。
だから必要なときに必要な分だけ読む。

これを実行するなら、Basicならだいたい2つの選択肢がある。
・Resources.load
・Application.LoadLevelAdditive

Resources.loadは、リソースフォルダからアセットを追加で読み込む機能で、
Application.LoadLevelAdditiveは、現在のシーンに追加する形でシーンを読み込む手法になる。

個人的には、前者は細かいパーツを読み込むのに便利、
後者はUIやステージを読み込むのに便利だと感じてたり。

【Unity アクション】 1シーン化の比較と問題(Karasuのアプリ奮闘記)
http://hideapp.cocolog-nifty.com/blog/2012/07/unity-1-64b4.html


後はAssetbundleやWWWといった手もあるにはあるが。

■使用メモリが増え続ける

追加で読み込むということは、メモリ使用量がどんどん増えてしまうと同義。

なのでタイミングを見計らって開放しないと、メモリ不足が心配になる。


メモリを開放してやるには、参照するオブジェクトや参照を削除して
[Resources.UnloadUnusedAssets()]を実行してやれば良い。

ただし、メモリ不足が発生しないのであればキャッシュから高速で読み込めるので、
メモリが不足しないようならあまり開放しなくても良い気もする。
参照を削除せずに[UnloadUnusedAssets()]を実行すればキャッシュは残せるので
その辺りはよく考えてやる必要があるっぽい。

またUnloadUnusedAssets自体が重い処理なので目立たないタイミングで実行するべき。
UnloadUnusedAssets使用は計画的に、ということなのか。