【Unity】Prefabをスクリプトで追加しても保存されない件について

■環境

  • MacOS Monterey (12.1) Unity (2021.2.9f1)
  • 事象

    大量のプレハブをヒエラルキーに追加する際に効率化しようとエディタ専用スクリプトを作ってプレハブを配置するプログラムを作りました。

    配置することは正常にできたのですが、Unityを再起動してみたら、いない!ということが起きました。

    その原因と対策方法についての共有です。

    原因

    シーンが更新されたことになっていない?

    シーンの横に*がついてると更新されたよという合図なんですが、スクリプトからプレハブのインスタンスヒエラルキーに追加してもこのマークがつきませんでした。

    *がついていない状態でシーンをCommand + Sしても保存されておらず、

    その状態でUnityを終了し再起動するとシーンに追加したプレハブが消えてしまいます。

    つまり追加したけどシーン保存していないから追加する前の状態になってるというわけです。

    本来ヒエラルキーを変更した後でシーンを保存せずにUnity閉じようとすると↓のダイアログで出ますからね。。

    解決策

    解決策はシーンが更新されたことを通知してあげる処理を書いてあげれば良いということが分かりました。

    スクリプトでプレハブを生成した直後に以下の処理を呼び出しましょう。

    using UnityEditor.SceneManagement;
    
    〜
    
     EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
    

    これでヒエラルキーウィンドウに更新マークが付きました。

    これでUnityを終了しようとしたときに、変更があるので保存しますかの流れになるので保存すれば反映されてくれます。