【Unity】OnPostProcessAllAssetsを使う時に特定の方法で無限ループする

 

OnPostProcessAllAssetsについて

docs.unity3d.com

 

このクラスを継承したEditorクラスは、OnPostProcessAllAssetsメソッドを定義することでアセットインポート時に処理をフックすることができる。

 

ScriptableObjectやなんやに自動登録したり、asset判別して何かする時によく使う。

 

無限ループする原因

 

  1. OnPostProcessAllAssetsを定義したクラスが2つ以上ある
  2. そのどちらも、処理の中でAssetDataBase.StartAssetEditing()とAssetDataBase.StopAssetEditing()を呼んでいる。
  3. どちらもAssetDataBase.Refresh()を呼んでいる。

 

以上です。

 

docs.unity3d.com

 

 

アセットインポート時に、さらにアセットをインポートする処理を書いてしまうとOnPostProcessAllAssetsをお互いに呼び合ってしまうので無限ループするっぽいです。

 

 

回避方法

 

  1. OnPostProcessAllAssetsは引数に変更されたアセットのパスが入っているので、パスを使用し処理を行うべきか否かを判別する
  2. OnPostProcessAllAssetsを受け取るルートクラスを作成し、個別に受け取らない

 

 

最後に

 

回避はこれで可能、原因も多分あってる。

ただどうにも釈然としないので、何かピンと来た方Twitterまでぜひご連絡ください。