【Unity】シーン遷移時のOnDestroy処理でエラーとなる現象の対策

2023年4月2日

どうも、だらはです。
今回は、シーン遷移時のOnDestroy()処理でエラーとなる現象の対策法をまとめたいと思います。

スポンサーリンク

現象と対策

先ずは現象の説明をさせて下さい。
シーンが遷移するとMissingReferenceExceptionのエラーが再現するようになりました。

このエラーは、削除されたオブジェクトを参照し続けることで再現するエラーだそうです。
今回の私の環境では、オブジェクトが削除されるタイミングで実行されるOnDestroy()が、シーン遷移により実行されて、遷移後にはそのオブジェクトが存在しないために再現していました。(分かりにくい表現ですみません。。)
なので、対策としてはOnDestroy()実行時にオブジェクトが削除されていたら(nullだったら)、処理を中断するという処理にすることで解決ができます。

以下の参考スクリプトでは、objScenarioが削除されていたら(nullだったら)、returnにより処理を中断するような処理になっています。

◆参考

    void OnDestroy()
    {
        //objScenarioは、後述のscenarioManagementのGameObject。
        if (objScenario == null)
        {
            return;
        }

        //scenarioManagement(GameObject)のflgDestroy()に、gameObjectを渡す。
        scenarioManagement.SendMessage("flgDestroy", gameObject);
    }

補足ですが、SendMessageは、スクリプト名を指定することなく、外部から関数を実行することができます。
使い方はシンプルで、1つだけですが引数だって渡せちゃいます。
便利ですが、若干処理負荷が高いようなので、処理負荷を気にされる方はEventSystemsを使うことをお勧めいたします。
以下に、EventSystemsについて分かりやすくまとめられた記事を見つけましたので、参考にして頂けたらと思います。

◆エクスプラボ様のHP

最後に

いかがでしたでしょうか。
シーン遷移時のOnDestroy()処理でエラーとなる場合は、nullで条件比較して処理の中断を試してみて下さい。

スポンサーリンク

応用

Posted by daraha_gm