Unity5.3でExecuteInEditModeとDontDestroyOnLoadを同時に使用した際の挙動
Unity5.3にアップデートしてかなり発見しにくいバグ?を見つけたのでメモ
問題
[ExecuteInEditMode] public class Test : MonoBehaviour { void Awake() { DontDestroyOnLoad (gameObject); } }
こんなクラスがあった時にEditor上でHierarchyにスクリプトを追加しようとすると表示されず、GameObject毎どこかに行ってしまいます。
FindObjectOfType
を使用するとどこかに存在していることは分かるのですが、困ったことにどこにも見つかりません。
原因
原因はDontDestroyOnLoadの挙動が変更されているからのようです。 このメソッドが呼び出された直後、普段は隠蔽されている”DontDestroyOnLoad”シーンにGameObjectが移動される挙動になっていました。
gameObject.scene.name
でログを出力するとDontDestroyOnLoadシーンに飛ばされていることが分かります。
このシーンは実行直前にHierarchy上で確認することが出来ます。
(実行が開始すると消えるので動画キャプチャから抜き出しました)
解決策
解決策としては実行している時のみ指定をすれば一応動作します
if (Application.isPlaying) { DontDestroyOnLoad (gameObject); }
滅茶苦茶ハマりました…