自作でInputSystemを構築する
この記事は、Unityで独自のInput Systemを構築する方法を解説しています。「C」キーの入力をトリガーとして設定する具体例を挙げながら、Input Actionの作成からスクリプトの記述、コンソールでの動作確認まで丁寧に説明しています。カスタム入力処理を導入したい開発者にとって、有用な手順ガイドとなっています。
キーボードのCキーを押下した時のサンプル処理を作る
Input Action Assetの作成
Input Action Assetは、Unityの新しいInput Systemでキーボードやコントローラの入力を管理するための設定ファイルです。作成するには、Assets
メニューから新しいInput Action Assetを作成し、Input Actionのマッピングを設定します。アクションマップを作成し、特定のアクション(例えば「C」キー)を登録して、それに対するイベントをスクリプトで使用できるようにします。これにより、柔軟な入力管理が可能です。
Unity6では、デフォルトでInputSystem_ActionsファイルがProjectウィンドウに作成されています
このファイルを使うと、「Actionsを登録します」の作業から進めることができます
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」キーの入力を検知する方法を示しています。
- InputActionAsset:
inputActionAsset
は、UnityエディタのInspectorで設定される入力アクションのアセットです。 - FindActionMapとFindAction:
FindActionMap
を使用して、"Player"というアクションマップを取得し、その中から「CKey」というアクションを見つけます。 - アクションの有効化/無効化:
OnEnable
でアクションを有効化し、OnDisable
で無効化します。 - Updateメソッド: 毎フレーム実行され、
WasPressedThisFrame
メソッドで「C」キーが押下されたかをチェックし、押下時にメッセージをコンソールに表示します。
Actionをアウトレット接続します

実行して、動作を確認します
実行後、キーボードの「C」キーを押下してコンソールに表示されるのを確認します
その他のキー処理
「C」キーの入力に対する処理を2つの異なるシナリオで設定できます:
キーを押し続けている間中、true
:
IsPressed()
メソッドを使用することで、キーが押されている間ずっとメッセージが表示されます。
if (cKeyAction.IsPressed())
{
Debug.Log("Cキーを押し続けています");
}
キーを離した瞬間だけ、true
:
WasReleasedThisFrame()
メソッドを使用して、キーが離された瞬間に一度だけメッセージを表示します。
if (cKeyAction.WasReleasedThisFrame())
{
Debug.Log("Cキーを離しました");
}
これらを組み合わせることで、キーの入力状態を柔軟に管理できます。
以下のように イベントベースの入力処理 に変更できます。
ポイント:
Update()
を使わずに、イベントでC
キーの入力を検知する。InputAction.performed
を使って、キーが押されたときに処理を実行する。
🛠 イベントベースの入力処理
using UnityEngine;
using UnityEngine.InputSystem;
public class Example : MonoBehaviour
{
public InputActionAsset inputActionAsset; // Inspector で設定
private InputAction cKeyAction;
private void Awake()
{
// "Player" アクションマップから "CKey" を取得
var actionMap = inputActionAsset.FindActionMap("Player");
cKeyAction = actionMap.FindAction("CKey");
}
private void OnEnable()
{
// アクションを有効化し、イベントを登録
cKeyAction.Enable();
cKeyAction.performed += OnCKeyPressed;
}
private void OnDisable()
{
// イベントの登録を解除し、アクションを無効化
cKeyAction.performed -= OnCKeyPressed;
cKeyAction.Disable();
}
// Cキーが押されたときに呼ばれるメソッド
private void OnCKeyPressed(InputAction.CallbackContext context)
{
Debug.Log("Cキーが押されました(イベント)");
}
}
📝 変更点
✅ Update()
を使わずに performed
イベント を利用
✅ OnEnable()
で イベント登録 し、OnDisable()
で 解除
✅ OnCKeyPressed()
メソッドを作成し、C
キーの入力を処理
💡 メリット:
✔ 無駄な Update()
処理が減る
✔ フレームごとのチェックが不要 なので、パフォーマンスが向上
✔ リアルタイムに反応 するので、イベント駆動型の設計に適している
この方法を使えば、イベントベースでスマートにキー入力を処理 できます! 🎮✨
ディスカッション
コメント一覧
まだ、コメントがありません