HackerQuest

No app, no life

趣味と実益を兼ねてプログラマをやっている者👨‍💻

Unity 全シーン管理マネージャーの作成

 Unityを実行するとき任意のシーンが呼び出され,そのシーンの中にあるマネージャーがただ一つ存在し続けるようにするための方法

Unity 2018.2.12.f.1 使用

参考 全てのシーンに存在し、かつ、一つしか存在してはいけないマネージャー的存在の実装方法【Unity】 - (:3[kanのメモ帳]

完成イメージは以下のgifを参照 nk1w7-wsfm5.gif

手順1 呼び出されるだけのシーンを作成する

カメラオブジェクトも削除しておく スクリーンショット 2018-11-16 0.03.37.png

手順2 Sceneを追加する

スクリーンショット 2018-11-16 1.54.36.png

手順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 全シーンに適応したいマネージャーを用意

今回はスマホゲームによくある時間によって回復する行動ポイントを管理するマネージャを全シーンに配置する. image.png

手順5 全シーン管理マネージャーをシーン遷移しても消えないようにする

DontDestroyOnLoadメソッドを使って消えないようにする.

using UnityEngine;

public class DDManager : MonoBehaviour {

    public GameObject gameObject;

    void Start () {
        DontDestroyOnLoad(gameObject);
    }
    
}

スクリーンショット 2018-11-16 2.09.23.png

これで実行すれば,実行されたところからManagerSceneが起動し,DDManagerによりActionPointManagerが残り,重複することなく全シーンに配置される.

Ryo Tsuzukihashi