TATIKUNLOG.

主にゲーム作りについて書き留めるブログ。

Starter AssetsのInput Systemの使われ方の確認と拡張【Unity】


PR

先日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を利用した実装になっています。

f:id:tat1kun:20211220003938p:plain

  1. Player InputからOn~というメソッドを実行するメッセージを発行
  2. Starter Assets InputsでOn~メソッドから入力値を取得
  3. ThirdPersonControllerでStarter Assets Inputsから取得した値を使ってキャラクターを動かす

Player Inputの表示から、 On~というメソッドの名前Input Actionsで設定されているAction名から取られているのが確認できました。

f:id:tat1kun:20211220004003p:plain

入力を追加してみる

とりあえず、Input ActionsにTestという新しい項目を追加しました。今回はTキーで反応するようにしました。

f:id:tat1kun:20211220005615g:plain

TestというInputActionを追加すると、ちゃんと呼び出すメソッドの一覧にOnTestが追加されているのが確認できました。

f:id:tat1kun:20211220004315p:plain

入力を受け取って出力してみる

試しに、入力の変化を受け取るようにしてみましょう。Action TypeをValueに変更します。

f:id:tat1kun:20211220010917p:plain

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が出力されました。

f:id:tat1kun:20211220011341g:plain

おわりに

StarterAssetsはSendMessageを活用した方の実装になっているんですね。

InputSystemの方は良く分からないからStarterAssetsを触れようにも触れられてない方の一助になればいいなと思います。