New Input SystemをPlayerInputを通さずに使う (v1.0.2)
このあたりインターフェイスが変わりまくっているようで、ググって出てきた情報が古かったので1.0.2時点での使い方を置いておきます。
公式のクイックスタートを読んでも、PlayerInputを通した使い方しか書いておらず、
いやいや、そんなMonoBehaviourにベッタリな感じで使いたくないんだが。という気持ちになった人のためのメモです。
設定
Input Action Asset作って、コード生成しておきます。
使い方
結論から書くと、これだけでオッケー。
var actions = new GeneratedInputAction();
actions.OutGame.SetCallbacks(new OutGameInputCallback());
actions.InGame.SetCallbacks(new InGameInputCallback());
actions.OutGame.Enable();
actions.InGame.Disable();
// actionsはDisposableなのでちゃんとDisposeしましょう。複数人プレイ(複数コントローラー)に対応するには?
InputSystem.onDeviceChange で新しいデバイスを受け取って、
actions = new NewInputAction
{
devices = new[] { ここに受け付けるデバイスを渡す }
};まあ現実的には
public void Start()
{
foreach (var device in InputSystem.devices)
{
OnConnectDevice(device);
}
InputSystem.onDeviceChange += InputSystemOnDeviceChange;
}
private void InputSystemOnDeviceChange(InputDevice device, InputDeviceChange change)
{
if (change == InputDeviceChange.Added)
{
OnConnectDevice(device);
}
}みたいになりそう。
メニュー画面を開いたらメニューのイベントだけ受け付けたい
これでActionMap毎にON/OFF出来る。
actions.Enableすると全部ONになるので気をつけて。
actions.OutGame.Enable();
actions.InGame.Disable();