Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Unity での asset bundle による追加コンテンツの扱い方

29,092 views

Published on

Unity3Dでスマートフォンゲームを作る際のアセットバンドル使用のポイントについて

Published in: Technology
  • Be the first to comment

Unity での asset bundle による追加コンテンツの扱い方

  1. 1. Unity でのAssetBundle による追加コンテンツの扱い方 株式会社 Aiming リードソフトウェアエンジニア 細田幸治 2012/10/28
  2. 2. こんにちは!
  3. 3. 細田幸治といいます。http://www.facebook.com/kouji.hosoda株式会社 Aiming でエンジニアをしています。
  4. 4. スマホでオンラインゲーム作ってます http://lordofknights.jp
  5. 5. 今日はUnity3D でスマホオンラインゲームのリソースをどう扱うかの話
  6. 6. Unity3D使かっていますか? ( ・ ∇ ・ )ノ
  7. 7. Unity3D の特徴● モバイルに強い ○ iPhone, Android対応● 安い(ゲームエンジンとしては) ○ スタートアップのリスクが低い● オープンな文化(開発元もユーザーも) ○ 情報や便利ライブラリが手に入りやすい● C#でスクリプトが書ける ○ .Net便利● AssetBundle ○ 追加コンテンツが作りやすい
  8. 8. Unity3D いいね!スマートフォンマルチプラットフォーム対応ですばやくゲーム作るのに適している
  9. 9. スマホでゲーム 作っていますか? ( ・ ∇ ・ )ノ
  10. 10. スマートフォンゲームの特徴● インストール時のサイズ制限(50MB) ○ サイズが大きいとwifiじゃないとインストールできなくなる● 通信回線が細い ○ ダウンロード待ちが長いとゲームから離れてしまう● 競合するアプリ(ゲームその他)がたくさんある ○ 続けてもらうために継続的なアップデートが必要● ストア等の審査がある ○ iPhoneの場合、リリースまでに10営業日前後かかる ○ 審査の間、埋め込みリソースは変更不可能
  11. 11. オンラインゲームの場合は● サービス開始してからが本番 ○ ユーザーが継続して遊んでくれるようにするために、効 率的に開発・運用出来ることが必要 ○ 毎週イベントやキャンペーン、新アイテムが追加される ■ サービスするほどリソース が増える
  12. 12. つまり審査スケジュールに依存しないで追加コンテンツのリリースが出来ないと死ぬる
  13. 13. という訳で
  14. 14. Unity3D でスマホオンラインゲームのリソースをどう扱うとよいかというと
  15. 15. 初期サイズ小さく追加はAssetBundleで● wifi なくても遊べるようにしたいなら ○ 初期サイズ小さく(50MB以下)● 追加コンテンツをいつでもリリースできるように ○ AssetBundleを適切に使う
  16. 16. 以降はAssetBundleの 話
  17. 17. ● 特徴・できること● 実装注意点 ○ 1.メモリ消費 ○ 2.非同期読込 ○ 3.通信状況悪いと読み込めない ○ 4.iPhone、Android で別フォーマット ○ 5.キャッシュ ○ 6.スクリプトは消える● Editor Tips ○ 1.素材取り込み時の自動コンバート ○ 2.自動書き出し ○ 3.プラットフォーム切り替え短縮
  18. 18. 特徴・できること● Unity 専用の外部素材フォーマットのこと● GameObject、Material、Texture、Prefab など Unity で使える Asset なら大体入る● サーバーに配置、アプリから HTTP アクセスで 読み込む● AssetBundle の作成は Unity Pro Only● ストアの審査なしでリリース可能● ダウンロードファイルのキャッシュが効く
  19. 19. 実装上の注意点
  20. 20. 実装注意点 1.メモリ消費● AssetBundle のインスタンス分多くなる ○ 同時に使わないものはファイル分ける ○ 使わなくなったら解放しよう memorywww Material,GameObject,etc. AssetBundle Load クラス Load
  21. 21. 実装注意点 2.非同期読込● 最初から非同期前提に組もう ○ WWW.LoadFromCacheOrDownload で読み込んでから WWW.assetBundle でアクセス ○ Resources.Load のように同期的には読み込めない ○ キャッシュから読み込む場合でも非同期だからね● 参考 ○ ロードオブナイツで使った非同期デザイン ■ http://www.slideshare.net/ppcchan/async-design- with-unity3d
  22. 22. 実装注意点 3.通信状況が悪いと読み込めない● サイズ小さめに(500Kb以下が望ましい)● 動的と静的で読込方法を使い分ける ○ 動的に扱う素材は個別に待ちを入れる ○ 静的に扱う素材はフェードアウト中に先読み
  23. 23. 実装注意点 4.iPhone、Androidで別フォーマット● テクスチャとか端末最適化されてるため ○ ファイルサイズとか画質も最適化されるのでトレードオフ● サーバー側でファイルの配置工夫しよう ○ プラットフォームごとにディレクトリ構造を作ることで同名 ファイルを配置分け ■ /assets_root/iPhone/Card_001.asset ■ /assets_root/Android/Card_001.asset
  24. 24. 実装注意点 5.キャッシュ● 自動キャッシュの仕組みがある ○ WWW.LoadFromCacheOrDownload ○ ファイルごとにバージョンを指定して使う ■ バージョンでダウンロードかキャッシュかを自動判別● サーバー側のキャッシュに注意 ○ ファイル名の後ろにクエリストリングでタイムスタンプなど をつけてサーバーキャッシュ無効化するべし ■ 例 http://www.foo.com/foo.asset?time=20121028
  25. 25. 実装注意点 6.スクリプトは消える● スクリプトは AssetBundle に入れられない ○ iPhone ではコードの動的生成 NG だから● 読み込んだ後にプログラム側で追加は可能 ○ アプリ本体側に事前にスクリプトを入れておき、 GameObject.AddComponent で読み込んだ GameObjectに動的に追加する
  26. 26. Editor Tips
  27. 27. Editor Tips 1.素材取り込み時の自動コンバート● Editorスクリプトでカスタマイズ可能 ○ AssetPostprocessor● 読み込むファイル名やフォルダ名でコンバート 形式を自動切り分けしたりすると便利
  28. 28. Editor Tips 2.自動書き出し● Editorスクリプトでカスタマイズ可能 ○ BuildPipeline.BuildAssetBundle● コマンド一発でサーバーに配置できるフォルダ 構造で書き出し出来るようにすると便利
  29. 29. Editor Tips 3.プラットフォーム切り替え短縮● ビルドプラットフォーム切り替え時はテクスチャ の再圧縮で数時間かかることも● AssetServer !! ○ AssetBundle の書き出し用PCに入れておくとビルドプラッ トフォームの切り替えが一瞬で終わる ○ AssetServer 1人分は必須
  30. 30. 以上
  31. 31. 可能なことを把握して楽しく便利に開発しよう!
  32. 32. 質疑応答● なにかあれば!
  33. 33. おわり

×