お世話になっております。
件名に記載しております通り、アプリケーションの実行中、キーボードからの入力を一切受け付けなくする対応につきまして、対応方針、対応内容に問題がないかをお伺いさせていただきたいです。
まず、この対応の目的としましては、以下の5点になります。
1.(テキストフィールドへの入力など)キーボード入力によって実行される処理を無効化する
2.キーボード入力によって実行されるIMCを無効化する
3.キーボード入力によるウィジェット全般のナビゲーションを無効化する
4."@"キー(QWERTY配列)によってコンソールコマンドを開閉する機能を無効化する
5.そのほか、独自で実装されている(今後新規で実装される可能性のある内容含め)キーボード入力によって実行されるデバッグ機能を無効化する
対応すべき箇所が多いことや、(5)で記載している将来的に実装される可能性のある内容への対策も兼ね、キーボードの入力を通知している根本から無効化する方針で実装を行うことになりました。
具体的な対応内容としては以下になります。
・IInputProcessorクラスを継承した新規クラスを作成し、overrideしたHandleKeyDownEvent、HandleKeyUpEvent、HandleAnalogInputEventでコントローラーでない入力であれば即時trueを返す実装を行う
・上記クラスをのインスタンスをFSlateApplication::RegisterInputPreProcessorを通じて追加する
overrideした関数内で、コントローラーでない入力であれば即時trueを返す実装につきましては以下のような内容になります。
bool FKeyboardInputBlockerProcessor::HandleKeyDownEvent(FSlateApplication& SlateApp, const FKeyEvent& InKeyEvent)
{
...
if (bBlockAllKeyboardInput && !InKeyEvent.GetKey().IsGamepadKey()) // bBlockAllKeyboardInputは、新規クラス独自のものです。
{
return true;
}
return IInputProcessor::HandleKeyDownEvent(SlateApp, InKeyEvent);
}
対応の確認に用いたサンプルプロジェクトを添付いたしますので、合わせてご確認いただけますと幸いです。
以上となります。
ご確認のほどよろしくお願いいたします。
[Attachment Removed]