さけのさかなのブログ

同人ゲーム開発やってます。Unity使ったりする。

【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 SchemebindingGroupに対応している。これはおそらく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);

参考

gamedev65535.com

inoookov.hatenablog.com