More Related Content
Similar to Unityのasset bundle運用実例@lordofknights (20)
Unityのasset bundle運用実例@lordofknights
- 8. 概説
● Unity 専用の外部素材フォーマットのこと
● GameObject、Material、Prefab などが入る
● サーバーなどに置いてアプリで読み込んで使う
● AssetBundle の作成は Unity Pro Only
- 9. メリット
1. アプリケーションサイズを小さくできる
2. Apple 審査をしなくてもコンテンツを追加できる
3. キャッシュが効く
4. アプリ本体と AssetBundle とでワークフロー(プ
ロジェクト)分けられる
- 10. デメリット
1. 他の素材方式よりもメモリを消費する
○ AssetBundle クラス自体がアセットを内包した状態でメモ
リに乗る
○ 上記 AssetBundle クラスから Material などを Load すると
それもメモリに乗る
memory
www
Material,GameObject,etc.
AssetBundle
Load クラス Load
- 13. デメリット
4. プラットフォーム間で互換性がない
○ Android、iPhone、WebPlayer でそれぞれ別ファイル
フォーマット
○ AssetBundle のビルド時にプラットフォームを指定して書
き出す必要がある
○ ビルド時のプラットフォームの切り替えに時間がかかる
○ ちなみに Editor ではどのフォーマットでも読み込める
- 14. デメリット
5. バージョンを指定しても更新されない時がある
○ ブラウザやサーバーのキャッシュに乗るため、更新したく
てもうまく反映されない場合がある
○ 読み込む際にファイル名の後ろにタイムスタンプなどをつ
けてキャッシュ無効化するべし
○ 例:http://www.foo.com/foo.asset?time=201106011930
- 15. デメリット
6. スクリプトは AssetBundle に入れられない
(iPhone ではコードの動的生成 NG だから)
7. Unity がバージョンアップすると読み込めなくな
る(Unity3.5.1 から下位互換されたかも)
○ 3.4系のときは別バージョンでビルドしたAssetBundleを読
み込もうとすると、実機でキャッチできないエラー出して読
み込めなかった。
- 21. 何のために使ったか?
● アプリサイズ削減
○ BGM (後にアプリ本体に埋め込み)
○ 背景画像(後にアプリ本体に埋め込み)
○ カード枠(後にアプリ本体に埋め込み)
○ などなど容量が大きい素材たち
AppleStore の3G回線でのダウンロードサイズ制
限が 20 MB だったときに使用した
↓
現在は 50 MB まで OK になったので再埋め込み
- 23. どう実装したか?
● メモリ管理
○ 最初は1つの AssetBundle に複数素材を入れていたが、
ばらばらに分けて読み込み時のメモリを削減
○ メモリが少ないデバイス(iPod touch など)の場合は使用
メモリ量が 120 MB 以上になったらシーン切り替え時に
AssetBundle をいったん Unload するようにした
- 25. どう実装したか?
● キャッシュ
○ 開発当時は Unity のキャッシュがまだなかった、と思う
○ 独自キャッシュの仕組みを実装
■ WWW.LoadFromCacheOrDownload と同じ挙動
○ 最新バージョン番号をサーバーから教えてもらい、クライ
アントでキャッシュしているバージョン番号と一致しなかっ
たら再読み込みする
○ ファイル名の後ろにクエリストリングでタイムスタンプをつ
けて予期せぬキャッシュを避ける
- 26. どう実装したか?
● バージョン、プラットフォーム、言語の切り分け
○ 同じファイル名でもプラットフォームごとに違うフォーマット
のファイルが必要
○ バージョン、プラットフォーム、言語でディレクトリ構造を作
ることで同名ファイルを配置分け
■ /version1_0/iPhone/ja/Card_001.asset
■ /version1_1/Android/en/Card_001.asset
○ クライアントから条件を指定してファイルパスをサーバー
から教えてもらう
- 28. 運用ワークフロー
● アプリ本体とは別のプロジェクトで作成
○ アプリ本体の修正を気にせずに作業できる
● ファイルサイズはなるべく小さくパック
○ AssetBundle ファイル単位でメモリに読み込むため
○ 同時に使わない素材は別ファイルに分ける
○ メモリ使用量と読み込み速度を気にかける
- 29. 運用ワークフロー
● 規約
○ シンプルなフォルダ構造にして企画やデザインの人が直
接いじりやすいようにする
○ プロジェクト内のフォルダ構造、ファイル名から自動的に
出力ファイルの名前や配置場所が決まるようにする
● 一発ビルドコマンド
○ Editor スクリプトで一括ビルドコマンドを実装
○ 書き出されたフォルダをそのままサーバーに配置すれば
OK
- 30. まとめ
● アップデート時のコンテンツ追加に便利
○ Apple の審査を待たなくて良い
● いろいろ注意点がある
○ 予期せぬキャッシュに注意
○ 非同期プログラミングが必要
○ 読み込めないときの対応をきちんとする
● ポイントをおさえて使おう
○ プラットフォーム毎にアセットを切り替えられるように
○ アセット1個1個はメモリと速度を気にして小さめに
○ Editor スクリプトを活用してワークフローを簡単に