アプリケーションの実行中、意図的にキーボードからの入力を一切受け付けなくする対応につきまして

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

件名に記載しております通り、​アプリケーションの実行中、キーボードからの入力を一切受け付けなくする対応につきまして、対応方針、対応内容に問題がないかをお伺いさせていただきたいです。

まず、​この対応の目的としましては、以下の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]

再現手順
1.レベルを再生し、Qキー、右矢印キー、コントローラーの左スティック操作、コントローラーの十字キー右をそれぞれ押し込んだ時、左上にデバッグログが表示される

2.コントローラーのメニューボタン(Xboxコントローラー基準です)を押す

3. (1.)で行ったキーボードでの入力の際はデバッグログが表示されず、コントローラーでの入力ではデバッグログが表示される

4.キーボードのEscapeキーを押す

5. (1.)で行ったキーボード、コントローラーでの入力両方でデバッグログが表示される

[Attachment Removed]

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

添付して頂いたプロジェクトを確認いたしましたが、キーボード入力を無効化するという目的に対して適切な対処をされていると思います。

他のプリプロセッサを先に追加した場合それは動作しますが、意図的にそのような実装を行わなければ通常は問題にならないかと思います。

類似の例としてマウス入力を無効化する方法についてのスレッドがありましたが、ここでも FSlateApplication::Get().RegisterInputPreProcessor を利用する方法が紹介されています。

[Content removed]

よろしくお願いいたします。

[Attachment Removed]

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

返信が遅くなり、大変申し訳ございません。ご回答いただき、誠にありがとうございます。

今回の対応方針が目的を達する上で適切であること、並びにプリプロセッサの処理順序に関する仕様につきまして、承知いたしました。

つきましては、プリプロセッサの処理順序に十分注意を払った上で、現在の対応方針で実装を進めてまいります。

また、過去の類似のご質問も丁寧にご提示いただき、ありがとうございます。実装の参考にさせていただきます。

お忙しい中、ご丁寧にご回答いただき、誠にありがとうございました。

[Attachment Removed]

ご確認ありがとうございます。

本件はクローズいたします。

また何かありましたらお問い合わせ下さい。

[Attachment Removed]