動的なアセットの読み込み

Resources.Loadを使うと、動的にアセットを読み込むことができます。 動的にというのはシーン内に置かれていないかシーン内に置かれたゲームオブジェクトからの参照もないアセットを読み込むという意味です。
Unityはシーンに必要な全てのアセットを自動でロードするので、シーンに置かれているもの、シーンに置かれているものが参照しているものは全てシーンの起動前にロードされるのです。

使うためにはアセットをまず特別なフォルダに置かなくてはいけません。Resourcesというフォルダをプロジェクトのどこかに作ります。プロジェクトビューの直下(Assetsの直下)に置いても良いですし、どこか別のフォルダの下でも構いません。複数作ることも可能ですが、慣れないうちはひとつにしておいた方がわかりやすいです。
Unityはいくつかのフォルダ名を特別扱いしています。 Resourcesもその中のひとつでResources.Loadでアクセスできる場所になっています。

Resources.Loadの引数は文字列であり、これはパスを表します。Resourcesフォルダ内のどこにあるかをパスで記述します。Resourcesフォルダ内のPlayerという名前のプレハブであればResources.Load(“Player”)で読み込むことができます。Object型で返ってくるので、キャストが必要になります。
Resourcesフォルダ内にさらにフォルダAがあり、その下のBGMというオーディオクリップを取得したい場合はResources.Load<AudioClip>(“A/BGM”)として読み込むこともできます。
/を使って階層的になっているフォルダも対応できます。

どのようなアセットでも動的に読みだせるので、使い道は広いです。共通で使うものはシーンに置いた方が便利ですが、特定の条件でしか使わないものや容量の大きいアセットの読み込みをどこかで行うといった使い方がありえます。シーンに全て置くことが可能なら、それも扱いやすいので無理にResources.Loadを使う必要はありません。

Resources.Loadで読み込んだアセットはシーンが変わると破棄されます。シーンがひとつしかないとかしばらくシーンを変更しないがアセットはもう使わないのでメモリから解放したいということがあると思います。そういったときは読み込んだアセットを参照しているところをすべてなくした後、Resources.UnloadUnusedAssetsを呼び使われていないアセットを解放することができます。

 

動的に読み込むと制御をスクリプトで完結できたり、シーンに入るまでの時間を短縮することができます。シーンに最低限のものを置いておけば、ロードは最速です。シーンに入ってから必要なものをロードして、生成をしていくようにするわけです。作るのが難しくなりますが、ロードが短いというのはゲームとして大事なことです。

 

Resources.Loadを使う場合のデメリットは

  • 今読み込まれているのは何か?
  • 読み込み中なのか?
  • どれくらい読み込みを行うか?(メモリの限界の問題)
  • シーン切り替え時の対処
といった問題が出やすいので、それに気をつけて使ってください。読み込んだつもりがアセットがないとかはエラーを引き起こしたりします。ロードのしすぎでメモリが足りなくなる問題は防ぎようがないので、いくつかの実機で試すしかありません。
作り慣れてから使うようにした方が良いと思います。使わないで作れるならその方が良いです。

コメント

タイトルとURLをコピーしました