意外と知られていないTips。
実はBuildStreamedSceneAssetBundleを使えば、AssetBundleをシーン単位で構築することが出来る。これで構築したAssetBundleを読み込んだ後は、LoadLevelやLoadLevelAditiveでダウンロードしてきたシーンを読み込める。
BuildPipeline.BuildStreamedSceneAssetBundle
下のデモでは、テクスチャもメッシュも、アニメーションすらも入っていないシーンを構築後、ランタイムでシーンを追加して読み込んでいる。
上手く使えば、例えば1回しか行わないようなチュートリアルだったりとか、期間限定のイベントステージ等を配信したりすることが出来ると思う。
なお、読み込むシーンが使用するスクリプトがゲームに含まれていないとスクリプトの参照が外れるの、その辺りは注意。 特にAssetBundleをビルドするプロジェクトとゲームを構築するプロジェクトが異なるとGUIDの問題で発生しやすいかもしれない
逆に…例えばPlayMakerみたいなノーコーディングで挙動を管理出来るアセットがあれば、ほぼ無制限にシーンが追加できる気がする。(要するにソースコードを追加してなければOK)
下のソースコードの例だと、assets/test_scene.unityをhoge.unity3dとしてパッケージングしてAssetBundleを構築。後はLoadBundleをアタッチすれば、test_scene.unityシーンをLoadLevelで読み込む事が出来る。
後はシーンを管理するシーンマネージャーのような物を簡単に作れば、追加ステージやチュートリアル等も管理出来ると思う。
何やらJSONとAssetBundleを使ってシーンをランタイムに構築している人がいたので、一応…(そのアプローチも間違いではないと思うけど…)
なお、AssetBundleと同じく、ターゲットに指定したプラットフォームもしくはエディタでないと読めないので注意。