シーン読み込み時に処理を実行したい場合、通常ならばStart()内に書いても問題ないが、Start()はインスタンス化したときにしかコールされないので、DontDestroyOnLoadでオブジェクトを持ち越してるときは弊害が出る。そういうときは
SceneManager.sceneLoaded
を使う。
SceneManagement.SceneManager.sceneLoaded - Unity スクリプトリファレンス
ちなみに、よくみれば分かるが、リファレンスのOnSceneLoadedはコールバックではなく、デリゲートであるsceneLoadedに入れるためのメソッドなので、以下のようにメソッドを代入する必要がある。
void OnEnable() { Debug.Log("OnEnable called"); SceneManager.sceneLoaded += OnSceneLoaded; }
私は最初、コールバックと勘違いして何故実行されないのかと詰まった。