bdunderscore / ndmf

MIT License
65 stars 21 forks source link

abort build #87

Closed Narazaka closed 8 months ago

Narazaka commented 9 months ago

現状ビルドを中断する手段が無いように思います。(IPreprocessBuildWithReport、IVRCSDKPreprocessAvatarCallback、ndmf Runでのreturn falseやBuildFailedExceptionのthrowをしてみたが効果がありませんでした)

個人的な需要としては1シーンに大量のアバターがactiveになっている場合にビルドが長時間かかることを回避するためにビルドを中断したいです。

kaikoga commented 9 months ago

Issue 本文とは異なるユースケースですが、複数のPassから構成されるNDMFプラグインを開発する際、途中のPassまで実行された時点でのヒエラルキーの状態をUnityのインスペクタから確認したいことがあります。

ビルドを中断する専用の例外を定義して、途中のPassでビルドプロセスを中断できるようにすることで、NDMFプラグインの開発がしやすくなると思います。

bdunderscore commented 9 months ago

NDMFのパスから例外を投げて止まらなかったらバグですね。 それとは別に、シングルステップみたいな機能があったほうが確かに便利ですね。

kaikoga commented 9 months ago

https://github.com/bdunderscore/ndmf/blob/c8853a19828db7f68abdaead7295d855a78213ef/Editor/API/BuildContext.cs#L278

ここで catch して Plugin<T>.OnUnhandledException() 経由で Debug.LogException() してるけど、 rethrow してないので止まらずに次のパスが実行されるっぽいです。

Plugin<T>.OnUnhandledException() が呼ばれるような状況で例外をキャッチして後続のPassを実行する意味は薄そうなので、単に BuildContext.RunPass() で rethrow すれば良さそうに思いました。

bdunderscore commented 9 months ago

1.3.0-alpha.0で治っています。