はじめに
今日はUnity
の勉強していきます。
あまり使いたくないInputSystem
のTIPSをやろうかと思います。
InputSystemで押してる方向を検知するという方法について共有したいと思います。
使い所としてはキャラの移動などで押してる方向に移動するという部分で活躍してくれます。
「WASD」を使った8方向とゲームパッドのスティック部分を押しこんでる8方向を検知する内容であります。
環境
この記事の情報は次のバージョンで動作確認しています。
* MacOS Monterey (12.1)
* Unity (2021.2.9f1)
InputSystemとは
過去記事で導入方法と基本思想をまとめてるので参考にしてください。
InputActionを作る
手順レシピみたいな感じですが以下の通り進めます。
- InputActionファイルを新規作成する
- テンプレートは全て削除する
- ActionMapを1個追加する
- 名称は「Player」とする
- Playerに新しいActionを追加します
- 名称は「Move」とします
- ActionType は 「Value」
- ControlType は 「Vector2」
- Interactionはそのままにしておく
残りはBindingまでというところまでやりました。
キーボード用のBindingを作る
これからキーボードのWASDキーを入力検知して8方向するBindingを作ります
- +ボタンで
Add 2D VectorComposite
をクリック - 名称を「WASD」とします
Composite
の項目はそのままでいいです - 自動で4つのBindingが追加されているので、それぞれ適切にキー割り当てします
なぜ4つのキーで8方向かというとキー同時押しで左上や右上、左下、右下が検知できるからです。なので4つ検知できればOKなんでうs。
例) W + A 押しだと左上が押されたという判定になります。
ゲームパッド用のBindingを定義
+ボタンで 「Add Binding」をクリック
「Use in control scheme」の GamePad にチェックする
Path に GamePad → LeftStick とします。
スクリプト実装していく
実装の流れ
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; // これいる public class Sample : MonoBehaviour { private InputAction moveAction; void Start() { var input = this.GetComponent<PlayerInput>(); var actionMap = input.currentActionMap; moveAction = actionMap["Move"]; } void Update() { var value = moveAction.ReadValue<Vector2>(); if (value != Vector2.zero) { Debug.Log(value); } } }