Unityを使用していると、画像や音声、モデルなどのアセットを管理する際に、
Resourcesフォルダが便利です。
Resourcesフォルダは比較的簡単に使える方法のひとつですが、公式では非推奨とされています。
本記事では、Resourcesフォルダの基本的な使い方と、それが非推奨とされる理由、
さらに代替手段について解説します。
- Unityで複数のアセットを効率的に管理したい方
- Resourcesフォルダの使い方に疑問を持っているUnityユーザー
- 非推奨な方法を知りたい開発者
- パフォーマンスに影響を与えないアセット管理方法を知りたい方
- スクリプトでアセットを動的に扱いたい方
ConoHaWing開設方法|アリッシア
技術ブログを書くべき理由|アリッシア
Resourcesフォルダとは?
Resourcesフォルダは、Unityのプロジェクト内で特別な役割を持つフォルダです。
プロジェクト内の任意の場所に作成することができ、このフォルダに配置されたすべてのアセットは、
ビルド時に自動的に含まれ、動的にロードすることができます。
この仕組みを活用することで、スクリプトからアセットを簡単に呼び出すことが可能です。
csvの保存も可能で、テキストを出力したり、画像や音声をパス管理したりできます。
素材を簡単に扱えることの他に、Resourcesフォルダを使うメリットは様々です。
Resourcesフォルダが非推奨な理由
Resourcesフォルダの利用には便利な面が多い反面、デメリットが存在し、
Unity公式ではこのフォルダの使用を推奨していません。
公式サイト:「Resources フォルダー – Unity マニュアル」
まず、ビルドサイズの増加が挙げられます。
Resourcesフォルダ内のすべてのアセットは、使用されていなくてもビルドに含まれるため、
ビルドサイズが大きくなりがちになります。
メモリ管理が困難で、 一度ロードされたアセットは、
メモリから明示的に解放されるまで保持され続けるため、メモリの使用効率が悪化します。
参照の追跡が困難なため、Resourcesフォルダ内のアセットはコードで動的に参照されて、
どのアセットがどこで使われているかが追跡しにくく、バグの原因になりやすいです。
ロード時間の増加によりビルド時にすべてのResourcesフォルダのアセットが含まれるため、
アセットの数が多くなるとロード時間が増加します。
管理の複雑さも関連します。プロジェクトが大規模になると、アセット管理が難しくなり、
予期せぬバグやメモリリークが発生する可能性があります。
代わりとなる素材やアセット管理
このように、大規模なプロジェクトの場合、Resourcesフォルダを避ける必要があります。
Resourcesフォルダの代替案を検討することが推奨されています。
ブログを運営するメリット
プログラマーがブログを運営するメリットは沢山あります。
エンジニアはブログを運営するべき理由|アリッシア
- アウトプットによるスキル向上
- メモ帳代わり
- ポートフォリオ(案件獲得)
ブログを始めるためには、「テーマ」・「ドメイン」・「サーバー」の3つが必要です。
3つはブログ運営の基盤となる要素ですが、これら全て自分で用意しなければいけません。
面倒で難しくブログ開設を断念してしまう人が多いです。
ConoHa Wingの「WordPressかんたんセットアップ」は
最短10分で契約可能!
ConoHa WINGから契約をすれば、独自ドメイン、サーバーの用意、WordPressとの連携も簡単にできます。
さらに、2つの独自ドメインが永久無料の特典もあり、
月660円からの破格価格にもかかわらず、表示速度は国内最速です。
スクリプトで扱う方法
スクリプトでアセットを扱う場合、アドレッサブルや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フォルダの持つ問題点を回避できます。
これにより、プロジェクトの規模が大きくなってもパフォーマンスやメモリ効率を保ちながら開発を進めることが可能です。