はじめに
こんにちはsuzukiです。今回は前回の記事で設定したしゃがむ動作をInputSystemを利用して設定してみたいと思います。
InputSystemは比較的新しい様々な機器の入力を柔軟に管理するためのシステムです。
InputSystemの概要
アクションごとに異なる機器のキーバインドを設定することができ、コードで書くと煩雑になってしまう処理をまとめることができます。
・キーボード
・GamePad
また機器の種類などが豊富なため柔軟なキー設定が可能です。
今回のStarterAssetを例にすると、下記の四つのアクションが設定されています。
・Move
・Look
・Jump
・Sprint
それぞれキーボードの入力の場合のキー設定とGamePadによる動作が設定されています。
Moveの場合は下記が設定されています。
キーボードのWASD
GamePadの左スティック
StarterAssetでのアクションの追加
前回設定した下記のコードだと、キーボードのCの入力がされていることは判定できます。
m_Crouching = Input.GetKey(KeyCode.C);
もしGamePadの入力も取得するようにコードを変更しようとしたら、if文やSwitch文を利用して、有効な入力機器を取得し、その入力機器のキーの入力を設定する必要があります。
しかしながら、InputSystemを利用すると、アクションに対するキーを設定側で行えるため
InputSystemで設定したアクションをもとに処理できるため、シンプルに動作を設定していくことができます。
それでは実際にInput.GetKey(KeyCode.C)ではなくするためStarterAssetを変更していきましょう。
InputActionの変更
InputActionでキーボードのCを押された際にonCrouchの処理が呼び出される準備をします。
PlayerArmatureのインスペクタの一番下にPlayerInputというコンポーネントがあります。
Actionsに設定されているStarterAsset(Input Action)をダブルクリックしてください。
InputAction Windowが開かれるので下記を設定します
・Actionsの右にある+ボタンをタップするとNewActionという項目が追加されるので、名前をCrouchに変更
・Action PropertiesのAction TypeをボタンからPass Throughに変更 Control TypeをAnyに変更
・ActionsのCrouch配下のNo Bindingを選択しPathにC[Keyboard]を設定 Use in control schemeでKeyboardMouseを選択
・ActionsのCrouchの右側の+をタップしAddBindingを選択
・ActionsのCrouch配下のNo Bindingを選択しPathにRight Trigger[GamePad]を設定 Use in control schemeでGamePadを選択
StarterAssetsInputs.csの変更
InputActionで設定したCrouchのアクションを受け取り、他クラスから参照可能なcrouchの定義
StarterAssetsInputsというファイルでInputActionで設定した、アクションが呼ばれた際の動作が設定されています。
元からあるコードを参考にCrouch用のコードを3点追加しましょう。
他のクラスから参照するためのcrouchの定義
1 2 3 4 | public bool jump; public bool sprint; //追加 public bool crouch; |
Crouchアクションが実行された際によばれるOnCrouchをENABLE_INPUT_SYSTEMのマクロの中で実装
1 2 3 4 5 6 7 8 | #if ENABLE_INPUT_SYSTEM //中略 public void OnCrouch(InputValue value) { CrouchInput(value.isPressed); } #endif |
crouchに値を設定するCrouchInputの実装
1 2 3 4 | public void CrouchInput(bool newCrouchState) { crouch = newCrouchState; } |
ThirdPersonControllerの変更
最後に今まで直接Input.GetKey(KeyCode.C)で取得していたコードを修正します。
ThirdPersonControllerでは_inputという値でStarterAssetsInputsクラスにアクセスが元からされています。
Startのタイミング_inputを初期化しているので特に何もせず単純に
Input.GetKey(KeyCode.C)を_input.crouchに切り替えれば修正完了です。
さいごに
前回の記事では特に意識せず、簡易な方法で実装してしまっていたため、InputSystemの使い方の基本を学びながら変更してみました。
unityの良さである様々なプラットフォームに対して、アプリを提供することを考えると、入力の設定管理がしやすいのはとてもいいことだと感じました。