バッテラのハローワールド研究室

エンジニア、プログラミングに関する情報を掲載中!

【Unity】スクリプトでプレハブをヒエラルキーに追加しても保存されない件について

Unity

はじめに

本日はUnityのプレハブ周りで起きた問題についてです。

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

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

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

環境

この記事の情報は次のバージョンで動作確認しています。

* MacOS Monterey (12.1)
* Unity (2021.2.9f1)

原因

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

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

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

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

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

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

解決策

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

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

using UnityEditor.SceneManagement;

〜

 EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());

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

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



### おわりに

Undo処理もなんか影響してるのかしら、まだまだ分かっていないことが多いUnityです。

それでは、また。

読者登録・Twitterのフォローをしていただけると、ハッピーになります。