Static Asset Mangaer
投稿日:2015年12月8日 | 最終更新日:2020年5月19日
動的にロードせずに、常に保持するアセットを設定できます。
Resourcesにおきたくないアセットや頻繁なロードを避けたいものをここで設定します。
また、3DモデルやプレハブはAssetBundle化が難しい場合がありますが、ここに設定すればAssetBundle化しなくて良い必要がなくなるという利点もあります。
リファレンス
名前 | 内容 |
---|---|
Assets | 常に保持するアセットを設定 |
ただし、通常ロードするファイルを含めて同じファイル名は使用禁止です。違うディレクトリであっても、ファイル名が同じであればここで設定したアセットを使うように設定されるので注意してください。
シーンから参照されるものと同じ素材を宴のシナリオ内で使う
タイトル画面などのUIで使うテクスチャやサウンドと同じ素材を宴のシナリオ内で使う場合、その素材はResources以下に置かずにStaticAssetManagerに設定するようにしてください。
StaticAssetManagerを使わなくてもロードは問題なくできるのですが、シナリオ上で未使用になった場合アンロードされてしまうため、背景テクスチャが消えたりサウンドが鳴らなくなってしまったりします。
これはUnityの構造上の問題で、ある素材をアンロードしようとする場合に、その素材が他で使用中かどうかを区別する方法がないためです。
そのため、宴のファイルマネージャーはアンロードする際に「宴のファイルマネージャー経由で使用中かどうか?」の判別はできますが、UIなどの通常のUnityのシーン内設定してある素材が使用中かどうかは判別できなくなっています。
StaticAssetManagerに置くことで、「これはシーン内に置いてある素材なので、ロードやアンロードはしない」という判別がつくようになり、アンロードされずに使用することができるようになります。
Resources.UnloadUnusedAssets
プレハブの場合は複数のアセットの集合であるためかプレハブ個別でアンロードできないようで、Unityの「Resources.UnloadUnusedAssets」というシーン内含めてすべての未使用素材を検索してアンロードするという処理でアンロードしています。
そのため「シーンから参照されるものと同じ素材を宴のシナリオ内で使う」というケースであっても、StaticAssetManagerを使わなくても一応問題ないです。
ですが、Resoureces以下に置く素材は少ないほうアプリの起動時間が短くなるなどのメリットもありますので、極力StaticAssetManagerを使ってください。
また、Resources.UnloadUnusedAssetsはとても負荷が高いため、プレハブ以外でも同じことをしようとするとシナリオ再生中に頻繁に処理落ちしてしまう危険があるため採用していません。
Resources.UnloadUnusedAssetsを呼ぶ頻度は、ファイルマネージャーの「Unload Type」で設定できます。