Unity4でActiveが仕様変更され大分使いやすくなったので、シーンローダーを作ってみた。
初回起動はロードが必要だが、一度表示した画面は爆速で切り替わるのでかなり快適。
リソースキャッシュすればより高速化が可能だし、けっこういい線行ってると思う。
一番下のボタンはLoadLevelで全部メモリを綺麗にしてる。
■シーンローダー
基本的な構造は「もののけ大戦“陣”製作事例」のシーンキャッシュ機能を参考にした。
つまり、シーンをLoadLevelAdditiveで配置してシーン切替はActiveを切り替えるだけって方法。これなら部分的にシーンをロード出来るので使わないシーンはロードせず読めるし、破棄時のオーバーヘッドも少ない。もののけ大戦“陣”製作事例
http://www.slideshare.net/RyoheiTokimura/ss-14048278
少なくともResourcesでオブジェクト毎に組み立てる的な、超面倒くさい手順は踏まなくて済む。
一応Application.LoadLevelとも共用出来るので、大きなシーン切り替えはそっちでやったほうが楽かも。
(例えばブリーフィング→ゲーム→デブリーフィング等)はLoadLevelでメモリ周りもスッキリしてもらって、UIの切り替えはSceneLoaderでやる感じ。)
それ以上複雑化するならリソースキャッシュにマテリアル突っ込んどいて高速化…ぐらいにしないと事故率が上がりそう。
[Unity3D]ロードの待ち時間を短くする(その4/Application.LoadLevelAdditive)
http://terasur.blog.fc2.com/blog-entry-222.html
■現状の機能
現状の機能は3つ。
・シーンをロード。初回はロードして二回目はactive切替。
一応active切替時もAwakeとStartを呼ぶ。
変更した値はそのまま。・シーンのリロード。シーンのstatic変数以外のコンポーネントや座標を全部初期化する。
単純なActive切り替えと比べて、ちと遅い。・カレントシーン以外のシーンキャッシュを破棄してメモリを確保
ライトマップは破棄出来ない(方法がわからない)
近いうちにAssetStoreかGithub辺りにでも出そうと思うけど、需要あるかな・・・