※ InputSystemのPreview版を使用している記事です。
正式バージョンでは使用方法が変更されている可能性があります
まず、UnityのInputSystemとは
- キーボードの左キーを押したとき
- ゲームパッドの左キーを押したとき
- uGUIで作った左移動ボタンを押したとき
などなど.. 入力側が異なってもコード側で意識せずに処理できる新しい入力システムです
InputSystem自体は素晴らしい記事が沢山あるのでカット
今回は InputSystem を使用している場合の **「キー(orボタン)が押されているか」** 判定取得の記事になります。
しかも従来のInput.GetKeyライクに扱いたい。(つまりinterfaceを継承したりせずに簡単に扱いたい)
単純に「Updateメソッドで"押され続けているか"」を取りたいときあると思うんですよね
// Input時代の書き方
void Update()
{
if (Input.GetKey(KeyCode.LeftArrow))
{
// 左キー(orボタン)が押されている
}
}
InputSystemのInputControlを使用している場合、該当するものがどれかわからずに悩みました...
まず、以下のような移動に関するaInputControlを作成しました。
「キーボードの左を押したとき」と「画面上の左ボタンを押した時」に同じ処理をさせたいので ActionType は Button にしています。
結果として、InputSystem v1.0.x の時は以下の形で取得することができました
void Update()
{
// moveはInputControl
if (move.Left.ReadValue<float>() > 0f)
{
// 左キー(orボタン)が押されている
}
}
ActionTypeがボタンの場合floatでReadValueができるようなクラス設計になっていました。
なので、キーやボタンが押されている場合 ReadValue<float>()
で値が返ってくるので判定ができます。
しかし、 直感的でもなく気持ち悪さが残る.. (float...
現在の最新である InputSystem v1.1.0-preview3 を入れた所、以下のような形で取得できるようになっていました。
(リファレンス)
https://docs.unity3d.com/Packages/com.unity.inputsystem@1.1/manual/Actions.html
void Update()
{
// moveはInputControl
if (move.Left.IsPressed())
{
// 左キー(orボタン)が押されている
}
}
IsPressed!!
すごくスマート、そして直感的な形でとれるようになりました。 終わり
以前も isPressed 変数自体はあり外からはアクセスできないようになっていましたが IsPressed()
メソッドとして公開されるようになっていました。
リポジトリ覗いてみても v1.1.0 で中身大幅に変わってますね。
これ以外にも沢山機能が追加されていそうです。
今回の内容はブログにも書いてあります https://toshizabeth.hatenablog.com/