Unityの入力方法が教科書とネットで違う?― Input ManagerとInput Systemの違い
Unityでキー入力について調べると、次のようなコードをよく見かけます。
if (Input.GetKey(KeyCode.RightArrow))
{
// 右へ移動
}
ところが、今回使っているUnity 6対応版の教科書では、Input Systemという仕組みを使っています。
「どちらが正しいの?」「ネットの記事は間違っているの?」と思うかもしれません。
どちらかが間違っているわけではありません。Unityの入力方法が、時代とともに変わってきたためです。

1. Unityには新旧2つの入力方法がある
従来の方法:Input Manager
以前のUnityでは、Input Managerという仕組みが広く使われていました。
Input.GetKey() や Input.GetAxis() を使い、「右矢印キーが押されているか?」を直接調べる書き方です。古い教科書やWeb記事では、今もこの書き方をよく見かけます。
現在の方法:Input System
今回の教科書で使うのはこちらです。
Input Systemでは、キーそのものとゲームの操作を分けて考えます。「Wキーが押された」ではなく、「Moveという操作が行われた」と考えるのがポイントです。
2. なぜ現在はInput Systemが推奨されているの?
ゲームの入力は、キーボードだけではありません。マウス、ゲームパッド、タッチ操作など、さまざまな入力方法があります。
例えば「ジャンプ」なら、キーボードではSpaceキー、ゲームパッドではボタンを使うかもしれません。Input Systemでは、異なる入力を同じ「Jump」という操作につなげることができます。
Spaceキー → Jump
ゲームパッドのボタン → Jump
プログラム側は「どのキーが押されたか」を気にせず、「Jumpが行われたか」だけを考えればよくなります。
3. Input Systemで大切なのは「Action」
最初はInput Systemの設定項目が多く感じるかもしれませんが、すべてを一度に覚える必要はありません。まずは次の流れを意識してください。
WASDキー
↓
Binding(どのキーを使うかの対応づけ)
↓
Move(Input Action)
↓
Vector2(上下左右の向き)
↓
プレイヤーが移動
重要なのは、WASDキーとプログラムを直接結びつけていないことです。間に「Move」というActionがあります。
同じActionを使うなら、キーの割り当てを変えたいときもプログラムを書き直す必要はありません。Bindingを変えるだけで済みます。これがInput Systemを理解する最初のポイントです。
4. ネットのコードを貼ったらエラーが出たときは
ここがいちばん注意してほしいところです。
ネットで見つけた Input.GetKey() や Input.GetAxis() のコードを教科書のプロジェクトに貼り付けると、再生したときに次のようなエラーが出ることがあります。
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.
これはコードの書き間違いではありません。プロジェクトがInput Systemを使う設定になっているため、以前のInput Managerの書き方が使えない、という意味です。
このエラーが出たら、設定を変えて無理に動かすのではなく、教科書のInput Systemの書き方に合わせましょう。
もう一つの書き方を見かけたら
検索していると、次のような書き方も見つかるかもしれません。
if (Keyboard.current.rightArrowKey.isPressed)
{
// 右へ移動
}
これもInput Systemの書き方の一つで、Actionを使わずにキーを直接調べる方法です。間違いではありませんが、授業ではまずActionを使う方法を身につけます。
5. 古い方法は覚えなくていいの?
今の段階で、Input Managerの使い方を暗記する必要はありません。まずは教科書どおり、Input Systemを使ってみましょう。
ただし、次のような変化があったことは知っておくとよいでしょう。
| 以前 | 現在 | |
|---|---|---|
| 仕組み | Input Manager | Input System |
| よく見る書き方 | Input.GetKey()、Input.GetAxis() | Input Action、Binding |
Webで調べて「自分のコードと書き方が違う」となったとき、その理由を判断しやすくなります。
6. WinFormsと比べてみよう
WinFormsでは、KeyDown や KeyUp のイベントでキー入力を受け取り、キーの状態を保存して、Timerで移動させるプログラムを作ることができました。
UnityのInput Systemでは、キー入力をMoveというActionで受け取り、その値(Vector2)を使ってプレイヤーを動かします。
どちらも「人間の入力を受け取って、プログラムの動きにつなげる」という目的は同じです。違うのは仕組みと書き方です。
WinFormsからUnityへの違いについては、こちらの記事でも詳しく扱っています。
WinFormsのKeyDown/KeyUpからUnity Input Systemへ ― キー入力の考え方はどう変わる?
7. Unityの記事を検索するときは「いつの記事か」を見よう
これはInput Systemだけの話ではありません。Unityはバージョンアップによって、画面やメニュー、パッケージ、API、推奨される方法などが変わることがあります。
Webで調べるときは、検索結果のコードをそのままコピーする前に、次の2つを確認する習慣をつけましょう。
- この記事はいつ書かれたものか
- 自分が使っているUnityのバージョンと同じか
8. まずは教科書どおりやってみよう
最初からすべて理解する必要はありません。まずは教科書どおりに設定して、キーを押すとActionにつながってゲームが動く、という流れを体験してみてください。
そのあとで「Bindingとは何か」「なぜVector2なのか」と、一つずつ理解していけば十分です。
Input Systemを使った具体的なキー入力については、次の記事も参考にしてください。
Unity 6でキー入力による移動を実装する ― Input Systemの基本
以前のInput Managerとの違いを詳しく知りたい場合はこちらです。
Unityの新しいInput Systemによる入力処理とInputManagerとの比較
まとめ
- 今回の教科書では、Input Systemを使います。
- ネットで
Input.GetKey()やInput.GetAxis()を見つけたら、それは以前のInput Managerの書き方です。 - 教科書のプロジェクトに貼るとエラーになるので、Input Systemの書き方に合わせましょう。
- Input Systemでは、キー → Binding → Action → ゲームの処理、という流れが大切です。
- Webで別の書き方を見つけたら、「Unityのバージョンや入力システムが違うのかもしれない」と考えられれば十分です。










ディスカッション
コメント一覧
まだ、コメントがありません