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

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

Unity での

AssetBundle による

追加コンテンツの扱い方

株式会社 Aimingリードソフトウェアエンジニア

細田幸治2012/10/28

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

こんにちは!

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

細田幸治といいます。

http://www.facebook.com/kouji.hosoda

株式会社 Aiming でエンジニアをしています。

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

スマホで

オンラインゲーム作ってます

http://lordofknights.jp

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

今日は

Unity3D で

スマホオンラインゲームの

リソースを

どう扱うかの話

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

Unity3D 使かっていますか?

( ・ ∇ ・ )ノ

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

Unity3D の特徴

● モバイルに強い○ iPhone, Android対応

● 安い(ゲームエンジンとしては)○ スタートアップのリスクが低い

● オープンな文化(開発元もユーザーも)○ 情報や便利ライブラリが手に入りやすい

● C#でスクリプトが書ける○ .Net便利

● AssetBundle○ 追加コンテンツが作りやすい

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

スマートフォンマルチプラットフォーム対応ですばやくゲーム作るのに適している

Unity3D いいね!

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

スマホでゲーム

作っていますか?

( ・ ∇ ・ )ノ

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

● インストール時のサイズ制限(50MB)○ サイズが大きいとwifiじゃないとインストールできなくなる

● 通信回線が細い○ ダウンロード待ちが長いとゲームから離れてしまう

● 競合するアプリ(ゲームその他)がたくさんある○ 続けてもらうために継続的なアップデートが必要

● ストア等の審査がある○ iPhoneの場合、リリースまでに10営業日前後かかる

○ 審査の間、埋め込みリソースは変更不可能

スマートフォンゲームの特徴

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

● サービス開始してからが本番○ ユーザーが継続して遊んでくれるようにするために、効

率的に開発・運用出来ることが必要

○ 毎週イベントやキャンペーン、新アイテムが追加される

■ サービスするほどリソースが増える

オンラインゲームの場合は

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

審査スケジュールに依存しないで追加コンテンツのリリースが出来ないと死ぬる

つまり

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

という訳で

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

Unity3D で

スマホオンラインゲームの

リソースを

どう扱うとよいかというと

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

● wifi なくても遊べるようにしたいなら○ 初期サイズ小さく(50MB以下)

● 追加コンテンツをいつでもリリースできるように○ AssetBundleを適切に使う

初期サイズ小さく

追加はAssetBundleで

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

以降はAssetBundleの

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

● 特徴・できること

● 実装注意点

○ 1.メモリ消費

○ 2.非同期読込

○ 3.通信状況悪いと読み込めない

○ 4.iPhone、Android で別フォーマット

○ 5.キャッシュ

○ 6.スクリプトは消える

● Editor Tips○ 1.素材取り込み時の自動コンバート

○ 2.自動書き出し

○ 3.プラットフォーム切り替え短縮

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

特徴・できること

● Unity 専用の外部素材フォーマットのこと● GameObject、Material、Texture、Prefab など

Unity で使える Asset なら大体入る● サーバーに配置、アプリから HTTP アクセスで

読み込む● AssetBundle の作成は Unity Pro Only● ストアの審査なしでリリース可能● ダウンロードファイルのキャッシュが効く

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

実装上の注意点

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

● AssetBundle のインスタンス分多くなる○ 同時に使わないものはファイル分ける

○ 使わなくなったら解放しよう

実装注意点 1.メモリ消費

memory

AssetBundle クラス

Material,GameObject,etc.www

LoadLoad

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

● 最初から非同期前提に組もう○ WWW.LoadFromCacheOrDownload で読み込んでから

WWW.assetBundle でアクセス

○ Resources.Load のように同期的には読み込めない

○ キャッシュから読み込む場合でも非同期だからね

● 参考○ ロードオブナイツで使った非同期デザイン

■ http://www.slideshare.net/ppcchan/async-design-with-unity3d

実装注意点 2.非同期読込

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

● サイズ小さめに(500Kb以下が望ましい)● 動的と静的で読込方法を使い分ける

○ 動的に扱う素材は個別に待ちを入れる

○ 静的に扱う素材はフェードアウト中に先読み

実装注意点 3.通信状況が悪

いと読み込めない

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

● テクスチャとか端末最適化されてるため○ ファイルサイズとか画質も最適化されるのでトレードオフ

● サーバー側でファイルの配置工夫しよう○ プラットフォームごとにディレクトリ構造を作ることで同名

ファイルを配置分け

■ /assets_root/iPhone/Card_001.asset■ /assets_root/Android/Card_001.asset

実装注意点 4.iPhone、

Androidで別フォーマット

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

● 自動キャッシュの仕組みがある○ WWW.LoadFromCacheOrDownload○ ファイルごとにバージョンを指定して使う

■ バージョンでダウンロードかキャッシュかを自動判別

● サーバー側のキャッシュに注意○ ファイル名の後ろにクエリストリングでタイムスタンプなど

をつけてサーバーキャッシュ無効化するべし

■ 例 http://www.foo.com/foo.asset?time=20121028

実装注意点 5.キャッシュ

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

● スクリプトは AssetBundle に入れられない○ iPhone ではコードの動的生成 NG だから

● 読み込んだ後にプログラム側で追加は可能○ アプリ本体側に事前にスクリプトを入れておき、

GameObject.AddComponent で読み込んだGameObjectに動的に追加する

実装注意点 6.スクリプトは消

える

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

Editor Tips

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

● Editorスクリプトでカスタマイズ可能○ AssetPostprocessor

● 読み込むファイル名やフォルダ名でコンバート形式を自動切り分けしたりすると便利

Editor Tips 1.素材取り込み

時の自動コンバート

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

● Editorスクリプトでカスタマイズ可能○ BuildPipeline.BuildAssetBundle

● コマンド一発でサーバーに配置できるフォルダ構造で書き出し出来るようにすると便利

Editor Tips 2.自動書き出し

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

● ビルドプラットフォーム切り替え時はテクスチャの再圧縮で数時間かかることも

● AssetServer !!○ AssetBundle の書き出し用PCに入れておくとビルドプラッ

トフォームの切り替えが一瞬で終わる

○ AssetServer 1人分は必須

Editor Tips 3.プラットフォー

ム切り替え短縮

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

以上

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

可能なことを把握して

楽しく便利に開発しよう!

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

質疑応答

● なにかあれば!

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

おわり