かさたな日記

主にUnityを使った制作記録。書いてる人は初心者です。一緒に頑張ろう。

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にイベント登録しているのがまずかったみたいです。

このマネージャはシングルトンになっているし、
素直にインスタンス取得ルーチン内で生成させよう。。。