Unityの入力の仕組みには、古い Input Manager と、新しい Input System パッケージの2つがあります。
どちらを使うかは、Player 設定の Active Input Handling で切り替えます。
- 場所:Edit → Project Settings → Player → Other Settings → Active Input Handling
- 選択肢:Input Manager (Old)/Input System Package (New)/Both
- 変えたらエディタの再起動が必要
- 新しい方だけにしたまま Input.GetKey などを使うと InvalidOperationException が出る
この記事は、Unity公式マニュアル(Unity 6.3)と Input System パッケージの公式ドキュメント(2026年9月29日に確認)にもとづいています。
Unityのエディタでの再現は含まず、画面の名前は英語版の表記です。
Active Input Handlingの3つの選択肢
| 選択肢 | 働き | 定義される記号 |
|---|---|---|
| Input Manager (Old) | 古い Input の設定を使う | ENABLE_LEGACY_INPUT_MANAGER |
| Input System Package (New) | 新しい Input System パッケージを使う | ENABLE_INPUT_SYSTEM |
| Both | 両方を使う | 両方 |
Unity 6.3 のマニュアルは、Input System パッケージを新しく柔軟でサポートも手厚いもの、Input Manager を古い(legacy)ものと呼んでいます。
Android の Player 設定のページには、「Both」は Android では使えないと書かれています。
切り替える手順
- 「Edit」→「Project Settings」を開く
- 左の「Player」を選ぶ
- 「Other Settings」の中の「Active Input Handling」を選び直す
- エディタの再起動をうながされたら再起動する
公式ドキュメントは、この設定を変えたら、反映させるにはエディタの再起動が必要だとしています。
パッケージを入れたときに出る確認
Package Manager で Input System パッケージを入れると、新しい入力の仕組みを有効にするかを尋ねる画面が出ます。
「Yes」を選ぶと、新しい方が有効になり、古い方は無効になって、エディタが再起動します。
InvalidOperationExceptionが出るとき
新しい方だけを有効にしたプロジェクトで、古い書き方(UnityEngine.Input)を使うと、次のエラーが出ます。
InvalidOperationException: You are trying to read Input using the UnityEngine.Input class, but you have switched active Input handling to Input System package in Player Settings.エラー文は Unity公式の不具合報告(Issue Tracker)の題名で確かめたもので、マニュアルには載っていません。
直し方は3つあります。
| 直し方 | 向いているとき |
|---|---|
| コードを Input System の書き方に直す | これからも使い続けるプロジェクト |
| Active Input Handling を Both にする | 古いアセットのコードをすぐには直せないとき(Android では使えない) |
| Active Input Handling を Input Manager (Old) に戻す | 新しい入力の仕組みを使わないとき |
コードの書き換えの例
キーが押された瞬間を調べるコードは、次のように書き換えます。
// 古い書き方(Input Manager)
if (Input.GetKeyDown(KeyCode.Space)) { Jump(); }
// 新しい書き方(Input System)
using UnityEngine.InputSystem;
if (Keyboard.current != null && Keyboard.current.spaceKey.wasPressedThisFrame) { Jump(); }キーボードがつながっていないと Keyboard.current が null になるので、先に確かめます。
両方のコードを残すとき
アセットを配るときなど、どちらの設定でも動かしたいときは、定義される記号で分けます。
#if ENABLE_INPUT_SYSTEM
bool jump = Keyboard.current != null && Keyboard.current.spaceKey.wasPressedThisFrame;
#else
bool jump = Input.GetKeyDown(KeyCode.Space);
#endif新しいプロジェクトの初期状態
Unity 6.3 のマニュアルでは、新しいプロジェクトの Assets に入力アクションのアセット InputSystem_Actions が入ると書かれています。
ただし、新しいプロジェクトで Active Input Handling の初期値がどれになるかは、マニュアルでは確かめられませんでした。
自分のプロジェクトの設定は、上の手順の場所で確かめます。
Unity のバージョンを上げたあとにこのエラーが出たときは、Unityのプロジェクトのバージョンを上げる手順もあわせて見てください。
まとめ
- 入力の仕組みは Player → Other Settings → Active Input Handling で切り替える
- 選択肢は Old・New・Both の3つで、Both は Android では使えない
- 変えたらエディタを再起動する
- InvalidOperationException は、コードを直すか、設定を Both か Old にすると消える
参考:Unity「Player settings」「Input」、Input System「Installation」(2026年9月29日に確認)。
