7080 + 1

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

【Unity】特定のシーンなど、保存させるアセットを限定する

Unity で作業をしているとき、基本的には Ctrl+S で作業内容を保存するかと思います。
これは編集中のアセットから今開いているシーンまですべて保存します。
これだと困ることがたまにあって、例えば特定の ScriptableObject を編集していて保存したとき、知らないうちに編集していたシーンまで保存されてしまったりなんてことがあるかと思います。

この問題は、AssetModificationProcessor.OnWillSaveAssets() を使うことで解決できます。

私が開発している中でやりたかったこととして、「特定の作業をしている間、関連しているシーンの変更は保存させたくない」
というものがありました。

特定のシーンを保存させない処理はこちら

SaveSceneAssetBlocker.SetDontSaveScene()、ResetDontSaveScene() を任意のタイミングで呼べば、その間だけ設定したシーンが保存されなくなります。
パッと見だと不具合のように感じるので、ダイアログを出してあげたりするのが親切かもしれません。

注意点

AssetModificationProcessor.OnWillSaveAssets() はアセットのパス名でしか判定できないため、シーン名と同じ名前のアセットがほかにあったら、それも保存されなくなるのでご注意ください。
もし同名の別アセットがある場合、AssetDataBase.LoadAssetAtPath() で一度ロードして、型で分岐する処理をするのが良いと思います。

蛇足

AssetModificationProcessor を使えば、ほかにも「特定のアセットを削除させない」などもできるみたいです。
docs.unity3d.com

また、併せてシーンの変更を破棄したい場合はこちら
7081.hatenablog.com