「キャラをWASDで動かしたいのに、キーを押しても反応しない」
キーボード入力は、ゲーム操作の最初の関門です。
Unityでは旧Input ManagerのInput.GetKeyや、新Input SystemのInputActionで読み取ります。
方式は違っても、「押されているか」「どれくらい倒されているか」を取得する点は同じです。
この記事では、GetKey・GetKeyDown、GetAxisを使ったWASD移動、新Input Systemの最小例、フレームレートに依存しない動かし方まで整理します。
- GetKeyを書いたのに、Playしてもキャラが動かない…
- 斜め移動が速くなりすぎる、またはキー設定が分からない。
- 新Input Systemの記事を見たが、自分のプロジェクトで再現できない。
✨ この記事でわかること
- Input.GetKeyとGetKeyDownの違い
- GetAxisでWASD・矢印キーを読む方法
- キーボードでキャラを動かす最小スクリプト
- 新Input Systemでのキーボード読み取り例
- 斜め移動が速くなる問題の対処
- 初心者でも理解できる解説
\プログラミング未経験でも大丈夫!まずは1本作り切ろう/
初心者が最初に選ぶならコレ
Unity ノンフィールドRPG
+スレスパ風JRPG講座
Unity6対応・スマホ化対応の最新カリキュラム。「何から始めればいいかわからない」という初心者でも、ステップごとに手を動かすだけでRPGが完成します。
憧れのアクションゲームに挑戦
Unity 2Dアクションゲーム
の作り方講座(ロックマン風)
初心者でもロックマン風の横スクロールACTが作れる講座。7ステージ+ラスボスという本格構成で、スマホ化・広告実装まで対応。「自分のゲームをリリースしたい」夢を叶えます。
3Dゲーム開発の入口はここ
ゼルダ風3Dアクションゲーム
の作り方講座
「3Dゲームって難しそう…」と感じている初心者向けの講座。全16回でゼルダ風3Dアクションがスマホ対応で作れるようになります。3D開発の基礎がしっかり身につきます。
GetKeyとGetKeyDownの違い
旧Input Managerでは、KeyCodeでキーを指定します。
- Input.GetKey — キーが押されている間、毎フレームtrue
- Input.GetKeyDown — 押した瞬間の1フレームだけtrue(ジャンプ向け)
- Input.GetKeyUp — 離した瞬間の1フレームだけtrue
void Update
{
if (Input.GetKey(KeyCode.W))
{
Debug.Log("Wが押されています");
}
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("スペースを押した瞬間");
}
}
移動はGetKey、ジャンプや攻撃の「1回だけ反応」はGetKeyDownが向いています。
GetAxisでWASD・矢印キーを読む
Project Settings → Input Manager にあるHorizontalとVerticalを使うと、WASDと矢印キーをまとめて読めます。
float h = Input.GetAxis("Horizontal"); // A/D 左/右
float v = Input.GetAxis("Vertical"); // S/W 下/上
値はおおよそ-1〜1です。
キーを離すと0に戻ります。
軸名はデフォルトで”Horizontal””Vertical”が入っています。
スペルミスに注意してください。

移動は個別のGetKeyより、GetAxisの方がコードが短くなります。
2Dでも3Dでも、まずは軸で読む形を覚えると楽ですよ。
キーボードでキャラを動かす最小例
Transformで位置を動かすシンプルな例です。
Time.deltaTimeを掛けて、フレームレートに依存しない速度にします。
public float moveSpeed = 5f;
void Update
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 move = new Vector3(h, 0f, v) * moveSpeed * Time.deltaTime;
transform.position += move;
}
2Dの横移動なら、Yの代わりにZを使うか、Vector2でRigidbody2Dに渡します。
Vector2 input = new Vector2(
Input.GetAxis("Horizontal"),
Input.GetAxis("Vertical")
);
rb.velocity = input.normalized * moveSpeed;
斜めに押すと成分が合成されて速くなるため、normalizedで長さを1にそろえるのが定番です。
- STEP1移動対象にスクリプトを追加
Playerなど、動かしたいGameObjectにアタッチします。
- STEP2GetAxisで入力を取得
HorizontalとVerticalから-1〜1の値を読みます。
- STEP3移動量を計算
方向ベクトルに速度とTime.deltaTimeを掛けます。
- STEP4PlayでWASDを確認
反応しない場合はActive Input Handlingの設定を確認します。
新Input Systemでのキーボード読み取り
Input System Packageを導入済みの場合、Input Actionsで「Move」アクションを作り、WASDをバインドします。
Player Inputコンポーネントを付けたうえで、次のように読む例です。
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerMoveNewInput : MonoBehaviour
{
public float moveSpeed = 5f;
Vector2 moveInput;
public void OnMove(InputAction.CallbackContext context)
{
moveInput = context.ReadValue<Vector2>;
}
void Update
{
Vector3 move = new Vector3(moveInput.x, 0f, moveInput.y);
transform.position += move.normalized * moveSpeed * Time.deltaTime;
}
}
旧方式との違いは、キー割り当てをコードではなくInput Actionsアセット側で管理する点です。
詳しい新旧比較は、Input System比較の記事もあわせて参照してください。
よくあるつまずき
キーボード入力でつまずきやすい点です。
| 症状 | 原因と対処 |
|---|---|
| キーを押しても無反応 | Gameビューにフォーカスがない、Active Input HandlingがInput Systemのみで旧コードを実行している |
| 斜めが速い | ベクトルをnormalizedする、またはxとzを別々にクランプする |
| 移動がカクカク/速すぎる | Time.deltaTimeの掛け忘れ、またはRigidbodyとTransformの二重移動 |
| ジャンプが連続する | GetKeyDownと地上判定(接地フラグ)を組み合わせる |
Play中はGameビューをクリックしてからキーを押してください。
SceneビューやInspectorにフォーカスがあると、入力がゲームに届きません。

