Amazonで商品を見るセール会場へ

Unity│Input Systemの切り替え|Active Input Handlingと旧Input Managerのエラー

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日に確認)にもとづいています。

設定の説明は公式資料を参照しています。

旧Input.GetKeyDownのエラーと、Bothへ変更したあとの動作は、Windows 11・Unity 6.6 (6000.6.5f1)・Input System 1.20.0 で確認しました。

新しいInput System APIへのコードの書き換えと、Androidでの動作は、この実機確認には含めていません。

画面の名前は英語版の表記です。

目次

Active Input Handlingの3つの選択肢

選択肢働き定義される記号
Input Manager (Old)古い Input の設定を使うENABLE_LEGACY_INPUT_MANAGER
Input System Package (New)新しい Input System パッケージを使うENABLE_INPUT_SYSTEM
Both両方を使う両方
Unity公式マニュアル(Player settings)と Input System の Installation をもとに作成

Unity 6.3 のマニュアルは、Input System パッケージを新しく柔軟でサポートも手厚いもの、Input Manager を古い(legacy)ものと呼んでいます。

Android の Player 設定のページには、「Both」は Android では使えないと書かれています。

スポンサーリンク

切り替える手順

  1. 「Edit」→「Project Settings」を開く
  2. 左の「Player」を選ぶ
  3. 「Other Settings」の中の「Active Input Handling」を選び直す
  4. エディタの再起動をうながされたら再起動する

公式ドキュメントは、この設定を変えたら、反映させるにはエディタの再起動が必要だとしています。

パッケージを入れたときに出る確認

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) に戻す新しい入力の仕組みを使わないとき

コードの書き換えの例

次は既存のMonoBehaviourのUpdateメソッド内に置く比較用の断片です。

旧方式と新方式のうち、使用する方式のコードだけを残してください。

Jump()は自分で用意するジャンプ処理を表します。

新方式にはInput Systemパッケージの導入と有効化が必要です。

// 旧方式:Updateメソッド内
if (UnityEngine.Input.GetKeyDown(UnityEngine.KeyCode.Space)) { Jump(); }

// 新方式:上の旧方式と置き換えてUpdateメソッド内へ
var keyboard = UnityEngine.InputSystem.Keyboard.current;
if (keyboard != null && keyboard.spaceKey.wasPressedThisFrame) { Jump(); }

キーボードがつながっていないと Keyboard.current が null になるので、先に確かめます。

両方のコードを残すとき

設定に合わせてコードを切り替える場合は、Updateメソッド内などで次のように分岐します。

Bothでは最初の分岐が選ばれ、新方式だけで判定します。

新方式を使う利用者にはInput Systemパッケージも必要で、配布時には対応するUnity・パッケージのバージョンを明示してください。

#if ENABLE_INPUT_SYSTEM
    var keyboard = UnityEngine.InputSystem.Keyboard.current;
    bool jump = keyboard != null && keyboard.spaceKey.wasPressedThisFrame;
#elif ENABLE_LEGACY_INPUT_MANAGER
    bool jump = UnityEngine.Input.GetKeyDown(UnityEngine.KeyCode.Space);
#else
    bool jump = false;
#endif
// jumpがtrueなら、自分のジャンプ処理を呼ぶ

新方式の例でキーが反応しないとき

新方式へ変更した後に例外は消えても入力できない場合は、次の順に確認します。

まず再生中のGameビューをクリックしてから、Spaceキーを押してください。

Input Systemの既定の設定では、Gameビューにフォーカスがないとキーボードやポインターの入力はゲームへ渡りません。

次に、Edit > Project Settings > Input System Packageで、使用できるデバイスを制限していないか確認します。

supportedDevicesが空なら制限はなく、一覧を指定している場合は対象外のデバイスが無視されます。

キーボードを使うプロジェクトで一覧を制限する場合は、Keyboardが含まれるか確かめてください。

最後に、入力を処理するタイミングも確認します。

上のUpdate内の新方式の例は、既定の動的更新を前提としています。

updateModeを固定更新へ変えている場合や、手動更新を採用している場合は、その設計に合わせた入力処理が必要です。

手動更新ではInputSystem.Update()を呼ばないと入力が処理されません。

入力方式を選ぶActive Input Handlingと、これらのInput Systemの動作設定は別の項目です。

根拠:InputSettingsの公式API、Editorの入力フォーカス設定(Input System 1.20.1、2026年10月26日確認)。

この追加手順は公式資料との照合で、新方式へのコード移行や各設定の実機再現は行っていません。

Unity 6000.6.5f1で旧入力APIのエラーを確認

Input Systemを導入済みの検証用プロジェクトで、Cubeに旧入力APIのスクリプトを付けました。

Spaceを押すとY軸に30度回転し、Consoleに入力回数を出すコードです。

設定の変更前後でコードは変更していません。

Active Input HandlingがInput System Package (New)の状態では、Input.GetKeyDown(KeyCode.Space)の呼び出しでInvalidOperationExceptionが出ました。

Gameビューを選んでSpaceを押しても、CubeのRotation Yは0のままでした。

