Editor UtilityWidget内のSpinboxを操作時にビューポートのリアルタイムレンダリングが停止する現象

EditorUtilityWidget内に配置している複数のSpinBoxを通してレベル上に存在しているACameraRig_CraneのPitch等を変更しているのですが、特定のSpinBoxのスライダー機能を使用している最中はビューポートのリアルタイムレンダリングが止まってしまいます。

こちらの全てのSpinBoxで起こっているわけでは無く、EUWを開き直すたびにこの現象が起こるSpinBoxが毎回変わります。

コンソールコマンドからSlate.bAllowThrottlingを0にするとこの現象が解消されるのは確認出来ているのですが、この現象が起こる原因とSlate.bAllowThrottlingを変更する以外に解決方法があるかをお伺いしたいです。

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

​返信が遅くなり申し訳ございません。

こちらの挙動ですが、社内で調査をかけたところ、「SpinBox操作時にリアルタイムレンダリングの停止が発生する」ほうが意図された動作であり、「停止動作を起こさないSpinBoxが存在する」ほうが不具合となります。

ご相談としては、リアルタイムレンダリングが停止すると困る、ということかと思いますので、こちらの解決に的を絞って話を進めさせていただきます。​

エディタ側が意図する動作は、ユーザー入力のあるあいだはエディタビューポートの更新を止め、ユーザー入力が終わったときにビューポートの更新を再開する、というものです。そのため、Editor Utility Widgetからビューポート内のオブジェクトを直接操作し、即時のビジュアル繁栄を必要とする場面ではスクリプト内からビューポートの更新を促す追加の操作が必要となります。

ただし、​そのための具体的な機能はスクリプトに解放されておらず、今のところ「Slate.bAllowThrottlingを0にする」がスクリプトから利用可能な唯一の対応手段となります。弊社内のツールでも、この手のものは、Slate.bAllowThrottlingを0にセットすることで運用されております。

(常時 0 にセットするほかに、UIを操作し始めたときに 0 に設定して、操作が終わったら 1 に戻す、というスクリプトを組む方法もあります)​

エディタビューポートの更新を促す方法としては、ほかに、エディタビューポートの状態を外部からInvalidateにする、という手段もありますが、C++を用いたややディープな方法であり、スクリプトに標準解放されておりません。

もし特に懸念事項などなければ、​Slate.bAllowThrottling 0 での対応をお願いできればと思います。

​以上、よろしくお願いいたします。

お世話になっております

ご連絡ありがとうございます!

上記について、社内の先行例とお使いのSpinboxの例が異なるため、実装実験をとってからご返信申し上げようとしたところ、作業時間を確保できないまま、返信が滞ってしまった次第です。大変恐縮ですが、こちら確実な回答ができるまで今しばらくお時間を頂戴できますと幸いです。お忙しいところ大変申し訳ございませんが、引き続きよろしくお願いいたします。

ありがとうございます!

こちら解決したため、クローズにして頂けると幸いです。

ご対応いただき、ありがとうございました。​

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

追加でいくつか質問をさせて頂けると幸いです。

・UIを操作し始めたときに 0 に設定して、操作が終わったら 1 に戻す方法を詳しく知りたいです。

・現在基本的にC++で開発をしているのでC++を使ってエディタービューポートの更新も合わせてお伺いしたいです。

お手数をおかけしますが、ご教授頂けると幸いです

[mention removed]

お世話になっております

山本です。

上記の質問関してステータスいかがでしょうか?

お忙しいところ恐れ入りますが、よろしくお願いします

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

追加の質問について対応が遅れまして誠に申し訳ございません。

・UIを操作し始めたときに 0 に設定して、操作が終わったら 1 に戻す方法を詳しく知りたいです。

上記について、社内の先行例とお使いのSpinboxの例が異なるため、実装実験をとってからご返信申し上げようとしたところ、作業時間を確保できないまま、返信が滞ってしまった次第です。大変恐縮ですが、こちら確実な回答ができるまで今しばらくお時間を頂戴できますと幸いです。

・現在基本的にC++で開発をしているのでC++を使ってエディタービューポートの更新も合わせてお伺いしたいです。

C++では、GEditor->GetLevelViewportClients()で取得できるFLevelEditorViewportClient*のInvalidate()を呼び出すことで、更新を促すことが可能です。

SWorldPartitionEditorGrid2D::MoveCameraHere()で同じようなことを行っているため、ご参照ください。

以上、取り急ぎご返信申し上げます。

引き続き、頂戴した質問の確認を行ってまいります。

大変お待たせいたしました。

下図のように On Begin Slider Movement イベントでSlate.bAllowThrottling 0をコンソールコマンドを実行し、 On End Slider MovementでSlate.bAllowThrottling 1を実行すれば、ご要望の動作を実現できるかと存じます。

[Image Removed]

一度お試しいただけますと幸いです。

以上、よろしくお願いいたします。

ご確認ありがとうございました!

解決したと聞き、安心いたしました。それでは本件は解決済みとしてCloseさせていただきます。

このたびは、完全回答までお時間を要してしまい、大変ご迷惑をおかけしました。

また、ご不明点やトラブルなど生じましたら、お気軽にEPSをご利用ください。

引き続き、よろしくお願いいたします。