自作でInputSystemを構築する

この記事は、Unityで独自のInput Systemを構築する方法を解説しています。「C」キーの入力をトリガーとして設定する具体例を挙げながら、Input Actionの作成からスクリプトの記述、コンソールでの動作確認まで丁寧に説明しています。カスタム入力処理を導入したい開発者にとって、有用な手順ガイドとなっています。

キーボードのCキーを押下した時のサンプル処理を作る

Input Action Assetの作成

Input Action Assetは、Unityの新しいInput Systemでキーボードやコントローラの入力を管理するための設定ファイルです。作成するには、Assetsメニューから新しいInput Action Assetを作成し、Input Actionのマッピングを設定します。アクションマップを作成し、特定のアクション(例えば「C」キー)を登録して、それに対するイベントをスクリプトで使用できるようにします。これにより、柔軟な入力管理が可能です。

Createメニューから作成します

ファイル名を変更します

Action Mapsを登録します

Action Maps は、UnityのInput Systemで一連の関連する入力アクションをグループ化するものです。各Action Mapは、プレイヤーの移動や攻撃など、特定の入力セットをまとめて管理するために使います。これにより、異なる操作モードやキャラクターの行動ごとに入力設定を簡単に切り替えたり管理したりすることが可能になります。

Actionsを登録します

Actions は、具体的な入力イベントや動作を定義する要素です。たとえば、「Jump」や「Shoot」など、特定の入力に応じて実行されるアクションを設定します。それぞれのActionは、キーやボタンなどの入力と関連付けられ、これによってゲーム内の動作がトリガーされます。Actionsは個別に設定できるので、異なるデバイス(キーボード、ゲームパッドなど)にも簡単に対応できます。

キー操作を割り当てます

この状態で、実際のキーボードで「C」キーを押下すると自動的に選択入力されます

設定情報を保存します

スクリプトの作成

using UnityEngine;
using UnityEngine.InputSystem;

public class Example : MonoBehaviour
{
    public InputActionAsset inputActionAsset; // Inspectorで設定
    InputAction cKeyAction;

    private void Awake()
    {
        // "Player"という名前のアクションマップをInputActionAssetから探し出します。
        var actionMap = inputActionAsset.FindActionMap("Player");

        // アクションマップ内から"CKey"という名前のアクションを取得し、cKeyActionに割り当てます。
        cKeyAction = actionMap.FindAction("CKey");
    }

    private void OnEnable()
    {
        cKeyAction.Enable();
    }

    private void OnDisable()
    {
        cKeyAction.Disable();
    }

    void Update()
    {
        // 毎フレーム呼ばれるUpdateメソッド内で、Cキーがこのフレームで押されたかを確認します。
        if (cKeyAction.WasPressedThisFrame())
        {
            // Cキーが押された場合に、メッセージをコンソールに表示します。
            Debug.Log("Cキーを押しました");
        }
    }
}

このスクリプトは、Unityの新しいInput Systemを使用して、「C」キーの入力を検知する方法を示しています。

  1. InputActionAssetinputActionAssetは、UnityエディタのInspectorで設定される入力アクションのアセットです。
  2. FindActionMapとFindActionFindActionMapを使用して、"Player"というアクションマップを取得し、その中から「CKey」というアクションを見つけます。
  3. アクションの有効化/無効化OnEnableでアクションを有効化し、OnDisableで無効化します。
  4. Updateメソッド: 毎フレーム実行され、WasPressedThisFrameメソッドで「C」キーが押下されたかをチェックし、押下時にメッセージをコンソールに表示します。

Actionをアウトレット接続します

実行して、動作を確認します

実行後、キーボードの「C」キーを押下してコンソールに表示されるのを確認します

その他のキー処理

「C」キーの入力に対する処理を2つの異なるシナリオで設定できます:

キーを押し続けている間中、true

IsPressed() メソッドを使用することで、キーが押されている間ずっとメッセージが表示されます。

if (cKeyAction.IsPressed())
{
    Debug.Log("Cキーを押し続けています");
}

キーを離した瞬間だけ、true

WasReleasedThisFrame() メソッドを使用して、キーが離された瞬間に一度だけメッセージを表示します。

if (cKeyAction.WasReleasedThisFrame())
{
    Debug.Log("Cキーを離しました");
}

これらを組み合わせることで、キーの入力状態を柔軟に管理できます。

Input System,Unity

Posted by hidepon