Unity 全シーン管理マネージャーの作成
Unityを実行するとき任意のシーンが呼び出され,そのシーンの中にあるマネージャーがただ一つ存在し続けるようにするための方法
Unity 2018.2.12.f.1 使用
参考 全てのシーンに存在し、かつ、一つしか存在してはいけないマネージャー的存在の実装方法【Unity】 - (:3[kanのメモ帳]
手順1 呼び出されるだけのシーンを作成する
手順2 Sceneを追加する
手順3 スクリプトを作成する
以下のスクリプトを作成する.それだけでよく何かのオブジェクトにアタッチする必要はない.
RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)でシーンのロード前に呼び出される.
ManagerSceneAutoLoader.cs
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メソッドを使って消えないようにする.
DDManager.cs
using UnityEngine;
public class DDManager : MonoBehaviour {
public GameObject gameObject;
void Start () {
DontDestroyOnLoad(gameObject);
}
}
これで実行すれば,実行されたところからManagerSceneが起動し,DDManagerによりActionPointManagerが残り,重複することなく全シーンに配置される.