【Unity】OnPostProcessAllAssetsを使う時に特定の方法で無限ループする
OnPostProcessAllAssetsについて
このクラスを継承したEditorクラスは、OnPostProcessAllAssetsメソッドを定義することでアセットインポート時に処理をフックすることができる。
ScriptableObjectやなんやに自動登録したり、asset判別して何かする時によく使う。
無限ループする原因
- OnPostProcessAllAssetsを定義したクラスが2つ以上ある
- そのどちらも、処理の中でAssetDataBase.StartAssetEditing()とAssetDataBase.StopAssetEditing()を呼んでいる。
- どちらもAssetDataBase.Refresh()を呼んでいる。
以上です。
アセットインポート時に、さらにアセットをインポートする処理を書いてしまうとOnPostProcessAllAssetsをお互いに呼び合ってしまうので無限ループするっぽいです。
回避方法
- OnPostProcessAllAssetsは引数に変更されたアセットのパスが入っているので、パスを使用し処理を行うべきか否かを判別する
- OnPostProcessAllAssetsを受け取るルートクラスを作成し、個別に受け取らない
最後に
回避はこれで可能、原因も多分あってる。
ただどうにも釈然としないので、何かピンと来た方Twitterまでぜひご連絡ください。