このあたりインターフェイスが変わりまくっているようで、ググって出てきた情報が古かったので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();