テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

ビルド後のiPhone/Androidゲームにステージを追加する簡単な方法

意外と知られていないTips。

実はBuildStreamedSceneAssetBundleを使えば、AssetBundleをシーン単位で構築することが出来る。これで構築したAssetBundleを読み込んだ後は、LoadLevelやLoadLevelAditiveでダウンロードしてきたシーンを読み込める。

BuildPipeline.BuildStreamedSceneAssetBundle

下のデモでは、テクスチャもメッシュも、アニメーションすらも入っていないシーンを構築後、ランタイムでシーンを追加して読み込んでいる。

スクリーンショット 2013-11-23 21.16.40スクリーンショット 2013-11-24 12.08.18
デモ

上手く使えば、例えば1回しか行わないようなチュートリアルだったりとか、期間限定のイベントステージ等を配信したりすることが出来ると思う。


なお、読み込むシーンが使用するスクリプトがゲームに含まれていないとスクリプトの参照が外れるの、その辺りは注意。 特にAssetBundleをビルドするプロジェクトとゲームを構築するプロジェクトが異なるとGUIDの問題で発生しやすいかもしれない

逆に…例えばPlayMakerみたいなノーコーディングで挙動を管理出来るアセットがあれば、ほぼ無制限にシーンが追加できる気がする。(要するにソースコードを追加してなければOK)



下のソースコードの例だと、assets/test_scene.unityをhoge.unity3dとしてパッケージングしてAssetBundleを構築。後はLoadBundleをアタッチすれば、test_scene.unityシーンをLoadLevelで読み込む事が出来る。

後はシーンを管理するシーンマネージャーのような物を簡単に作れば、追加ステージやチュートリアル等も管理出来ると思う。

何やらJSONとAssetBundleを使ってシーンをランタイムに構築している人がいたので、一応…(そのアプローチも間違いではないと思うけど…)

なお、AssetBundleと同じく、ターゲットに指定したプラットフォームもしくはエディタでないと読めないので注意。