Unityのエディタ画面。Consoleに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. が並び、エラー件数の表示は999+。CubeのRotation Yは0
旧Input APIの呼び出しで発生したInvalidOperationException。(2026年10月10日、Windows 11 Pro 10.0.26200 / Unity 6000.6.5f1 / Input System 1.20.0。Windows側の保存済み検証画像。Mac・Android・新API移行・Playerビルドは未検証)
Project SettingsのPlayer > Other Settings。Active Input HandlingがInput System Package (New)で、ドロップダウンにInput Manager (Old)、Input System Package (New)、Bothの3つの選択肢が開いている
Active Input HandlingのNew設定と選択肢。(2026年10月10日、Windows 11 Pro 10.0.26200 / Unity 6000.6.5f1 / Input System 1.20.0。Windows側の保存済み検証画像。Mac・Android・新API移行・Playerビルドは未検証)

Bothへの変更後、同じSpace入力が動くことを確認

設定場所は「切り替える手順」のとおりです。

旧入力も使う場合の選択肢がBothです。

本検証では画面操作の接続の制約でドロップダウンの選択を確定できなかったため、Editorを閉じ、隔離したテストプロジェクトのProjectSettings.assetでactiveInputHandlerを1から2へ変更して開き直しました。

設定画面で選択を完了した事例ではありません。

Unity Engineの起動スプラッシュ画面。バージョン6000.6.5f1、プロジェクト名InputSystemLabが表示されている
設定変更後に実際にEditorを起動し直した画面。再起動要求ダイアログではありません。(2026年10月10日、Windows 11 Pro 10.0.26200 / Unity 6000.6.5f1 / Input System 1.20.0。Windows側の保存済み検証画像。Mac・Android・新API移行・Playerビルドは未検証)
Project SettingsのPlayer > Other Settings。Active Input HandlingがBothになっており、その下にThe Input Manager is a legacy feature and is not recommended for new projects. という警告が出ている
再オープン後のActive Input HandlingはBoth。旧Input Managerに関する警告も表示されています。(2026年10月10日、Windows 11 Pro 10.0.26200 / Unity 6000.6.5f1 / Input System 1.20.0。Windows側の保存済み検証画像。Mac・Android・新API移行・Playerビルドは未検証)

再起動後、同じコードのままGameビューでSpaceを1回押すと、Rotation Yが30になり、ConsoleにSpace pressed: 1が出ました。

この入力による例外は0件でした。

シーンを保存してEditorを終了し、同じプロジェクトを開き直した後にも、同じ結果を確認しています。

Unityのエディタ画面。再生中のGameビューとInspectorでCubeのRotation Yが30、ConsoleにSpace pressed: 1 のログが1件、エラーと警告は0件
保存・再オープン後のSpace入力。Rotation Y=30、ログ1件、例外0件。(2026年10月10日、Windows 11 Pro 10.0.26200 / Unity 6000.6.5f1 / Input System 1.20.0。Windows側の保存済み検証画像。Mac・Android・新API移行・Playerビルドは未検証)
条件Space1回の結果例外
New、旧Input.GetKeyDownRotation Y=0InvalidOperationException
Both、同じ旧コードRotation Y=30、入力ログ1件0件
Both、保存して再オープンRotation Y=30、入力ログ1件0件

再生中の回転はランタイムの値です。

再生を止めると保存されたRotation Y=0に戻ります。

今回確認したのは、保存後もスクリプトと入力設定が残り、再生し直したときに同じ入力を処理できることです。

Bothで動くことと、新APIへの移行は別の確認

今回の実測はBothで旧APIが動くことを示します。

コードを新しいInput System APIへ書き換えた検証ではなく、旧・新APIを同時に実行した検証でもありません。

再オープン直後のConsoleには旧Input Managerの非推奨警告が1件出ました。

Bothの設定画面にもlegacy機能に関する警告があります。

旧コードの例外が解消したことと、新規プロジェクトで旧APIの採用が推奨されることを混同しないでください。

Android、Old単独、Playerビルドは今回未検証です。

新しいプロジェクトの初期状態

新規プロジェクトの入力設定やInputSystem_Actionsなどの初期アセットは、使用するテンプレートとUnityのバージョンを確認してください。

Input System 1.20の公式資料では、Unity 6.1以降の一部のテンプレートにパッケージが含まれると説明されています。

ただし、新しいプロジェクトで Active Input Handling の初期値がどれになるかは、マニュアルでは確かめられませんでした。

自分のプロジェクトの設定は、上の手順の場所で確かめます。

Unity のバージョンを上げたあとにこのエラーが出たときは、Unityのプロジェクトのバージョンを上げる手順もあわせて見てください。

スポンサーリンク

まとめ

  • 入力の仕組みは Player → Other Settings → Active Input Handling で切り替える
  • 選択肢は Old・New・Both の3つで、Both は Android では使えない
  • 変えたらエディタを再起動する
  • New設定で旧入力APIを呼ぶことが原因の例外は、新APIへの移行か、対応環境で旧入力を有効にすることで対処する

参考:Unity 6.3 Android Player settings、Input System 1.20 Installation、Keyboard API(設定とAPIの説明を2026年10月24日に再照合。

実機の再検証は含みません)。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

Unityのおすすめ書籍

開発PCの選び方

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次