StreamigAssetsを使ってアプリサイズ削減
投稿日:2017年2月28日 | 最終更新日:2024年7月20日
宴では、「アセットバンドル化したリソースを、StreamingAssetsフォルダからロードする」という形をとることができます。
一度出力したStreamingAssetsフォルダのリソースは、アプリをビルドしなおしても(コンポーネントつきのプレハブなどプログラムの変更などの影響を受けないアセットである限り)そのままま使えるので、
「修正パッチファイルとして実行ファイルのみを配布して、StreamingAssetsフォルダ以下のリソースはそのまま使ってもらう」
とすることで、軽量な修正パッチを配布する体制がとれます。
また、WebGLではStreamingAssetsごとサーバーに置けば、必要なときにファイルをDLして使うことになるので、最初から巨大なファイルをロードするようなことを避けることができます。
以下に、作成手順をまとめます。
目次
StreamingAssetsフォルダ以下にアセットバンドルの置き場所を作成
まず、出力先のディレクトリを作成します。「Assets/StreamingAssets/宴プロジェクト名」というフォルダを作成します。
宴プロジェクト名は、宴のプロジェクトを作成したときに指定した名前です。
*注)Assets/StreamingAssetsフォルダは、Unityが定める特殊なフォルダです。
StreamingAssetsフォルダーは1つしか作成できず、Assetsフォルダー直下に配置する必要があります。
このフォルダ以下にあるファイルはUnity形式にせずにそのままファイルとして扱うことができるようになるフォルダです。
ただし、ユーザーからもそのままファイル名などが見えてしまうので、その点だけ気を付けてください。
アセットバンドルを作成
Tools > Utage > ResourceConverter からリソースコンバーターを開きます。
ResourceConverterの設定は、このようにします。
Resouces Directoryに「プロジェクト名/Reources/プロジェクト名」のフォルダをドラッグ&ドロップで設定。
ProjectSettingsに、今のシナリオのプロジェクト設定ファイルを。
OutPut Pathに、先ほど作成した「StreamingAssets/プロジェクト名」というフォルダを指定します。
Convertボタンを押すと、設定した出力先のディレクトリ以下に、アセットバンドルが作成されます。
ロードの設定
AdvEngineStarterの設定を「StreamingAssets」にします。
必要に応じてキャッシュの設定をオフに
アセットバンドルは基本的に前回ロードしたものを別の場所にキャッシュしてロードするようになっています。
これはサーバーからの再ダウンロードを避けるための機能ですが、StreamingAssetsを使っている場合(WebGL以外は)はローカルPCなどにファイルが既にあるので、キャッシュする必要がありません。
逆にキャッシュロードがオンになっていると、修正パッチファイルとしてアセットバンドルを使った場合に、ファイルを上書き更新することが難しくなってしまいます。
キャッシュさせずにロードするように設定するには、AssetBundleInfoManagerの[Chace Load]をオフにします。
実機での確認
実機で確認するには、対象プラットフォームのアセットバンドルを作成する必要があります。
「Budild Mode」をAllPlatFormにして、実機のプラットフォームもビルド対象にします。
「Budild Target Flags」で対象プラットフォームを設定します。
Convertをすると、設定したすべてのプラットフォームに対してのアセットバンドルの作成が始まります。
ただし、プラットフォームの切り替え時にかなり長時間かかってしまいますので、ご注意ください。
ビルド時の注意
アセットバンドルのもとになったアセットがResources以下にあるとアプリに含まれてしまうので、
Resourcesフォルダをリネームするなどして、アセットバンドル以外はアプリに含まれないようにしましょう。
ビルド時の注意その2
ビルド対象のプラットフォーム以外のStreamingAssetsはビルド前に移動しましょう。
少しややこしいのですが、Unityには以下の仕様あります。
「Unityエディタ上ではUnityを動かしているPCのOSのアセットバンドルしかロードできない」
「ビルド後の実機では対象プラットフォームのアセットバンドルしかロードできない」
「Unityの仕様で、StreamingAssets以下のすべてのファイルは強制的にビルドされてしまう」
この仕様で何がおきるかというと
たとえばUnityをWindowsで動かして、Android向けに開発している場合、
「Unityエディタ上ではWindowsフォルダ以下のアセットバンドルしかロードできない」
→Windows用のアセットバンドルの作成が必要になる(宴のリソースコンバータのBudild Modeではこれを制御している)
「Android実機ではAndroidフォルダ以下のアセットバンドルしかロードできない」
→Windowsフォルダ以下のアセットバンドルはUnityエディタ上でテストするためには必要ですが、ビルドするときは不要になる
→ビルド前にStreamingAssets以下から不要なWindowsフォルダを移動か削除する必要がある
・・・ということなります。
マルチプラットフォーム開発をしていると、ここがとても面倒なのですが、Unityには「特定のフォルダを特定のプラットフォームのみビルド対象にする」という仕組みがありません。
なので、ビルド時に手動で解決するか、ビルド用のエディタ拡張プログラムを書くなどして解決してください。
宴のリソースコンバータのBudild Mode
「Unityエディタ上ではUnityを動かしているPCのOSのアセットバンドルしかロードできない」ため、Unity上ではWindowsかMacアセットバンドルが必要です。
宴のリソースコンバータのBudild Modeは、今のOSのアセットバンドルを自動で作成するようになっています。
ただし、WindowsとMac両方を利用しての開発で、バージョン管理ソフトなどでファイル共有している場合、どちらか一方のアセットバンドルしか作られていない可能性があります。
その場合、両方のOSでアセットバンドルを作成するか、ターゲットプラットフォームにチェックを入れて制御するなどしてください。
https://madnesslabo.net/utage/?page_id=9384
パッチファイルとして
Unityは「ゲームアプリの更新用の軽量なパッチファイルを作成する」ということができません。
Unityはプログラム・リソースをすべて含めた丸ごとのパッケージファイルでしかアプリが作成できないためです。
ただし、ビルド後であっても「StreamingAssets」フォルダ以下は、ファイル単位で任意に上書き更新をしても問題ありません。
・テクスチャやシナリオの更新がある場合は、「変更のあったアセットバンドルだけを上書きするようにパッチとして配布」
・プログラムやUIの更新がある場合は「改めてビルドして、StreamingAssets以下を含めないexeファイルその他をパッチとして配布」
ということをすれば軽量なパッチが配布可能です。
その他
その他、詳細については、各項目のドキュメントを確認してください。
ビルド、ファイル管理、DL対応について
リソースコンバーター
AdvEngineStarter