「動かない!」と焦る前に、Gameビューを一度クリックするのを忘れないでください。
初心者が一番多く踏む罠のひとつです。
エディタ上でキー入力をテストするときは、ConsoleにDebug.Logを出して、入力値が変化しているか確認する方法も有効です。
移動処理の前に、入力だけ切り分けて検証しましょう。
複数キーを同時に押す組み合わせ(例:Shiftでダッシュ)も、GetKeyで個別に読めます。
ダッシュ中だけ速度を上げるなら、float speed = Input.GetKey(KeyCode.LeftShift) ? dashSpeed : moveSpeed;のように切り替える形が分かりやすいです。
日本語配列のキーボードでも、KeyCodeは物理キー位置で判定されます。
WASDはそのまま使えますが、独自レイアウトを想定するゲームでは、新Input Systemのリバインド機能が後から活きてきます。

移動ができたら、次はジャンプや攻撃キーをGetKeyDownで足していきましょう。
入力の型が同じなので、自信を持って広げられますよ。
記事を読んで「作ってみたい!」と思ったら!初心者でも1本完成できる講座で実力をつけよう
知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを1本完成させることで、理解が一気に深まります。プログラミング未経験からでも取り組める講座で、ゲーム開発の第一歩を踏み出しましょう。
Unity ノンフィールドRPG+スレスパ風JRPG講座【Unity6対応!初心者でもデッキ構築×JRPGをスマホ向けに作れる!】

- Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
- Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
- 初心者でも迷わず進められる丁寧な解説構成
- ノンフィールドRPGとデッキ構築JRPGの2つをまとめて学べるセット講座
Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、プログラミング未経験の初心者でも取り組みやすい、ステップバイステップ形式の講座です。
Unity6対応・スマホ化対応の最新カリキュラムで、読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。
「何から始めればいいかわからない…」という初心者が最初に選ぶ一本として最適な講座です。
Unity6対応・スマホ化対応の最新カリキュラム
ゼロからでもRPGを完成させよう
→ スレスパ風デッキ構築JRPG講座を見てみる
初心者でもスマホ対応のRPGが作れる!まずは1本完成を目指そう!
Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!初心者でもスマホ化・広告実装まで対応した本格横スクロールACTが作れる!】

- ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
- 7ステージ+ラスボスステージの本格的なゲーム設計を初心者でも実現
- スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
- 敵AI15体・多彩なマップギミック・武器システムを完全実装
- 完全オリジナルゲームをアセット不使用で素材提供付きで制作
Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを、初心者でもゼロから開発できるようになる講座です。
全16回で当たり判定・物理挙動・敵AIの知識を実際のゲームコードとして実装する体験が詰め込まれています。スマホ化・広告実装まで対応しているため、「作って終わり」ではなくリリースまで見据えた実践スキルが身につきます。
「憧れのアクションゲームを自分の手で作ってみたい」という初心者に強くおすすめの一本です。
スマホ化・広告実装まで対応した本格横スクロールACT
初心者でもロックマン風2Dアクションをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
初心者でも本格ACTが完成する!広告収益まで視野に入れた実践スキルを手に入れよう!
ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

- ゼルダの伝説・モンハン・原神のような3Dアクションをゼロから開発
- 「3Dは難しそう」と感じている初心者でも取り組みやすい丁寧な解説構成
- スマホ化対応で実機で動かせるゲームが完成
- アセットを使った実践的なゲーム開発手法が身につく
- 画像・動画・全ソースコード公開の充実したサポート
ゼルダ風3Dアクションゲームの作り方講座は、「3Dゲームは難しそう…」と感じている初心者こそおすすめの入門講座です。
全16回の丁寧な解説で、ゼルダの伝説・モンハン・原神のような本格的な3Dアクションゲームを確実に完成まで導きます。スマホ化対応で実機で動かせるため、初めて3Dゲームを作り上げた達成感がひときわ大きい講座です。
「3Dゲームを自分でも作れるか試してみたい」という初心者の最初の一歩として最適です。
初心者でも3Dアクションがスマホ対応で完成する
ゼルダ風3Dアクションゲームで3D開発の壁を一気に突破しよう
→ ゼルダ風3Dアクションゲームの作り方講座を見てみる
全16回でスマホで動くオリジナル3Dゲームを完成させよう!
まとめ
Unityでキーボード入力を取得するには、旧方式ではInput.GetKeyとGetAxis、新方式ではInput ActionsとPlayer Inputを使います。
WASD移動は軸で読み、normalizedとTime.deltaTimeで自然な速さに調整するのが基本です。
今日はCubeかPlayerに移動スクリプトを付け、WASDで動くところまで試してみてください。
反応しないときはGameビューのフォーカスとInput設定を確認しましょう。
入力からゲーム完成まで学びたい方は、Unity入門の森の講座も参考になります。
移動・ジャンプ・当たり判定まで、操作の流れを作品の中で身につけられます。
まずは1キー、動いた瞬間を体験してみましょう。



コメント