MRが楽しい

MRやVRについて学習したことを書き残す

UnityのStarterAssetsのプロジェクトにInputSystemで新しい入力を設定する

本日は Unity の小ネタ枠です。
UnityのStarterAssetsのプロジェクトにInputSystemで新しい入力を設定する方法を記事にします。

前回記事

以下の前回記事の続きです。
bluebirdofoz.hatenablog.com

本記事では前回作成した視点切り替えをキーボードやコントローラの入力で実行できるようにしてみます。

InputSystem

StarterAssets のプロジェクトでは InputSystem を使ってキーボードやコントローラからの入力を管理しています。
旧来の InputManager と異なり、InputSystem はゲームパットの入力などを統一して扱えるほか、各種入力を Action で抽象化して取り扱える点などが特徴です。
forpro.unity3d.jp

InputSystem の入力はシーン内の Player Input コンポーネントで制御されています。

新しい入力を追加する

以下のファイルが入力の設定ファイルです。選択してInspector から[Edit asset]をクリックします。

Assets/StarterAssets/InputSystem/StarterAssets.inputactions

編集ウィンドウが開き、現在設定されている入力 Action の一覧が表示されます。
ここに新たな入力の設定を追加するため、[+]ボタンをクリックします。

新規追加された Action に名前を設定します。今回は CameraChange という名前にしました。
キーまたはボタンを押したときに視点が切り替わってほしいので[Action Type]は[Button]で設定します。

次に入力キーを割り当てます。Action 下の[]を選択して[Path]を開きます。
今回は Z キーを割り当てたいので[Keyboard]を選択します。

[keyboard -> By Character Mapped to Key -> Z]を選ぶと、Z の入力キーの関連付けが設定できます。
これで Z キーを押したときに CameraChange の Action が発生するようになりました。

もしコントローラからもカメラ切り替えの入力を受け取りたい場合は CameraChange の[+]ボタンから[Add Binding]をクリックして新しい入力の関連付けを追加します。

[Path]から[Gamepad -> Button North]を選ぶと、ゲームパッドの上位置のボタンの関連付けが設定できます。

新しい入力を受け取って処理する

新しい入力 Action を作成できたので、次は入力を受けとって処理する部分を実装します。
Player Input コンポーネントを確認すると[OnCameraChange]の呼び出しが追加されています。

これにより同じゲームオブジェクトの OnCameraChange 関数に通知が届くので、これを受け取るスクリプトを実装します。
本プロジェクトでは StarterAssetsInputs コンポーネントで入力の処理が行われているので、ここに関数を追加しました。

		/// <summary>
		/// カメラ切り替えコンポーネントの参照
		/// </summary>
		[Header("Camera Change")]
		public CameraChanger cameraChanger = default;
		
		/// <summary>
		/// CameraChange Actionの入力処理
		/// </summary>
		/// <param name="value"></param>
		public void OnCameraChange(InputValue value)
		{
			// カメラの切り替えを呼び出す
			cameraChanger.SwitchCamera();
		}

前回作成したカメラ切り替えのコンポーネントへの参照を設定して準備は完了です。

動作確認

シーンを再生して動作を確認します。

以下の通り、Z キーを押すとカメラ切り替えの処理が呼び出され、一人称視点から三人称視点に切り替わりました。