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