先日Unity JapanさんのyoutubeチャンネルでInput System再入門という、InputSystemを使っていくうえで参考になる配信がありました。
Input System再入門 | Unity Learning Materials
で、そういえばStarter AssetsがInput Systemを使っていたという事を思い出したので、 一体どのような実装を行っているのか、簡単にですが調べてみました。
環境
Unity2021.2.7f1
Starter Assets - Third Person Character Controller 1.0
Input System 1.2.0
構成
プレイヤーのキャラクターを動かすための仕組みはPrefabのPlayerArmatureで完結しています。
上記動画とは違って、こちらはBehaviorをSend Messagesに設定していてGameObject.SendMessageを利用した実装になっています。
- Player InputからOn~というメソッドを実行するメッセージを発行
- Starter Assets InputsでOn~メソッドから入力値を取得
- ThirdPersonControllerでStarter Assets Inputsから取得した値を使ってキャラクターを動かす
Player Inputの表示から、 On~というメソッドの名前はInput Actionsで設定されているAction名から取られているのが確認できました。
入力を追加してみる
とりあえず、Input ActionsにTestという新しい項目を追加しました。今回はTキーで反応するようにしました。
TestというInputActionを追加すると、ちゃんと呼び出すメソッドの一覧にOnTestが追加されているのが確認できました。
入力を受け取って出力してみる
試しに、入力の変化を受け取るようにしてみましょう。Action TypeをValueに変更します。
Starter Assets Inputsのコード自体を改変してもいいのですが、今回は新しいスクリプトInputTest.csを作成して、PlayerArmatureにアタッチします。
using UnityEngine; #if ENABLE_INPUT_SYSTEM using UnityEngine.InputSystem; #endif public class InputTest : MonoBehaviour { #if ENABLE_INPUT_SYSTEM void OnTest(InputValue value) { Debug.Log($"T:{value.isPressed}"); } #endif }
実行してTキーを押すとTrue、離すとFalseが出力されました。
おわりに
StarterAssetsはSendMessageを活用した方の実装になっているんですね。
InputSystemの方は良く分からないからStarterAssetsを触れようにも触れられてない方の一助になればいいなと思います。