Pass Throughとはなんぞや、というのをすぐに忘れるので、ざっくり整理です。情報源は、以下の公式マニュアルです。
目次
ActionTypeとは
ActionTypeは、主に次の2つの動作を設定するものです。
- アクションの値の変更に対するstarted、performed、canceledの呼び出し方
- 同じアクションに複数のコントローラーの操作がバインドされていた時の、入力値の選択方法
それぞれ、以下のとおりです。
Pass Through
- 値が変更されたら、performedで通知
- Interactionを追加しなければ、値の変更に伴うstartedやcanceledは呼び出さない
- 同じアクションに、複数のコントローラーが割り当てられていた場合、すべてのコントローラーの変化を報告する。入力値によらず、最後に変化したコントローラーの入力が得られる
- ボタンタイプの入力を割り当てた場合、値が変化するたびにperformedが呼ばれるので、performed内でReadValueAsButton()を使うと、ボタンを押したか、離したかを判定できる
Value
- 入力値が、デフォルト値から変化すると、startedが呼び出される
- startedの呼び出し後、同じフレームですぐにperformedが呼び出される
- その後、デフォルト値になるまで、値の変化ごとにperformedが呼び出される
- 値がデフォルト値になると、canceledが呼び出される
- Initial state checkを有効にすると、操作が有効になった瞬間に、入力がデフォルト値かどうかを判定して、デフォルト値でなければ、startedとperformedを呼び出す
- シーンの切り替えなどの直後に、前のシーンの入力が残っていた場合に、その入力を有効にしたいならチェックする
- 1つのアクションに、複数のコントローラーの入力が割り当てられていると、そのうちの入力値が一番大きいもののみが通知される
Button
- 入力値が、規定の値以上になったら、startedが呼び出されて、同じフレームですぐにperformedも呼び出される
- 入力値が、規定の値未満になったら、canceledが呼び出される
- その他の機能は、Valueとほぼ同じ
- 1つのアクションに、複数のコントローラーの入力が割り当てられていると、そのうちの入力値が一番大きいものを通知する
- あるアクションにデジタル入力のコントローラーを複数バインドした場合、先に押された操作が離されない限り、他の入力が押されても無視される
まとめ
- Pass Through
- 最後に操作されたコントローラーの入力を取得したい場合
- startedやcanceledが不要な場合
- アクションゲームの操作など、素早いレスポンスや、最新の変化を反映したい場合に向いている
- マウスの座標などのデフォルト値に戻らない入力
- Value
- デフォルト値があるコントローラーの移動操作など向き
- started、canceledが使いたい場合
- デフォルト値からの違いが一番大きいコントローラーの入力のみを取得したい場合
- Button
- クリックやタッチ、ボタンなどを取得したい場合
- 先に押しっぱなしにした操作があったら、他の操作は無効にしたい場合
基本的には、Unityがデフォルトで生成するInputSystem_Actionsを参考にするのがよいです。

移動操作はVector。AttackやJumpはButton。UIのマウス座標などは、Pass Throughに設定されています。
移動操作は、接続しっぱなしのゲームコントローラーのアナログ入力が微妙に残る場合があります。そうすると、キー操作をしていて、キーを離しても、ゲームコントローラーの入力の影響で、微妙にキャラが移動することがあります。そのような場合は、Pass Throughの方が便利な場合があります。