LoginSignup
2
0

[UE5]Input Event ノードの注意点まとめ

Last updated at Posted at 2023-12-23

概要

この記事では、Unreal Engine 5 で、下図の Input Event ノードを利用するにあたっての、筆者が考える下の4つの注意点を紹介させていただきます。

a_inputeventnode.jpg

  1. デバッグ用の Input Event ノードを利用しているかどうか
  2. 「Consume Input」にチェックが入っていないか
  3. ゲームをポーズしているときに Input Event ノードを利用しようとしていないか
  4. 親クラスで同じ Input Event ノードを使用していないか

この記事の主な対象者

  • Blueprint(BP)の作り方の基礎を習得されている、初心者の方

前提知識

Input Event ノードって何?というような方もいらっしゃると思いますので、Input Event ノードがどのようなノードかお話ししたいと思います。

a_inputeventnode.jpg

Input Event ノードとは、キーボードやゲームパッドなどから入力を受け取ったときに、処理を実行してくれるノードです。上図ではキーボードの「Aキー」が押されたときに「Pressed」からつなげて書いた処理が実行され、「Aキー」が押されていない状態になったときに、「Released」からつなげて書いた処理が実行されます。

デバッグや、仮実装で処理を実装したいというときなどにとても便利です。

どの入力を Input Event ノードで受け取るかということの設定は、Input Event ノードの詳細パネルの「入力」>「Input Key」(下図の赤枠)から設定することができます。

inputkey_setting.jpg

豆知識ですが、イベントグラフに、Input Event ノードを追加する際は、ノードを追加する際の検索欄に「@」と入力するとすぐに見つかります。

inputeventnode_add.jpg

1. デバッグ用の Input Event ノードを利用しているかどうか

Input Event ノードには、デバッグ用(下図の赤枠)と非デバッグ用(下図の緑枠)があります。

デバッグ用の Input Event ノードは、Shippingのパッケージなどでは、処理が実行されないようになっています。

fordebugnode.jpg

そのため、デバッグや仮実装をする際は、上図の赤枠のデバッグ用の Input Event ノードを利用しておくと、Shippingのパッケージを作成した際などに、「デバッグ用の処理が残ってしまっていて、ゲームのプレイヤーに裏技みたいに扱われしまう」というようなことを回避できます。

なので、デバッグや仮実装では、上図の赤枠のデバッグ用の Input Event ノードを利用すると良いと筆者は考えます。

2. 「Consume Input」にチェックが入っていないか

Input Event ノードの詳細パネルを見ると、「イベント」>「Consume Input」(下図の赤枠)という項目があります。

consumeinput.jpg

上図の項目にチェックが入っていると、同一の入力を設定したほかの Input Event ノードが呼ばれなくなることがあります

「Consume Input」にチェックが入っていることにより、Input Event ノードが呼ばれなくなる具体的な条件としては 「入力の優先度(Input Priority)が高い、同一の入力のノードの「Consume Input」にチェックが入っている」 ということです。

入力の優先度については、Tonkotsu様が、こちらの記事でまとめてくださっていたので、こちらを参考にするとよいと思います。

Tonkotsu, 【UE4】入力イベントの順序、設定項目について, https://shuntaendo.hatenablog.com/entry/2019/06/12/200000, (参照 2023-12-23)


具体的に、どうなるかを見ていきます。

最初に、入力の優先度が高い、マップに配置したアクタのBPのイベントグラフに、下図のノードを組みます。下図の Input Event ノードの「Consume Input」にチェックを入れます。

consumeinputtest1.jpg

次に、入力の優先度が低いプレイヤーのPawnのイベントグラフに下図のノードを組みます。

consumeinputtest2.jpg

ゲームプレイし「Aキー」を押すと、下図のように表示されました。

consumeinputtest3.jpg

上図から分かるように、入力の優先度が低い、プレイヤーのPawnの Input Event ノードは実行されていませんでした。

筆者の考えではあるのですが、現状あまり「Consume Input」にチェックを入れることのメリットがわからないので、チェックを外しておいて良いと考えています。

3. ゲームをポーズしているときに Input Event ノードを利用しようとしていないか

Unreal Engine 5 には、ゲームのポーズ機能があり、下図の「Set Game Paused」ノードを利用することで、ゲームをポーズすることができます。

setgamepaused.jpg

ゲームをポーズしているときは、デフォルトの設定だと、アクタのTickや Input Action が実行されなくなり、Input Event ノードも実行されなくなります

ゲームをポーズしているときにも、Input Event ノードが実行されるようにしたい場合は、Input Event ノードの詳細パネルの「入力」>「Execute when Paused」(下図の赤枠)にチェックが入っていると、ゲームのポーズ中でも Input Event ノードが実行されるようになります。

executewhenpaused.jpg

なので、ゲームをポーズしているときにも Input Event ノードを呼び出そうと考えているときは、上図の項目にチェックを入れ忘れないようにしましょう。

4. 親クラスで同じ Input Event ノードを使用していないか

親クラスのBPで Input Event ノードを使用している際に、親クラスのイベントグラフで使用した Input Event ノードと同一の入力の Input Event ノードを使用すると、子クラスの Input Event ノードが2回実行されてしまうことがあります。

原因は、子クラスで使用している Input Event ノードの詳細パネルの「入力」>「Override Parent Binding」(下図の赤枠)にチェックが入っていないことです。

overrideparentbinding.jpg

具体的にどのようになるのかを見ていきます。

最初に、親クラスとするアクタのBPのイベントグラフに、下図のノードを組みます。

parent.jpg

次に、子クラスとするアクタのBPのイベントグラフに、下図のノードを組みます。Input Event ノードの詳細パネルの「入力」>「Override Parent Binding」のチェックは外しておきます。

child.jpg

最後に、子クラスのアクタをマップに配置します。

ゲームプレイし「Aキー」を押すと、下図のように表示されました。

testresult_overrideparentbinding2.jpg

子クラスの Input Event ノードが2回実行されています。

子クラスの Input Event ノードの詳細パネルの「入力」>「Override Parent Binding」にチェックを入れて、再度ゲームプレイをして「Aキー」を押すと、下図のように表示されました。

testresult_overrideparentbinding3.jpg

子クラスの Input Event ノードが1回だけ実行されています。

「なぜかイベントグラフに書いた Input Event ノードが2回実行される」という際は、親クラスのイベントグラフに同じ入力の Input Event ノードを置いていないか、子クラスの Input Event ノードの「入力」>「Override Parent Binding」にチェックを入れていないか、確認するようにしましょう。



以上で今回の記事の内容は終了です。
最後まで読んでいただき、ありがとうございました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0