Unity 全シーン管理マネージャーの作成
Unityを実行するとき任意のシーンが呼び出され,そのシーンの中にあるマネージャーがただ一つ存在し続けるようにするための方法
Unity 2018.2.12.f.1 使用
参考 全てのシーンに存在し、かつ、一つしか存在してはいけないマネージャー的存在の実装方法【Unity】 - (:3[kanのメモ帳]
完成イメージは以下のgifを参照
手順1 呼び出されるだけのシーンを作成する
カメラオブジェクトも削除しておく
手順2 Sceneを追加する
手順3 スクリプトを作成する
以下のスクリプトを作成する.それだけでよく何かのオブジェクトにアタッチする必要はない. RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)でシーンのロード前に呼び出される.
using UnityEngine; using UnityEngine.SceneManagement; public class ManagerSceneAutoLoader : MonoBehaviour { [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void LoadManagerScene(){ string managerSceneName = "ManagerScene"; //ManagerSceneが有効でないときに追加ロード if(!SceneManager.GetSceneByName(managerSceneName).IsValid()){ SceneManager.LoadScene(managerSceneName, LoadSceneMode.Additive); } } }
手順4 全シーンに適応したいマネージャーを用意
今回はスマホゲームによくある時間によって回復する行動ポイントを管理するマネージャを全シーンに配置する.
手順5 全シーン管理マネージャーをシーン遷移しても消えないようにする
DontDestroyOnLoadメソッドを使って消えないようにする.
using UnityEngine; public class DDManager : MonoBehaviour { public GameObject gameObject; void Start () { DontDestroyOnLoad(gameObject); } }
これで実行すれば,実行されたところからManagerSceneが起動し,DDManagerによりActionPointManagerが残り,重複することなく全シーンに配置される.