新しいInputSystemを使う(準備編)
UnityはInputManagerから新しいInputSystemに移行が進んでいて、今年Previewが取れてVersion1.0.0になったこと(記事執筆時点では最新が1.0.1)と、新しくアプリも開発中なのでこの際だから新しいInputSystemに慣れて行うということで検証してみましたがなかなか複雑でパッと触った感じでは何がどうなってるのかわからん。
もうInputManagerでいいや!とか一瞬思ったけど、いずれ覚える必要が出てくるのならここは逃げずに頑張った結果、ということでひとまずなんとか使えるレベルになりました。
同じようにひとまず問題なく使う方法が知りたい。細けーことはあとで覚えるからという人たちのためにざっくり使い方と注意点を説明して行こうと思います。
検証環境
- Macbook Pro 15インチ 2018
- macOS Catalina 10.15.7
- Unity 2020.2.0b14
- Input System 1.0.1
InputManagerとInputSystemの違い
旧InputManagerとInputSystemの大きな違いは何か?というと、InputSystemはアクションマップと言われるアクション名と実際のデバイスのキーを関連付けさせて、アクションが実行されたかどうかでゲームの処理を行うようにする仕組みのようです。
アクションマップが抽象化されたインターフェースとなる感じですね。
アクションに紐づけられたデバイスのキーを意識する必要がなくなるため、新たなデバイスの追加なども管理しやすくなっていて、とても柔軟性と拡張性に優れた機能であると認識しました。
若干とっつきにくいと感じるのは、マルチプラットフォーム対応のシステムであるためアクションマップをインターフェースとしたシステムであることであると思います。
しっかり仕様を把握し、味方につければ別プラットフォームにゲームを移植する際などに大きな恩恵をもたらすと思うので今後はInputSystemの方をメインに使っていくほうがいいでしょう。
https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/index.html
PackageManagerからインストール
Window > PackageManagerからInput Systemを選択して、右下に出現するInstallボタンを押して、しばらくするとインストールが完了が完了します。
ProjectSettings > Player の中にある Active Input Handling* プルダウンから Input System Package (New) を選択してUnity Editorを再起動します。
ProjectSettings > Input System Package を開いて、Create settings asset ボタンを押してInput Systemの設定を初期化します。
操作可能な対象デバイスを登録する
Input System Package全体の設定項目が開きます。細かい設定項目がありますがとりあえず初期化されたデフォルト値の状態のままでも大丈夫です。細かい項目に関しては必要に応じて対応していきましょう!
ただし、Supported Devices にサポート対象のデバイスだけは登録しておきます。ここにデバイスを登録しないとAction Map(後述)に対象のアクションを登録しても無視されてしまうので注意が必要です。尚、何も登録しない場合は全てのデバイスが対象となるようです。
アクションマップを登録する
プロジェクトビューで適当なディレクトリを選択してから、右クリックでメニューを開きます。
Create > Input Actions からInputActionファイルを作成します。このファイルはアクションと各種デバイスのキーをマッピング情報を定義するファイルになります。
作成されたInput Actionsファイルを選択してインスペクタを開くと、Edit asset ボタンがあるのでクリックします。
タブのすぐ下にある No Control Schemesをクリックするとプルダウンが開くので Add Control Scheme でスキーマを登録します。ここでスキーマを登録しないと対象デバイスのキーを選択できないので必ず登録します。※例外として、Supported Devicesに何も登録していない場合はこの限りではありません。
今回は、スマートフォンメインで操作を定義しておいて、PC上でもマウスとキーボードで操作できるという前提として設定してみます。まずは、touchscreenというスキーマ名を作成し、デバイスの登録からTouchscreenをRequiredで登録、MouseはOptionalで登録しておきます。
次に、mouse&keyboardという名前のスキーマ名を登録して、MouseをRequired、KeyboardをOptionalで登録しておきます。尚、ここでRequired指定したデバイスがメインデバイスなるようです。接続されているデバイスが何を元に判断されるかはこのRequiredで指定されたデバイスがキーとなるようです。
Action MapsにPlayerが操作できるアクションを登録していきます。+ボタンを押してPlayerを登録、Actionsの+を教えてFireとMoveを登録して行こうと思います。FireはTouchscreen操作ではタップを割り当て、マウスの場合は左クリックボタンを割り当ててみます。
※ここでActionsの中に対象のデバイスのキーが見つからない場合は、Input System Packageの設定にある Supported Devices に登録されていない可能性があるのでチェックしてみましょう。
続いて、Moveを登録していきます。デバイスが持っている2次元情報を取得したいので、MoveのActionTypeはValueを選択して、ControlTypeをVector2にします。TouchscreenとしてPositionを登録(これはタップ位置?)MouseもPositionを登録(カーソル座標)を取得するように指定します。ActionMapの登録はこれでOKなので、Save Assetを押して保存しておきます。
これで準備はOKです。
次は実際に設定したアクションマップを使って操作してみましょう。