UnityUnityメモ

Unity 2023でInput Systemが動かない時の対処法【旧Inputとの互換性も解説】

Unity
  1. 1. はじめに
  2. 2. UnityのInput Systemとは?
    1. 🆕 新しいInput Systemとは?
    2. 🔁 旧Input Managerとの違いは?
  3. 3. Input Systemが動かない時に確認すべきポイント
    1. ✅① Input Systemのパッケージがインストールされているか
    2. ✅② Active Input Handlingの設定を確認しよう
    3. ✅③ Player InputやInput Actionの設定を見直す
    4. ✅④ スクリプトでの取得方法に間違いがないか確認
    5. ✅⑤ ビルド設定やプラットフォーム依存の問題
  4. 4. よくある原因とその対処法
    1. ❌ 原因①:Input Systemをインストールしただけで使えると思っている
    2. ❌ 原因②:Active Input Handlingの設定が「旧Input」のまま
    3. ❌ 原因③:Player Inputの設定ミス
    4. ❌ 原因④:InputActionが有効化(Enable)されていない
    5. ❌ 原因⑤:UIが入力を奪っている
    6. ❌ 原因⑥:ビルド時に入力が反応しない
  5. 5. 旧Input Managerとの互換性・切り替え方法
    1. 🔁 新旧Inputの切り替え設定
    2. 🛠 切り替えたらUnityを再起動しよう!
    3. 🔧 新Inputに完全移行する場合の手順
    4. 🔙 旧Inputに戻す方法
    5. 🤔 結局どっちを使えばいいの?
  6. 6. トラブルを防ぐためのベストプラクティス
    1. ✅① 初期設定チェックリストを作る
    2. ✅② Debug.Logで入力を確認しよう
    3. ✅③ Input Action名とバインドを明確にしておく
    4. ✅④ Action Mapを分けて整理する
    5. ✅⑤ 無反応のときは「Event System」と「フォーカス」に注意!
    6. ✅⑥ プラットフォームごとの制限を理解しておく
    7. 🚀 もっと快適に入力処理をしたい人へ:Rewiredがおすすめ!
  7. 7. まとめ
    1. ✅この記事のおさらいチェックリスト
  8. よくある質問(FAQ)
    1. 関連記事:

1. はじめに

Unity 2023でゲームを開発していると、「Input Systemが動かない!」というトラブルに直面することがありますよね。「ボタンを押しても反応しない…」「キャラクターが動かない…」そんな時、真っ先に疑いたいのが「Inputの設定ミス」です。

Unityでは、従来の「旧Input Manager(Legacy Input)」に加えて、より柔軟でモダンな「新Input System」が導入されています。でもこの新システム、設定を少しでも間違えるとまったく動かなくなることがあるんです。

この記事では、Unity 2023で新しいInput Systemが動かない時に確認すべき設定や、よくあるミスの対処法を初心者にもわかりやすく解説していきます。また、「旧Inputとの違いって?」「どうやって切り替えるの?」といった疑問にもお答えします!

「何が原因かわからなくてハマった…」という人も、この記事を読めばスッキリ解決できるはずですよ。では、一緒にチェックしていきましょう!




2. UnityのInput Systemとは?

Unityにはプレイヤーの操作を受け取るための「入力システム(Input System)」が用意されています。これによって、キーボードやマウス、ゲームパッド、タッチ操作など、さまざまなデバイスからの入力をゲーム内で使えるようになります。

🆕 新しいInput Systemとは?

Unity 2019.1以降、新たに導入されたのが「Input Systemパッケージ」です。この新Input Systemは、従来の「旧Input」とは違い、より柔軟でカスタマイズしやすいのが特徴です。

たとえば、以下のようなことが簡単にできるようになっています:

  • 複数の入力デバイス(キーボード+ゲームパッドなど)を同時にサポート
  • 入力アクション(ジャンプ、移動など)を定義して、処理を分けやすい
  • 入力のバインド変更やリマップが簡単

🔁 旧Input Managerとの違いは?

