以前も紹介しましたが、GitHub に上げたので改めて紹介します。
(あれから、こまごまとした Bug Fix や拡張を行っています)
Input System のいいとこ、面倒なとこ
unity に新しく追加された Input System のいい所は、設定なしにパッド対応してるとこでしょうか。
旧 Input で、例えば XBOX、PS4、Switch のパッドに対応しようとしたら色々と面倒になってきて、結局 Rewired Input(Asset) を購入したりしてました。
面倒なとこは、記述が長ったらしくなるとこ。
特に初見でキーボード操作だけで済ませたい場合など、とっつきにくいと思います。
if (Input.GetKeyDown(KeyCode.LeftArrow) == true) { } ↓ if (Keyboard.current != null) { if (Keyboard.current[Key.LeftArrow].wasPressedThisFrame == true) {} }
キーイベントについては使いやすいかどうかより、ゲームの画面遷移時など不用意にキーイベント発生して予想外の問題を起こしやすくなったりなるので、使うのが恐怖です。
(適切な運用ルールを仕込めば、問題が解決しなくはないと思いますが…)
Input.GetKeyDown(KeyCode.LeftArrow) の方が頭を使わず済むので、好き
Padd(PadInput) は Input(旧) のような使用感で Input System をラッピングする
以下のように使うことができます。
if (Input.GetKeyDown(KeyCode.LeftArrow) == true) {} ↓ if (Padd.NativeKeyDown(Key.LeftArrow) == true) {}
タッチ、マウス、パッド、キーボード全部使えるように
Padd という名前でなんとなく想像できるかもしれませんが、本システムは「キーボードだけでなく、タッチ・マウス・パッドも似たようなコードで状態を取得できる」事を目指しています。
そのため、GetKeyDown はキーコードではなく、ePad.LeftArrow(十字キー左)のようなパッドコードを渡します。
キーコードで使いたい場合は NativeKeyDown を使用します。
十字キー左は、キーボードではどのキーが対応か? については、PadConfig.VecL にキーコードを設定すると、自動的に十字キー左にパッドコード変換されます。
PadConfig はクラスの外で書き換え可能なので、例えばゲーム内にキーコンフィグをつけたりすることもできます。
var padConfig = new PadInput.PadConfig(); padConfig.VecL = new Key[] { Key.LeftArrow, Key.A }; Padd.SetConfig(padConfig); if (Padd.GetKeyDown(ePad.LeftArrow) == true) { // パッドの十字キー左を押すか、キーボードの←、A を押すとここを通過 }
キーリピートにも対応
Windows で言うとこれ。キーを押すとタン…タタタタタタといった人間の使いやすいリズムで入力が発生しますが、Padd.GetKey() の代わりに Padd.GetKeyDelay() を呼ぶことで対応することができます。
PadConfig.FirstDelay、PadConfig.SecondDelay の値でリズムを変更する事もできます。
(大抵の場合、デフォルトのままでいいと思います)
マウスやタッチのスワイプにも対応
Padd.GetMouse().TouchMove を取得することで、X Y それぞれのスワイプ値を取ることができます。
以前紹介した時は、この機能はありませんでした。
使い方
GitHub の環境をダウンロードし、SampleScene.unity を実行、画面に表示される値が入力値です。
前準備 (InputSystem の初期設定)
- PackageManager の Input System を入れる
Project Settings > Player Settings > Other Settings > Active Input Handling
を Input System Package(New) に
Project Settings > Input System Package
で新規作成、Supported Devices に必要なデバイスを入れる
Padd の初期設定
- Padd.cs、PadInput.cs を Assets/ 以下の適当な場所に入れる
- Padd.cs を適当な GameObject にアタッチする
その他、細かい内容については以前の記事を参考にしてください。
(ちょっと内容が古くなっているものもありますが…)