自分用Unityメモ:シーンロード時に処理を行う

新しくシーンを読み込んだ時に
何か処理をしたいときは、

OnLevelWasLoaded というAPIを使えばいいみたい。

……と、思っていたのですが、どうやらこれは旧型式で
5.4あたりから非推奨になったみたいです。
(しかも、そのうち消すから使うなって書いてあるよ。あるいは書いてあった。)

じゃあどうするかというと、
SceneManagerのデリゲートを使えばいいみたい。
(※デリゲートはメソッドの入る変数みたいなものです(語弊あり))

・activeSceneChanged  //アクティブのシーンが切り替わったときに呼ばれる
・sceneLoaded //シーンがロードされたときに呼ばれる
・sceneUnloaded //シーンがアンロードされたときに呼ばれる


使い方の例としては……

    void OnSceneLoaded(Scene loaded)
    {
        Debug.Log(loaded + "がロードされたよ");
    }

こんな感じのメソッドを用意しておいて、
(メソッドの名前に決まりはないよ)
マネージャーのAwake()、Start()あたりに

SceneManager.sceneLoaded += OnSceneLoaded;

とか記述しておいてあげればロード時に処理をしてくれるはず。



今のゲームで使っているのは
sceneUnloadedの方で、シーン切り替え時に
使い終わったオブジェクトのプールを削除したりしてます。