項目旧Input Manager新Input System
登場バージョンUnity 初期〜Unity 2019.1〜(正式版は2020以降)
入力方式コードで直接取得(例:Input.GetKeyアクションベースで管理(Input Action)
マルチデバイス対応弱い強い(ゲームパッド、タッチ、複数デバイス同時)
設定の自由度少ない高い(リマップ対応、イベントベース処理)
学習コスト低いやや高め

旧Inputの方がシンプルで扱いやすい一方、新Input Systemは将来的な拡張性や複雑な入力処理に強いというメリットがあります。




3. Input Systemが動かない時に確認すべきポイント

「Input Systemを使ってみたけど、全然入力が反応しない…」
そんなときは、まず設定を一つずつ確認することが大切です。UnityのInput Systemは少し設定が複雑なので、どこかが抜けているだけで動かなくなります。

ここでは、動かないときにチェックすべきポイントをわかりやすく解説していきます!


✅① Input Systemのパッケージがインストールされているか

まず最初に、新しいInput Systemを使うには、Unityに専用のパッケージを追加する必要があります。

パッケージの追加方法:

  1. Unityエディタの上部メニューから「Window」→「Package Manager」を開く
  2. 左上のプルダウンで「Unity Registry」を選択
  3. 「Input System」と検索して、表示されたら「Install」ボタンをクリック!

これでInput Systemが使えるようになります。


✅② Active Input Handlingの設定を確認しよう

Input Systemを導入しても、「旧Input」が有効のままだと新システムは動きません。設定を確認してみましょう。

設定手順:

  1. メニューから「Edit」→「Project Settings」を開く
  2. 左メニューで「Player」を選択
  3. 右側の「Other Settings」内にある「Active Input Handling」を探す
  4. ここを「Input System Package (New)」または「Both」に設定!

💡「Both」にすると旧Inputと新Inputが両方使えるので、移行中は便利です!


✅③ Player InputやInput Actionの設定を見直す

新Input Systemでは、入力を受け取るにはInput Actionを定義する必要があります。

よくあるミス:

  • Player Inputコンポーネントを付け忘れている
  • InputActionAssetファイルのバインドが空になっている
  • イベントの接続がされていない(UnityEventが設定されていない)

Player Inputを使う場合は、以下のようなステップで設定しましょう。

Player Inputの基本設定方法:

  1. ヒエラルキーで右クリック「Create Empty」で空のオブジェクトを作成
  2. そのオブジェクトに「Player Input」コンポーネントを追加
  3. 事前に作成した「Input Actions」アセットを割り当て
  4. 動作を「Send Messages」「Invoke Unity Events」などに設定

✅④ スクリプトでの取得方法に間違いがないか確認

新Input Systemでは、直接 Input.GetKey() のように書かず、InputAction を使います。

例:ジャンプボタンを検出するコード

public InputAction jumpAction;

void OnEnable()
{
jumpAction.Enable();
}

void OnDisable()
{
jumpAction.Disable();
}

void Update()
{
if (jumpAction.triggered)
{
Debug.Log("ジャンプボタンが押された!");
}
}

Enable() を忘れると入力が反応しません!


✅⑤ ビルド設定やプラットフォーム依存の問題

たとえば、WebGLやモバイル向けにビルドする際、特定のキーやデバイスが使えないことがあります。
プラットフォーム依存の設定や制限にも注意しましょう。

これらを一通りチェックすれば、「動かない原因」がかなり絞れてくるはずです!




4. よくある原因とその対処法

ここでは、Input Systemが**「なぜか動かない…」というときによくある原因をピックアップして、それぞれの対処法をわかりやすく解説**します。

初心者の方がつまずきやすいポイントばかりなので、心当たりがある人はぜひチェックしてみてください!


❌ 原因①:Input Systemをインストールしただけで使えると思っている

実は、インストールするだけでは動きません!

Input Systemを使うには、「Input Actions」という設定ファイルを作って、それをプレイヤーやスクリプトに結びつける必要があります。

✅対処法:

  1. プロジェクトウィンドウを右クリック →「Create」→「Input Actions」を選択
  2. 作成された「InputActions」ファイルをダブルクリックして、アクションを定義
  3. 「Player Input」コンポーネントにこのファイルを割り当てる

❌ 原因②:Active Input Handlingの設定が「旧Input」のまま

これも非常に多いミス。新しいInput Systemを使っていても、プロジェクト設定が旧式になっていると一切反応しません

✅対処法:

「Edit」→「Project Settings」→「Player」→「Other Settings」→
Active Input Handling」を「Input System Package (New)」または「Both」に設定!

設定変更後はUnityを再起動するのも忘れずに。


❌ 原因③:Player Inputの設定ミス

「Player Input」コンポーネントを使っているけど、反応しない場合はモード設定やイベント接続がうまくできていない可能性があります。

✅対処法:

  • Behaviorを「Send Messages」または「Invoke Unity Events」に設定
  • UnityEventを使用しているなら、Inspectorでイベント先の関数を正しく接続すること
  • 複数のオブジェクトでPlayer Inputが競合していないか確認

❌ 原因④:InputActionが有効化(Enable)されていない

スクリプトでInputActionを使っている場合、「Enable()」していないと動作しません!

✅対処法:

void OnEnable() {
myAction.Enable();
}

そして使い終わったら Disable() するのも忘れずに。


❌ 原因⑤:UIが入力を奪っている

「UIのボタンは動くのに、キャラクターが動かない!」
このパターンはEvent SystemがUI側の入力を優先してしまっている場合があります。

✅対処法:

  • UIとゲームのInputは別レイヤー・別アクションで管理する
  • Player Inputの設定で、Input ActionのAction Mapを分ける
  • 必要に応じて、Event Systemの存在を確認・再配置する

❌ 原因⑥:ビルド時に入力が反応しない

エディタ上では動くのに、ビルドすると何も反応しない…
これはプラットフォームごとの制限や設定不足が原因かもしれません。

✅対処法:

  • モバイルならタッチ操作が有効になっているか確認
  • キーボード入力が無効化されていないかチェック
  • WebGLでは一部のキー(F1〜F12、Tabなど)が使えない場合があるので注意

こうした「ありがちだけど見落としがちなミス」を一つずつ確認することで、ほとんどの問題は解決できます!




5. 旧Input Managerとの互換性・切り替え方法

Unityを長く使っている人にとってはおなじみの「旧Input Manager(Legacy Input)」。新しいInput Systemが登場しても、完全に使えなくなったわけではありません。新旧Inputは共存することができるんです!

このセクションでは、「どうやって切り替えるの?」「両方使いたいときはどうするの?」といった疑問に答えていきます。


🔁 新旧Inputの切り替え設定

まず、どちらのInputシステムを使うかはプロジェクト設定で切り替えることができます。

✅切り替え手順:

  1. 「Edit」→「Project Settings」→「Player」タブを開く
  2. 「Other Settings」の中にある「Active Input Handling」を探す
  3. 以下の3つから選べます:
  • Input Manager (Old) → 旧Inputだけを使う
  • Input System Package (New) → 新Inputだけを使う
  • Both旧Inputと新Inputの両方を同時に使える(おすすめ)

💡 新旧移行中のプロジェクトでは「Both」を選んでおくとトラブルが少ないです!


🛠 切り替えたらUnityを再起動しよう!

この設定を変更したあと、Unityエディタを一度再起動しないと反映されません。
設定だけ変えても動かない場合は、まず再起動してみてくださいね。


🔧 新Inputに完全移行する場合の手順

「そろそろ旧Inputは卒業したい…」という方は、以下の手順で完全移行できます。

新Input完全移行の流れ:

  1. Active Input Handling を「Input System Package (New)」に設定
  2. Input.GetKey()Input.GetButton() などの旧Input APIをすべて削除
  3. Input Actionsファイルを作成し、アクションごとにイベントやスクリプトを接続
  4. Player Input コンポーネントや InputAction を使用して入力を受け取る

🔙 旧Inputに戻す方法

もし新Inputでうまくいかず「やっぱり旧Inputの方がラク!」という場合は、簡単に戻すこともできます。

手順:

  1. 「Active Input Handling」を「Input Manager (Old)」に設定
  2. Unityを再起動
  3. Input.GetAxis()Input.GetKeyDown() を使ったコードに戻す

🤔 結局どっちを使えばいいの?

状況おすすめ設定
とりあえず動かしたい初心者旧Input(簡単で学びやすい)
将来的に複数デバイス対応したい新Input(柔軟性が高い)
移行中・比較したいBoth(両方使えるので便利)

Input Systemの切り替えは、プロジェクトの方向性や目的に応じて選ぶのがベストです。焦らず、自分のペースで移行していきましょう!




6. トラブルを防ぐためのベストプラクティス

Input Systemは便利な反面、設定ミスやちょっとした見落としで**「入力が効かない…」というトラブルになりがちです。
でも、あらかじめ
正しい手順やチェックポイントを押さえておけば安心!**
ここでは、UnityでInput Systemを使う際に意識しておきたい**ベストプラクティス(おすすめのやり方)**を紹介します。


✅① 初期設定チェックリストを作る

新しいプロジェクトを始めたら、まず以下の項目を毎回チェックしましょう:

  • 「Input System」パッケージがインストールされているか
  • 「Active Input Handling」が「Input System」または「Both」になっているか
  • Input Actionsファイルが作成されていて、Player Inputに紐づいているか
  • イベント接続(UnityEvent)が正しく行われているか
  • スクリプト内でEnable()されているか

これをやっておくだけで、初期のトラブルはかなり防げます!


✅② Debug.Logで入力を確認しよう

ゲームが思った通りに動かないとき、入力がそもそも来ているのかを確認するのが大事です。

例:Update内でログを出す

if (jumpAction.triggered)
{
Debug.Log("ジャンプボタンが押されました!");
}

これで、コンソールに出力されれば入力はちゃんと届いているという証拠になります。


✅③ Input Action名とバインドを明確にしておく

Input Actionsで「Jump」「Move」などの名前をつけるとき、名前がわかりやすい&被らないようにしておくと、あとから混乱しません。

特に「Move」「Movement」など似たような名前を複数使うと、バインドがごちゃごちゃになりやすいので注意!


✅④ Action Mapを分けて整理する

UI用、プレイヤー操作用、メニュー用など、Action Mapを分けて管理するのもおすすめです。

たとえば:

  • PlayerControls:移動、ジャンプ、攻撃など
  • UIControls:ボタン選択、決定、キャンセルなど

これにより、シーンごとに必要な入力だけを有効化できて、無駄な競合を防げます。


✅⑤ 無反応のときは「Event System」と「フォーカス」に注意!

UIを使っているとき、「Inputが効かない…」と感じたら、Event Systemが入力を独占してる場合があります。

  • Event Systemが1つ以上あるとトラブルの原因になる
  • 特定のUIがフォーカスを取っていると、Player Inputに届かないことがある

そんなときは、一度 ヒエラルキーで「EventSystem」を確認してみてください!


✅⑥ プラットフォームごとの制限を理解しておく

WebGL、Android、iOSなど、プラットフォームによって使えないキーや操作があります。

例えば:

  • WebGLでは「Tab」や「Functionキー」が使えないことがある
  • モバイルではタッチ操作を別途対応する必要がある

最初からプラットフォーム別に動作確認とデバッグを行うのがベストです!

これらのポイントをおさえておけば、Input Systemのトラブルに悩まされることはかなり減るはずです!
自分なりの「入力チェック習慣」を作って、安定した開発を目指しましょう💪


🚀 もっと快適に入力処理をしたい人へ:Rewiredがおすすめ!

新しいInput Systemも便利ですが、「もっと自由に複雑な入力を管理したい」「複数のコントローラーやデバイスを扱いたい」という方には、アセットストアで人気の入力管理ツール**Rewired**が超おすすめです!

Rewiredは:

  • 新旧Input Systemの両方と互換性あり
  • ゲームパッド、キーボード、マウス、タッチなど複数デバイスに対応
  • 入力のリマップやマルチプレイヤー設定も超簡単
  • 高評価&多機能なベストセラー!

複雑な入力設定で悩みたくない方、Inputまわりを効率化したい方は、ぜひ導入してみてくださいね👇


7. まとめ

Unity 2023で新しいInput Systemを使っていると、「なんで動かないの?」と悩む場面がたくさんありますよね。
でも、正しい設定と確認ポイントをおさえれば、ほとんどのトラブルはすぐに解決できます!


✅この記事のおさらいチェックリスト

🔲 Input Systemのパッケージはインストールされているか?
🔲 「Active Input Handling」の設定は「Input System」か「Both」になっているか?
🔲 Input Actionsのファイルは正しく設定されているか?
🔲 Player Inputのモードやイベント接続は合っているか?
🔲 InputAction.Enable() を忘れていないか?
🔲 UIやEvent Systemが入力をブロックしていないか?
🔲 対象プラットフォームで使用できる入力方法になっているか?

Input Systemは最初こそ少しややこしく感じるかもしれませんが、慣れてくると旧Inputではできなかった柔軟な入力処理がどんどん書けるようになります。

本記事を参考に、少しずつステップアップしていきましょう!🚀




よくある質問(FAQ)

Q
新しいInput Systemと旧Inputは同時に使えますか?
A

はい、使えます!
Project Settingsの「Active Input Handling」を「Both」に設定すれば、新旧どちらの入力システムも併用できます。ただし、同じ入力(たとえば同じキー)を両方で使うと競合する場合があるので注意してください。

Q
UnityEventやPlayer Inputって使わないといけないの?
A

必須ではありませんが、使った方が管理しやすくなります。
特に「Player Input」コンポーネントは、Input Actionsと連携しやすく、スクリプトでの取得よりも簡単に使える場面が多いです。イベントベースで処理したい場合は、UnityEventがおすすめです!

Q
プラットフォームごとに設定を変えた方がいいですか?
A

はい、特にモバイルやWebGL向けには注意が必要です。
使えるキーや操作方法が異なるため、事前にそのプラットフォームで使える入力を確認しておくと安心です。タッチやスワイプ、加速度センサーなど、専用の処理を入れるとより快適になります。

タイトルとURLをコピーしました