Unityを使用していると、画像や音声、モデルなどのアセットを管理する際に、
Resourcesフォルダが便利です。
Resourcesフォルダは比較的簡単に使える方法のひとつですが、公式では非推奨とされています。
本記事では、Resourcesフォルダの基本的な使い方と、それが非推奨とされる理由、
さらに代替手段について解説します。
- Unityで複数のアセットを効率的に管理したい方
- Resourcesフォルダの使い方に疑問を持っているUnityユーザー
- 非推奨な方法を知りたい開発者
- パフォーマンスに影響を与えないアセット管理方法を知りたい方
- スクリプトでアセットを動的に扱いたい方
Resourcesフォルダとは?

Resourcesフォルダは、Unityのプロジェクト内で特別な役割を持つフォルダです。
プロジェクト内の任意の場所に作成することができ、このフォルダに配置されたすべてのアセットは、
ビルド時に自動的に含まれ、動的にロードすることができます。
この仕組みを活用することで、スクリプトからアセットを簡単に呼び出すことが可能です。
- スクリプトでアセットを動的にロードする
- ゲーム内で必要に応じてリソースを取得し、メモリを効率的に使用する
- ファイルパスを指定せずに、特定の条件に応じたアセットの呼び出し
- プレハブ、画像、サウンド、テキストデータなど様々なアセットの取り扱いが容易
- 迅速なプロトタイピングやデバッグ用途での簡便なリソース管理
csvの保存も可能で、テキストを出力したり、画像や音声をパス管理したりできます。
素材を簡単に扱えることの他に、Resourcesフォルダを使うメリットは様々です。
- シンプルな運用: 特別な設定が不要で、すぐにアセットをロードできる
- 汎用性: アセットの種類や配置場所に関わらず、動的にアクセス可能
- 動的ロード: 必要なタイミングでアセットをメモリにロードすることで、初期のロード時間を短縮できる
- テスト・デバッグのしやすさ: 開発中に素材の変更やテストを簡単に行うことができる
- プロトタイピング: 初期段階のプロジェクトで手軽にリソースを管理できるため、開発速度が向上
Resourcesフォルダが非推奨な理由

Resourcesフォルダの利用には便利な面が多い反面、デメリットが存在し、
Unity公式ではこのフォルダの使用を推奨していません。
公式サイト:「Resources フォルダー – Unity マニュアル」
まず、ビルドサイズの増加が挙げられます。
Resourcesフォルダ内のすべてのアセットは、使用されていなくてもビルドに含まれるため、
ビルドサイズが大きくなりがちになります。
メモリ管理が困難で、 一度ロードされたアセットは、
メモリから明示的に解放されるまで保持され続けるため、メモリの使用効率が悪化します。
参照の追跡が困難なため、Resourcesフォルダ内のアセットはコードで動的に参照されて、
どのアセットがどこで使われているかが追跡しにくく、バグの原因になりやすいです。
ロード時間の増加によりビルド時にすべてのResourcesフォルダのアセットが含まれるため、
アセットの数が多くなるとロード時間が増加します。
管理の複雑さも関連します。プロジェクトが大規模になると、アセット管理が難しくなり、
予期せぬバグやメモリリークが発生する可能性があります。
代わりとなる素材やアセット管理
このように、大規模なプロジェクトの場合、Resourcesフォルダを避ける必要があります。
Resourcesフォルダの代替案を検討することが推奨されています。
- アドレッサブルシステム(Addressable Asset System): アセットの動的ロードと管理をより効率的に行うための仕組み。メモリやロードパフォーマンスの最適化が可能
- AssetBundles: 必要なアセットだけを個別にビルドして管理できるため、ビルドサイズの削減や動的なアセット管理が容易になる
- SceneやPrefabの階層管理: アセットをPrefabとしてまとめ、使いやすい階層で整理することで、動的にアセットをロードする必要がなくなる
UdemyでPythonを学習
Udemyは、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。
- 現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
Pythonをインストールから環境設定、基本文法が学習
さらに暗号化、インフラ自動化、非同期処理についても学べます。
Pythonを基礎から応用まで学びたい人におすすめ
- みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2024年最新版】
機械学習ライブラリで文字認識や株価分析などを行う。
人口知能やニューラルネットワーク、機械学習を学びたい人におすすめ。
- 【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜
統計分析、機械学習の実装、ディープラーニングの実装を学習。
データサイエンティストになりたい人におすすめ。
- 0から始めるTkinterの使い方完全マスター講座〜Python×GUIの基礎・応用〜
TkinterのGUIを作成から発展的な操作までアプリ実例を示して学習。
アプリ開発したい人におすすめ。
スクリプトで扱う方法
スクリプトでアセットを扱う場合、アドレッサブルやAssetBundlesを使うことで、
動的にアセットをロードしつつ、Resourcesフォルダのデメリットを回避することができます。
アドレッサブルシステムを使用すれば、特定のアセットを簡単に呼び出すことが可能です。
インストールには、「package Maneger」を使用します。

using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class AssetLoader : MonoBehaviour
{
void Start()
{
Addressables.LoadAssetAsync<GameObject>("MyPrefabKey").Completed += OnLoadDone;
}
void OnLoadDone(AsyncOperationHandle<GameObject> obj)
{
if (obj.Status == AsyncOperationStatus.Succeeded)
{
GameObject myPrefab = obj.Result;
Instantiate(myPrefab);
}
}
}
まとめ
UnityのResourcesフォルダは、手軽にアセットを動的に管理できる便利な機能ですが、非推奨とされる理由も多く存在します。主な問題は、ビルドサイズの増加やメモリ管理の難しさ、アセット参照の追跡が困難になることなどです。
これらのデメリットを避け、プロジェクトの効率とパフォーマンスを最適化するためには、
代替手段として「アドレッサブルシステム」や「AssetBundles」を利用することが推奨されます。
特に、アドレッサブルシステムを活用すれば、スクリプトを通じて動的にアセットを管理しつつ、Resourcesフォルダの持つ問題点を回避できます。
これにより、プロジェクトの規模が大きくなってもパフォーマンスやメモリ効率を保ちながら開発を進めることが可能です。