【学習】Input System(入力の取得)
Unity 入門シリーズでは、
- PlayerInput をアタッチした
- OnMove と OnJump で入力を受け取った
という形で Input System を使いました。
しかし、Input System には他にも知っておくと便利な仕組みがあります。
Input System
の主な使い方をまとめて押さえましょう。
今回は PlayerInput、InputValue、コールバックの仕組みを解説します。
今日学ぶこと
- PlayerInput … 入力を受け取るコンポーネント
- OnMove / OnJump / OnFire … コールバックの命名規則
- InputValue … 入力値の取得
- Send Messages … メソッド名で自動呼び出し
- Mouse … マウス座標の取得
Input System とは
Input System は、Unity 6 のデフォルトの入力システムです。キーボード、マウス、ゲームパッド、タッチなどに対応しています。
新規プロジェクトには InputSystem_Actions が用意されており、Player(移動・ジャンプなど)がすでに定義されています。
PlayerInput の設定
- プレイヤーの GameObject を選択
- Add Component → Player Input を追加
- Actions に
InputSystem_Actionsを指定 - Default Map を Player に設定
- Behavior を Send Messages に(推奨)
これで、入力があったときにスクリプト内のメソッドが自動的に呼ばれます。
コールバックの命名規則
Send Messages では、メソッド名が On + アクション名 のときに自動的に呼ばれます。
| アクション名 | メソッド名 | 呼ばれるタイミング |
|---|---|---|
| Move | OnMove | 移動入力(WASD・十字キー) |
| Jump | OnJump | ジャンプボタン(スペースなど) |
| Fire | OnFire | 攻撃ボタン |
void OnMove(InputValue value)
{
moveInput = value.Get<Vector2>();
}
void OnJump(InputValue value)
{
if (value.isPressed)
{
// ジャンプ処理
}
}InputValue の使い方
InputValue から、入力の値を取得します。
void OnMove(InputValue value)
{
Vector2 move = value.Get<Vector2>();
// 右: (1, 0)、左: (-1, 0)、上: (0, 1)、下: (0, -1)
}
void OnJump(InputValue value)
{
bool pressed = value.isPressed; // 押した瞬間 true、離した瞬間 false
}| メソッド・プロパティ | 説明 |
|---|---|
| value.Get<Vector2>() | 移動入力の (x, y) を取得 |
| value.isPressed | 押した瞬間 true、離した瞬間 false |
マウス座標の取得
Mouse.current でマウスの状態にアクセスできます。
using UnityEngine;
using UnityEngine.InputSystem;
Vector2 mousePos = Mouse.current.position.ReadValue();
// ワールド座標に変換(2D)
Vector3 worldPos = Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, 0));Behavior の種類
PlayerInput の Behavior で、入力の渡し方を変えられます。
| Behavior | 説明 |
|---|---|
| Send Messages | メソッド名で自動呼び出し。OnMove、OnJump など |
| Invoke Unity Events | Inspector でイベントを登録 |
| Broadcast Messages | 子オブジェクトにも送信 |
Send Messages がシンプルで、コードだけで完結します。
完成コード例
using UnityEngine;
using UnityEngine.InputSystem;
public class InputSample : MonoBehaviour
{
[SerializeField] private float speed = 5f;
private Vector2 moveInput;
void OnMove(InputValue value)
{
moveInput = value.Get<Vector2>();
}
void OnJump(InputValue value)
{
if (value.isPressed)
{
Debug.Log("ジャンプ!");
}
}
void Update()
{
float moveX = moveInput.x * speed * Time.deltaTime;
float moveY = moveInput.y * speed * Time.deltaTime;
transform.Translate(moveX, moveY, 0);
}
}重要ポイント
Input System でキーやマウスの入力を取得できます。
- PlayerInput … 入力を受け取るコンポーネント。Actions に InputSystem_Actions を指定
- On + アクション名 … Send Messages で自動呼び出し(Move → OnMove、Jump → OnJump)
- value.Get<Vector2>() … 移動入力の (x, y) を取得
- value.isPressed … ボタンを押した瞬間を判定
- Mouse.current.position … マウス座標
発展アイデア
- Input Actions のカスタマイズ … キー割り当ての変更、リバインディング
- InputAction … コードから直接アクションを参照する
- InputManager(レガシー) … Input.GetKey など。非推奨だがシンプル
Input System は ゲーム操作の基本 です。Unity 6 ではデフォルトで使われます。