Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Unityのasset bundle運用実例@lordofknights

26.312 visualizaciones

Publicado el

弊社でUnity3Dを使って開発したiPhoneアプリ(Lord of Knights)でのAssetBundle実例と、使いどころの話。

Publicado en: Tecnología
  • Inicia sesión para ver los comentarios

Unityのasset bundle運用実例@lordofknights

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

×