sceneUnloadedが呼ばれちゃう現象の調査
# 昨日からの調査の追記です。
うーむ、どうやらEditorOnlyModeは関係ないみたいだ。
また、起動時のみに発生するというわけでもなさそう。
#
発生はエディタ上のみっぽい。
#
エディタでプレイモード起動中にインスペクタの表示を切り替えると
つまりOdinを適用した別のオブジェクトを選択すると発生するみたい。
今のプロジェクトではシーン切替時にオブジェクトプールの掃除を
割り込ませているのでちょっと厄介。。。
根本的な解決になってないけどこれで対処しておこう。
5.6のときは発生しなかったから2017のみの現象なのかな。
void OnSceneUnloaded(Scene scene) { //現在のシーンでなければスキップ if (scene.name != SceneManager.GetActiveScene().name) { return; } CleanPool(); Debug.Log("BulletMgr.cs:バレットのプールをクリアしました。"); }
# 更に追記
どうもこれが原因の一つみたい。
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
このattributeをつけたメソッドはゲーム起動時、Awake()の前に呼ばれます。
また、シーン上に配置されていなくても、プロジェクト内にあれば呼ばれます。
この勝手に読んでくれる機能がなかなかに便利で、
ボクはこれを使ってマネージャを自動生成したりデータベースを読んだりしてるのですが
どうもそのタイミングでsceneUnloadedにイベント登録しているのがまずかったみたいです。
このマネージャはシングルトンになっているし、
素直にインスタンス取得ルーチン内で生成させよう。。。