SetInputModeUIOnlyで移動し続ける問題

解決できてよかったです!疑問点をわかる範囲でお答えいたします。


先に来ている「Enable Input」のGetPlayerControllerも、最後の「Disenable Input」の
GetPlayerControllerも同じコントローラ(デフォルトで言うところのPlayerController)ではない?

両方ともGetPlayerControllerのPlayerIndexに0を指定しているので、同じものが取れています。


「Enable Input」のターゲットがSelfになっていると、そのBPのActorに主導権が移るということでしょうか?

その場合、現在の主導権を確認する方法はあるのでしょうか?

正確に言えば、そのActorクラスにキーボードの「Q」やゲームパッドの「Aボタン」のようなInputイベントが取得できるようにするために「Enable Input」を使用します。

Enable Inputの日本語訳コメントを読んだところ、「入力処理のスタックにこのアクターをプッシュする」と書かれているので、後に入れた順でインプットイベント処理を流すようになっています。

この場合、EnableInputで後に入れたActorクラスがまずInputイベントを処理後、ゲーム起動時にエンジン側でプッシュされたファーストパーソンのキャラクタークラスにInputイベントが渡されます。

この場合、先にインプットイベントを処理するActorクラスで「Block Input」が有効になっているため、先にエンジン側でプッシュされたファーストパーソンのキャラクタークラスにInputイベントが渡らない、という実装になっています。

おそらくですが、Enable Inputによって最初にインプットイベントをActorが受け取れるようになっているため、「主導権を持つ」という書き方になっていると思われます。

軽く調べたところ、インプットイベントを受け取れるアクター一覧を取得するクラスが見当たらないため、Blueprintでは取れない、かもしれません。(もしかしたら見落としているかもしれないので、該当のクラスがあれば別途記載します。)

以下、Enable Inputのドキュメントになります。

https://api.unrealengine.com/JPN/Gameplay/HowTo/ActorInput/Blueprints/index.html


Possessとは違うのでしょうか…。

完全に別物です。

Possessは、簡単に説明すると「Pawnクラス、Characterクラスの入力制御を別のPawn,Characterクラスに移すクラス」です。

Enable Inputは、そのActoerで「Inputイベントを受け取れる」ようにするクラスになります。

以下、ドキュメントになります。

https://api.unrealengine.com/JPN/Gameplay/HowTo/PossessPawns/Blueprints/index.html