Input Systemは、従来のInput Managerを使ったInputの代替機能として用意されたUNITYの新しい入力システムです。UNITY公式によれば、あらゆる種類の入力デバイスに対応し、従来のInputより強力で柔軟性があることを目的としてるそうです。
その文言の通り、従来のInputと比較して高機能・且つ慣れれば旧来より扱いやすいManagerアセットもあり、強力な入力受付機能と言えます。このページでは、なるべくコード等を使わずにInput Systemの魅力や機能について紹介します。
Table of Contents
Input Systemの特徴
Input Systemは、従来のInput ManagerのGetAxisと同様に複数の入力デバイスの出力結果をアクションと呼ばれる一つの行動として登録し、利用側からはアクションを指定するだけで、複数の出力結果をまとめて扱うことができます。
それらはInput Actionアセットの画面でInput Managerのよりも柔軟に定義ができ、各場面を定義するマップの下に複数配置する構造になっています。
例えば、RPGを考えてみます。
マップとしては、場面などで通常、ミニゲーム、戦闘、メニューなどが考えられます。通常のアクションとして、キャラの移動、キャラのダッシュ移動、決定・調べる、メニューを開くなどがあります。ミニゲームは決定・調べる、連打、左右ボタン交互など。戦闘とメニューは省きますが、同じように作れます。
そして、決定・調べるならキーボードのEnter、マウスの右クリック、ゲームパッドの丸ボタンなど1つのアクションに対して複数のデバイスとキーを選択できます。
通常、マップはcurrentMapで指定するため、アクション名が同じならマップが異なってもcurrentMap[決定・調べる]のようにすると全く同じように扱えます。
そのため、最初は通常とミニゲームの決定・調べるアクションが全く同じボタン配置だったけど、ミニゲームの決定・調べるのボタンを変更したくなった場合、コードを一切触ることなく、ミニゲームの決定・調べるアクションのキー設定を変更するだけで対処が可能です。
利点1.入力値操作は全てInput Actionにお任せ
利用側は、入力デバイスからの値の取得に関して、マップ・アクション以外の処理は何も考えなくてよいことが一番の利点かと思います。
もちろん、利用側から加工処理も可能です。が、それらを全てInput Systemに任せてしまうことが可能です。任せるだけで、利用側のソースコードの入力関係は非常にクリアになるかと思います。
上記RPGの例で3点ほど紹介します。
ダッシュ移動
ダッシュ移動を、通常はダッシュボタンを押しながら方向キーだとします。Input Systemは、方向を4つのボタンを定義してVector2で返すことやゲームパッドのスティックをVector2で返すことができます。
さらに、●ボタンを押している時にしか値を出さないような定義が可能です。
この2つが実現できるアクションがあれば、利用側はif (Aボタンを押している、且つ方向キーを押している)などの面倒なことをせず、if (アクション(ダッシュ).isPush())のような簡単な記述で可能です。
連打
ボタンを何秒以内に押し離ししているかを検知し、出力側に提供することができます。利用側はアクション(連打)をチェックするだけで、自動的に連打している時のみ値を受け取れます。
左右ボタン交互
右ボタンを押して指定秒以内に左ボタン、左ボタンを押して指定秒以内に右ボタンのように2つのボタンの挙動を感知して出力することができます。
利点2:ヴァーチャルパッドやゲーム内キーコンフィグの実装が容易
容易と書くと語弊がありますが、従来のInputでは実現するのに一手間かかるこの2つの機能が比較的容易に実装できます。
Input Systemの複数キー入力はアクションにキーを定義したコントロールをバインドする形で実現しています。予め定義したコントロールは後から動的に変更することが可能です。
ヴァーチャルパッドは割り当てたキーのうち1つにバーチャルパッドがドラッグやタップされた時に出力するように変更することが可能です。併せて、ゲーム内のキーコンフィグ画面で、ユーザーが入力したキーを新たなキーとして既存キーを置き換えることが可能です。
また、マルチプレイヤーの実装を簡単にする仕組みも整っています。基本的にゲームでInputが必要な内容はそのほとんどを内包していると言ってもよいシステムです。
欠点1.特殊な操作のプリセットが少ない
上記で言えば、連打・左右ボタン交互、ダッシュ移動に該当する機能のことです。
Input Systemには、2つ以上の入力キーを元に新たな出力方法を定義するComposite、入力タイミングを変更するInteraction、入力値を変更するProsessorの3つの概念があります。
これらの機能を利用して、連打・左右ボタン交互、ダッシュ移動を実現するわけですが、この機能に対しるUnity側が提供するプリセットがそれぞれ約5種類ほどです。どれも凡庸的で非常に使いやすいプリセットばかりですが、やはり5種は少なく実現できない処理も多数あります。
その代表例が連打・左右ボタン交互、ダッシュ移動だったりします。これらは、この3つの機能を自分で拡張することで初めて実現ができます。拡張そのものは非常に簡単ですが、アセット等でのプリセットの充実は欲しいところです。
欠点2:大規模な拡張には難易度がある
例えば、上記のComposite、Interaction、Processorの拡張については容易です。また、旧来はinputをラッパーする形の新たなInputクラスを作るような拡張がほぼ必須でしたが、Input Systemはそのままでも実用性が高い機能ですそのため、Composite、Interaction、Processor以外の拡張が必要になる場面は少ないと思います。
しかし、システムの中核を拡張しようとすると、学習難易度が高い欠点があります。いざ、機能追加を考える際は覚悟が必要です。
まとめ
従来のInputと比較すると機能豊富な割にそれをあまり意識すること無く利用できるため、非常に便利です。現時点で、すでに正式版となっているため、今から新しいプロジェクトを考えている方は従来のInputから乗り換えを検討してもよいかと思います。
また、アセット泣かせと言えそうなほど、基本システムががっちりしており、有料アセットでしかできなかった事が簡単に実現できるようになっていることはポイントの1つだと思います。