4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UnityAdvent Calendar 2024

Day 10

PlayerInputを用意しなくてもInputActionAssetの入力を取得できる話

Last updated at Posted at 2024-12-28

UnityのInputSystemを使った入力情報の利用方法

UnityのInputSystemを使用して入力情報を利用する場合、次の3つの方法があります。

  1. PlayerInputからInputActionを取得する
  2. PlayerInputのコールバックを受け取る
  3. 独自にInputActionMapを定義する
  4. InputActionAssetからC#コードを生成し使用する

これらの方法はそれぞれのメリットがありますが、PlayerInputを使用する場合、同じオブジェクトで実行するため、誰がPlayerInputを持つのかを決める必要があり、少し面倒に感じることがあります。

InputSystem.actions API

最近?のバージョン(おそらくInput System 1.8.0)から、新しいAPIとしてInputSystem.actionsが追加されました。このAPIを使用することで、Project Settings内の"Project-Wide Actions"に指定されたInput Action Assetをゲーム実行中に有効化し、コード側から直接取得できるようになります。

image.png

また、Unity6のプロジェクトでは、最初から InputActionAsset が用意されるようになりました。このアセットは最初から "project wide actions"に登録されており、MoveInteractなどの基本的なコマンドが最初から利用できるようになっています。

image.png

利用方法

"Project-Wide Actions"に設定されたInput Actionは、ゲーム実行中に有効化され、以下のようにInputSystem.actions.FindActionを使用して取得できます。

例えば、キャラクターの移動情報を取得する場合は、以下のように記述します。

public class Player : MonoBehaviour
{
    private InputAction _inputMove;
    private CharacterController _controller;
    private float _speed = 5;

    private void Awake()
    {
        TryGetComponent(out _controller);
        _inputMove = InputSystem.actions.FindAction("Move");
    }

    private void Update()
    {
        var inputValue = _inputMove.ReadValue<Vector2>();
        var direction = new Vector3(inputValue.x, 0, inputValue.y).normalized;
        var velocity = direction * (Time.deltaTime * _speed);
        _controller.SimpleMove(velocity);
    }
}

もしくはイベントを登録します。

    private void Awake()
    {
        _interactInput = InputSystem.actions.FindAction("Interact");
        _interactInput.started += OnInteract;
    }

    private void OnDestroy()
    {
        _interactInput.started -= OnInteract;
    }

    private void OnInteract(InputAction.CallbackContext obj)
    {
        // do something.
    }
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?