7080 + 1

ゲームプログラミングの記事を書いてます。

【Unity】シーンの変更の破棄をスクリプトから実行する

Unity で変更のあったシーンファイルは、シーン名の横にアスタリスクがついて、変更があることを教えてくれます。

この時、右クリックで出るメニューの「Discard Changes」を実行することで、保存されていない変更をすべて破棄することができます。

スクリプトからこれを実行したいのですが、残念ながら public に公開されたメソッドとして用意されているものがありません。(見つからなかった)
が、 Unity がメニューから操作できるようになっているなら、それ用のスクリプトがあるはずだと思って探しました。
EditorSceneManager.ReloadScene() というメソッドを発見したので、リフレクションを使って無理やり実行します。

ソースコードとしては以下です。

DiscardChangeSceneAsset.DiscardChange() を呼べば、引数のシーンの変更が破棄されます。
一応 PlayMode 中は処理しないようにしています。

また、メニューから実行できる DiscardChanges は確認ダイアログなどを出したりしていますが、これは問答無用で破棄するので注意してください。
具体的な処理は以下辺りを参照ください。
github.com