Unity InputSystemの導入(XBox,PS4コントローラで動作チェック)
はじめに
InputSystemを用いてXboxとPS4のコントローラ入力をしようと思います。
今回使用するInputSystemはPreview版です。
経緯
以前にXBoxコントローラからの入力を確認してRLトリガーの入力だけどうしていいのかわからず2年弱が経過していました。
そんな中最近ふと思いました。またプレビュー版だけどInputSystem使えばシンプルに取得できるんじゃないか..?
そんなわけで確認してみようと思いました。
環境
InputSystemにはUnity2019.1以上と。NET4ランタイムが必要とのことです。
インストール
InputSystemのインストール
PackageManagerからインストールします。
preview版なので注意してください。
InputBackendを有効にする
Edit > Project Settings > Player
先にApiCompatibillityLevelを確認し、".NET 4.x"に設定します。
ActiveInputHandlingを"Input System Paclage(New)"に設定します。
すると自動でUnityが再起動すると思います。
この設定を有効にするためには、UnityEditorを再起動する必要があるため、
自動で再起動が行われなかった場合には自身で再起動してください。
入力デバイスから直接入力を取得
まずは入力デバイスからの現在の入力状況を直接読み取りをしてみます。
using UnityEngine; using UnityEngine.InputSystem; public class CurrentInputTest : MonoBehaviour { void Update() { var gamepad = Gamepad.current; if (gamepad == null) return; // No gamepad connected. if (gamepad.rightTrigger.wasPressedThisFrame) { Debug.Log($"rightTrigger:{gamepad}"); } } }
PCに接続しているXboxコントローラとPS4コントローラのRトリガーを引いてみます。
どちらも認識できているようです。
しかもどのコントローラから入力があったのかも判別できているようですね。
下記URLを参考にほかの入力を取得することができました。 docs.unity3d.com
前回InputManagerでLRトリガーの同時押しがうまくいかなかったのですが、 InputSystemでは簡単に取得できそうです。
InputActionを介して間接的に入力を取得
PlayerInputコンポーネントの追加
AddComponentからPlayerInputコンポーネントを追加します
Actionsを作成する
CreateActions..を押すことで作成できます。
このActionsのRightTriggerを取得してみます。
InputActionからスクリプトで取得
using UnityEngine; using UnityEngine.InputSystem; [RequireComponent(typeof(PlayerInput))] public class InputActionTest : MonoBehaviour { private InputAction m_fire; private void Awake() { var actionMap = GetComponent<PlayerInput>().currentActionMap; m_fire = actionMap["Fire"]; } private void Update() { if (m_fire.triggered) { Debug.Log($"fire: {m_fire}"); } } }
今回はCreate Actionsを押してInputActionを作成しましたが、
Projectウィンドウからの右クリックから新規作成できます。
補足
Listenを使うことで、押したボタンが候補として出てくるので、 登録は簡単みたいです。