［UE5］Input Event ノードの注意点まとめ

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

![a_inputeventnode.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/4ea30671-4d94-69db-2437-e4b5b95833ac.jpeg)


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



# この記事の主な対象者
- Blueprint（BP）の作り方の基礎を習得されている、初心者の方


# 前提知識

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

![a_inputeventnode.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/3b8dd87c-6c13-4b57-642d-f1802d4d075a.jpeg)

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

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

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

![inputkey_setting.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/eeafb917-ec6e-f806-d839-0f08b54ef64c.jpeg)<br><br>


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

![inputeventnode_add.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/93692fd9-375b-b54c-af6d-018bc38fd0e5.jpeg)


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

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

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

![fordebugnode.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/b907e504-d1d7-460d-c426-f2245296d288.jpeg)

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

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


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

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

![consumeinput.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/9c5fcc52-b2e7-238f-65d8-37f1f0fd9478.jpeg)

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

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

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

https://shuntaendo.hatenablog.com/entry/2019/06/12/200000

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


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

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

![consumeinputtest1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/3dc581e2-9a30-8f45-5327-70c5ada1676d.jpeg)


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

![consumeinputtest2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/debf6514-0e5c-1f91-27c9-14f43707fdbe.jpeg)

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

![consumeinputtest3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/3d6645b9-e2d9-9ddb-bdc4-0041cd5c0a2c.jpeg)

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


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


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

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

![setgamepaused.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/213f92da-49a6-2030-3571-70d66702f5ec.jpeg)<br><br>


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


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

![executewhenpaused.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/a4b04280-afae-a68c-28d7-aeb63c528df3.jpeg)<br><br>

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

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

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

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

![overrideparentbinding.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/4df379b3-1017-e895-339d-d6e2a2421323.jpeg)<br><br>


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

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

![parent.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/6f9c03e3-bb18-bcdb-91c3-298bea2497d7.jpeg)

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

![child.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/dde9b590-2fb0-84ee-84be-883f2539bc16.jpeg)

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


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

![testresult_overrideparentbinding2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/9840e7b6-233e-d47c-9c58-936c9bb659b5.jpeg)


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


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

![testresult_overrideparentbinding3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/9bfe1531-60cb-1386-f558-daecc8dfe578.jpeg)

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


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



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