非同期シーン追加ロード、からの復帰
やること
RPGのフィールドで敵に遭遇 -> ブワッ -> バトル -> フィールドに戻る、みたいな流れを作るためのシーンロード処理。
具体的にやるべきなのは
- ブワッとなってる間にバトルシーンを読み込む(非同期ロード)
- バトルが終わったらフィールドに処理を戻す(フィールドを破棄せずバトルが終わったら復帰)
コード
Unity5.3.1p2
using UnityEngine.SceneManagement; class Field : MonoBehaviour { IEnumerator LoadBattleCoroutine() { var loadRequest = SceneManager.LoadSceneAsync("Battle", LoadSceneMode.Additive); loadRequest.allowSceneActivation = false; // ここでブワッ yield return new WaitForSeconds(10f); // FieldシーンとBattleシーンの両方にEventSystemが存在する場合は、ここでcurrent = nullしておくことで、Battle側のEventSystemに処理を移すことができる。 UnityEngine.EventSystems.EventSystem.current = null; loadRequest.allowSceneActivation = true; yield return loadRequest; SceneManager.SetActiveScene(SceneManager.GetSceneByName("Battle")); foreach (var obj in gameObject.scene.GetRootGameObjects()) { // コルーチンをFieldシーンのオブジェクトに実行させた場合、ここでコルーチンが止まるので注意 obj.SetActive(false); } } void UnloadBattleAndResume() { SceneManager.UnloadScene("Battle"); SceneManager.SetActiveScene(gameObject.scene); foreach (var obj in gameObject.scene.GetRootGameObjects()) { obj.SetActive(true); } } }
ただし
真面目にメモリとか気にするなら、フィールドシーンは破棄して復帰時に再構築しような。