【Unity】特定のシーンなど、保存させるアセットを限定する
Unity で作業をしているとき、基本的には Ctrl+S で作業内容を保存するかと思います。
これは編集中のアセットから今開いているシーンまですべて保存します。
これだと困ることがたまにあって、例えば特定の ScriptableObject を編集していて保存したとき、知らないうちに編集していたシーンまで保存されてしまったりなんてことがあるかと思います。
この問題は、AssetModificationProcessor.OnWillSaveAssets() を使うことで解決できます。
私が開発している中でやりたかったこととして、「特定の作業をしている間、関連しているシーンの変更は保存させたくない」
というものがありました。
特定のシーンを保存させない処理はこちら
SaveSceneAssetBlocker.SetDontSaveScene()、ResetDontSaveScene() を任意のタイミングで呼べば、その間だけ設定したシーンが保存されなくなります。
パッと見だと不具合のように感じるので、ダイアログを出してあげたりするのが親切かもしれません。
注意点
AssetModificationProcessor.OnWillSaveAssets() はアセットのパス名でしか判定できないため、シーン名と同じ名前のアセットがほかにあったら、それも保存されなくなるのでご注意ください。
もし同名の別アセットがある場合、AssetDataBase.LoadAssetAtPath() で一度ロードして、型で分岐する処理をするのが良いと思います。
蛇足
AssetModificationProcessor を使えば、ほかにも「特定のアセットを削除させない」などもできるみたいです。
docs.unity3d.com
また、併せてシーンの変更を破棄したい場合はこちら
7081.hatenablog.com