いくつかの状況では、アセットをシーンの一部としてロードせずに、プロジェクトで使用可能にすると便利です。例えば、ゲームのどのシーンでも登場できるキャラクターまたは別のオブジェクトがあるが、あまり頻繁には使用されないことがあります (これは “秘密” の機能、エラーメッセージ、またはハイスコアのお知らせ、でもよいです)。さらに初期のダウンロード時間を短縮するか、ゲームコンテンツの相互変更を可能にするため、アセットを別のファイルまたは URL からロードしたいこともあります。
プロジェクトで リソースフォルダー を使用して、プレイヤービルドにコンテンツを含めることができます。これにより、ビルドするシーンとは別に、必要なときにロードできるようになります。
リソースフォルダーには、ビルドに含まれるシーンから直接参照されていない場合でも、ビルドされた Unity Player に含まれるアセットのコレクションを格納します。
リソースフォルダーにアセットを入れるときは、Project ウィンドウ で新規フォルダーを作成し、フォルダーの名前を “Resources” とします。Assets フォルダー内の異なるサブフォルダーに複数のリソースフォルダーを配置できます。また、パッケージにリソースフォルダーが含まれている場合もあります。その後、Project ウィンドウの他のフォルダーと同じ方法で、そのフォルダーにアセットを配置できます。これらのフォルダーのどれかからアセットをロードしたいときは、Resources.Load() を呼び出します。
注意リソースフォルダーで見つかるすべてのアセットとその依存関係は resources.assets というビルド出力のファイルに格納されます。ビルドのシーンがアセットを参照している場合、そのアセットは代わりに sharedAssets*.assets ファイルにシリアル化されます。
Resources.Load() を通じてアクセスできるのは、リソースフォルダー にあるアセットのみです。ただし、さらに多くのアセットは依存関係であるため、最終的に resources.assets ファイルに行き着く場合があります。例えば、Resource フォルダーのマテリアルが、Resource フォルダー外のテクスチャを参照する場合があります。その場合、テクスチャも resources.assets ファイルに含まれますが、直接ロードことはできません。
別のシーンをロードする前に Resources.Load() を使用してロードされたシーンオブジェクトを破棄する場合は、そこで Object.Destroy() を呼び出します。アセットをリリースしてメモリを再利用するには、 Resources.UnloadUnusedAssets() を使用します。
リソースシステムは、特にラピッドプロトタイピングや小規模なプロジェクトに使用すると便利です。ただし、この機能は適切にスケールできず、全体的に使用することは推奨されません。このため、AssetBundles と Addressables パッケージが代替案として推奨されています。
リソースを使用する際のいくつかの欠点:
リソースフォルダーは、プロジェクトの生存期間を通じて必要で、更新の必要もなく、プラットフォームやデバイスによって変化しない小さなアセットに適しています。リソースアセットは、アセットバンドルを使用してオンデマンドでダウンロードされるメインコンテンツを使用して、ゲームの最小限のブートストラップに含めることができます。ただし、StreamingAssets フォルダーにあるローカルアセットバンドルもブートストラップのニーズを満たすことができます。