プロジェクト内にあった、testScript
void Awake(){
Debug.Log ("Awake()");
}
void Start () {
Debug.Log ("Start()");
}
SceneMain→SceneSub移行時には
GlobalManagerがDontDestroyOnLoad指定されてアタッチされたスクリプトも
そのまま残存するため、AwakeもStartも呼ばれない。
ここまでは理解できるのですが、
SceneSub→SceneMain移行時にだけ
Awakeがまた呼ばれるのはなぜなのでしょうか?
(SceneSub→SceneMain移行時もGlobalManagerはそのまま残存するので、
Awakeが呼ばれることはないと思ったのですが・・・)
SceneSubからSceneMainに移行した時、GlobalManagerは生成されています。
ですが、GlobalManagerにアタッチされているスクリプト「ScriptGlobalManager」の条件で、
GlobalManagerが2つにならない様にDestroyされています。
なので、2つ目のGlobalManagerが生成された時点でAwakeが呼ばれます。
対してDestroyが行われている場所もAwakeの為、Startは呼ばれません。
ご回答ありがとうございます!
すみません、まだよくわかっていないのですが、
SceneSubからSceneMainに移行した時に
GlobalManagerが生成されるのはDontDestroyOnLoadに指定されているからでしょうか?
もしそうならば、SceneMainからSceneSubに移行した時に
GlobalManagerが生成されない(Awakeが呼ばれない)のはなぜなのでしょうか?
SceneMainには元からシーンにオブジェクト「GlobalManager」が存在します。
なので、元々存在するGlobalManagerがDontDestroyOnLoadに指定されます。
その時に、既にGlobalManagerがあればDestroyされる様になっています。
逆に、SceneSubには「GlobalManager」が存在しないので何も呼ばれる事はありません。
シーン再生前の両シーンのヒエラルキーウィンドウを確認してみて下さい。
DontDestroyでSubSceneのHierarchyにもGlobalManagerが
出てくるので、こちらでもSceneMainの時と同じ挙動をするのだと思っておりました。
あくまで、元々存在するシーンのみでしか呼ばれないということですね!
納得しました!ありがとうございます!