いくつかの状況では、プロジェクトにとってシーンの一部としてロードせずにアセットを使用可能とすることは便利です。例えば、ゲームのどのシーンでも登場できるキャラクターまたは別のオブジェクトがあるとして、あまり頻繁でないとします(これは “秘密” の機能、エラーメッセージ、またはハイスコアのお知らせ、でもよいです)。さらに初期のダウンロード時間を短縮するか、相互変更が可能とするため、ゲームコンテンツアセットを別のファイルまたは URL からロードしたいかもしれません。
Unity はプロジェクトで Resource フォルダー をサポートしており、コンテンツがメインのゲームファイルで供給されていても、リクエストがあるまでロードしない可能性があります。また、アセットバンドル を作成することもできます。これらのファイルはメインのゲームファイルから完全に分けられて、あるファイルまたは URL からゲームからオンデマンドでアクセスできるアセットを含みます。
アセットバンドルは外部アセットの集合です。複数のアセットバンドル、つまりは多くの異なる外部アセットの集合を保持することは可能です。これらのファイルはビルドされた Unity プレイヤーの外に存在するため、通常は Web サーバー上にあり、動的にエンドユーザーがアクセスできます。
アセットバンドルをビルドするためには、エディタースクリプトの中から BuildPipeline.BuildAssetBundles() をコールします。引数の中に、ビルドに含める オブジェクト の配列を、他のオプションとともに指定します。これにより後でランタイム時に AssetBundle.LoadAsset() を使用して動的ロードできるファイルを作成できます。
リソースフォルダーはビルドされた Unity Player アセットの集合で、必ずしもインスペクター上でどれかのゲームオブジェクトにリンクされているわけではありません。
リソースフォルダーに何か入れるときは、単に プロジェクトビュー に新規フォルダーを作成し、フォルダーの名前を Resources とします。複数のリソースフォルダーをプロジェクトの中に異なる形で配置することができます。このフォルダーのどれかからアセットをロードしたいとき、Resources.Load() をコールします。
Resources フォルダーで見つかるすべてのアセットとその依存関係は resources.assets というファイルに格納されます。もしアセットがすでに別のレベルで使用される場合、そのレベルの .sharedAssets に格納されます。 Edit -> PlayerSettings の First Streamed Level 設定により resources.assets が集められてビルドに含めるレベルを決定します。
もし “最初にストリーミングしたレベル” がリソースフォルダーのアセットを含む場合、アセットはそのレベルのアセットとして格納されます。もし後から含めた場合、そのレベルは “resources.assets” からのアセットを参照します。
Resources フォルダー にあるアセットのみが Resources.Load() によりアクセスできます。しかし依存関係があるため、より多くのアセットが “resources.assets” ファイルに含まれるかもしれません(例えばリソースフォルダーのマテリアルは Resources フォルダーの外のテクスチャを参照しているかもしれません)。
アセットバンドルのリソースをアンロードするには AssetBundle.Unload() をコールします。もし unloadAllLoadedObjects に true を渡すと、アセットバンドルにより内部的に保持されたオブジェクトおよび AssetBundle.LoadAsset() をコールしてアセットバンドルからロードされたものは破棄されて、バンドルが使用していたメモリが解放されます。
ときどきアセットバンドルをロードしたほうがよい場合があり、選んだオブジェクトをインスタンス化して、オブジェクトを残しつつバンドルが使用しているメモリを解放したいかもしれません。長所は他のタスク、例えば別のアセットバンドルをロードする等、のためにメモリを解放します。このシナリオでは false をパラメーターとして渡します。バンドルが破棄された後は、そこからオブジェクトをロードできなくなります。
もし別のレベルをロードする前に、Resources.Load() を使用してロードしたシーンのオブジェクトを破棄したい場合、Object.Destroy() をコールします。アセットを解放するためには Resources.UnloadUnusedAssets() を使用します。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.