SlateDebugger.Invalidateによる無効化の可視化はIsVolatileがチェックされたWidgetにも表示される仕様なのでしょうか?

お世話になっております。

SlateDebugger.Invalidateのコンソールコマンドを用いることでこちらのドキュメントにある無効化タイプが指すウィジェットの変更がタイプごとの色で可視化されるデバッグ機能があることを先日知り、現在Global Invalidationでのウィジェットの最適化検証をしております。

確認ですが、SlateDebugger.Invalidateで可視化されたウィジェットは変更によるキャッシュ処理が実装されたという認識で問題ないでしょうか?

IsVolatileのチェックを付けたウィジェット(とその子ウィジェット)はキャッシュされない認識ですが、IsVolatileのチェックをつけてもSlateDebugger.Invalidateによる可視化が表示されております。

SlateDebugger.Invalidateによる可視化はIsVolatileのチェックに関係なく無効化タイプの変更によって表示されるのは仕様なのでしょうか?

また特定のウィジェットのみをSlateDebugger.Invalidateで可視化されない機能などをご存知でしたらご教授をお願いします。

お世話になっております。

UE5.0以降では、Invalidation Boxを配置せず自動的にウィジェット全体にInvalidationの効果が適用される"Global Invalidation"の機能が有効になっております。そのためWidgetの全体に常時Invalidationが適用されているような状況となっております。SlateDebugger.Invalidate で表示する内容についても同様に、デフォルトではInvalidaitonが適用されており、描画内容が更新されたりレンダートランスフォームが変更された箇所は変更箇所がマークされるような動作となります。どのウィジェットが何によってInvalidationが無効化されたかの凡例については、"SlateDebugger.Invalidate.bShowLegend 1"のコンソールコマンドでご確認頂けます。

IsVolatileのチェックについては凡例でグレー表示となりますが、常時点灯されるというわけではなく変化時に色が変わり3秒で消灯します。Blueprintで3秒毎にイベントが呼び出されるタイマーによってVolatileを切り替えて頂くと、グレーでウィジェットが更新される箇所が分かりやすく表示されるのが確認できるかと思います。

「特定のウィジェットのみをSlateDebugger.Invalidateで可視化されない機能」については残念ながら今のところ用意されておりませんので、マスクしたいウィジェットのVisiblityをHidden にしたり、ウィジェット単位でキャッシュテストできるようなテストウィジェットを作成頂くような方法でご利用頂くことになるかと思います。

承知しました。

IsVolatileが有効であってもキャッシュされるような更新があればSlateDebugger.Invalidateのデバッグ描画がされるものとして理解しました。

ご回答ありがとうございました。

早速ご確認頂きありがとうございます。

改めてご質問の内容を正確に理解し、情報に誤りがあったことが発覚しまして以下の通り回答いたします。申し訳ございません。

> Global Invalidationが自動的に有効になっていることを確認したいのですが、手動で有効化したGlobal Invalidationとは別のGlobal Invalidationが使われてるということでしょうか?

以前はエディタでGlobalInvalidationはデフォルト有効になっていたのですが、ご利用頂いている5.5での情報を改めて確認しますとデフォルトは無効となっておりました。失礼いたしました。コンソールコマンド “Slate.EnableGlobalInvalidation” を入力して頂くと現在の設定が確認できますが、この設定は一貫してこのコマンドの設定値を参照します。この設定は自動で有効になることはなく、手動で有効にするか.iniファイルに設定を追加して頂く必要があります。

> こちらに関しては存じております。IsVolatileのチェックを付けたウィジェットでもPaintやLayoutなどのデバッグ表示がされているのですがこちらはVolatile関係なく表示されるものでしょうか?

SlateDebugger.Invalidate のデバッグ描画はInvalidationのキャッシュが有効なウィジェットに対して適用されるものとなりますので、GlobalInvalidationが有効か、GlobalInvalidationを無効にしていても親ウィジェットなどでInvalidation Boxを配置して有効にしていた場合は子ウィジェットはデバッグ描画の対象になる可能性があります。IsVolatileのチェックが有効であっても描画の更新やLayoutの表示更新が発生している場合は、現在は更新の表示が優先される動作となります。

ご回答ありがとうございます。

>UE5.0以降では、Invalidation Boxを配置せず自動的にウィジェット全体にInvalidationの効果が適用される"Global Invalidation"の機能が有効になっております。

Global Invalidationが自動的に有効になっている件については存じませんでしたが、試しに手動で有効化せずにSlateDebugger.InvalidationRootで確認したところ画面全体へのデバッグ表示(緑色)されてませんでした。

逆にFSlateApplicationBase::ToggleGlobalInvalidation()かコンソールコマンドでGlobal Invalidationを手動で有効化した状態だと画面全体にデバッグ表示されております。

SlateDebugger.InvalidateにおいてもGlobal Invalidation(またはInvalidationBox)が有効でないとデバッグ表示が確認できないようになっております。

Global Invalidationが自動的に有効になっていることを確認したいのですが、手動で有効化したGlobal Invalidationとは別のGlobal Invalidationが使われてるということでしょうか?

>IsVolatileのチェックについては凡例でグレー表示となりますが、常時点灯されるというわけではなく変化時に色が変わり3秒で消灯します。

こちらに関しては存じております。IsVolatileのチェックを付けたウィジェットでもPaintやLayoutなどのデバッグ表示がされているのですがこちらはVolatile関係なく表示されるものでしょうか?

IsVolatileを付けたウィジェットが実際にキャッシュ無効となっているのか確認がとれなかったのでこのような質問をしました。

再三質問を続けるような形になってしまい申し訳ありませんでした。

>「特定のウィジェットのみをSlateDebugger.Invalidateで可視化されない機能」については残念ながら今のところ用意されておりませんので、マスクしたいウィジェットのVisiblityをHidden にしたり、ウィジェット単位でキャッシュテストできるようなテストウィジェットを作成頂くような方法でご利用頂くことになるかと思います。

こちらに関しては承知しました。