本日は Unity の小ネタ枠です。
UnityのStarterAssetsのプロジェクトにInputSystemで新しい入力を設定する方法を記事にします。
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 下の[
今回は 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 キーを押すとカメラ切り替えの処理が呼び出され、一人称視点から三人称視点に切り替わりました。