【Unity】InputSystem使ってみた
導入するうえで検索しづらかった機能について。
コードで入力を受け付けたい : InputActionReference
実は自動生成クラスは不要で、インスペクタで参照設定すればできる。
[SerializeField] InputActionReference submit = default; void Start() { submit.ToInputAction().Enable(); } void Update() { if (submit.ToInputAction().triggered) { hogehoge } // 追記:ToInputAction()はactionプロパティでもいい if (submit.action.triggered) { fugafuga } }
ランタイムで挙動を切り替えたい : MaskByGroup
InputBiding.MaskByGroup
を使うことで、ControlScheme
ごとに有効/無効を設定することができる。(有効にするgroupを指定する)
渡す文字列はControl Scheme
のbindingGroup
に対応している。これはおそらくname
と等しい。inputactionsファイルを開くとjsonになっているので確認できる。
[SerializeField] InputActionAsset inputActionAsset = default; public void EnableKeyboard() { inputActionAsset.bindingMask = InputBinding.MaskByGroup("Keyboard"); } public void EnableGamepad() { inputActionAsset.bindingMask = InputBinding.MaskByGroup("Gamepad"); }
PS4コントローラを振動させたい
UnityEngine.InputSystem.Gamepad.current.SetMotorSpeeds(0.5f, 1f);