初心者必見!現場レベルの「ゲーム制作講座PDF」を無料プレゼント中!▶

Unityでキーボード入力を取得 | WASDとKeyCode

Unity 入門・始め方

「キャラを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対応)

Unity6対応・スマホ化対応の最新カリキュラム。「何から始めればいいかわからない」という初心者でも、ステップごとに手を動かすだけでRPGが完成します。

講座を見てみる \ゼロからでもスマホ対応RPGが作れる!/

憧れのアクションゲームに挑戦

Unity 2Dアクションゲーム
の作り方講座(ロックマン風)

★★★★★ (スマホ化・広告実装)

初心者でもロックマン風の横スクロールACTが作れる講座。7ステージ+ラスボスという本格構成で、スマホ化・広告実装まで対応。「自分のゲームをリリースしたい」夢を叶えます。

講座を見てみる \初心者でも本格ACTが完成する!/

3Dゲーム開発の入口はここ

ゼルダ風3Dアクションゲーム
の作り方講座

★★★★★ (スマホ化対応)

「3Dゲームって難しそう…」と感じている初心者向けの講座。全16回でゼルダ風3Dアクションがスマホ対応で作れるようになります。3D開発の基礎がしっかり身につきます。

講座を見てみる \初心者でも全16回で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にアタッチします。
  • STEP2
    GetAxisで入力を取得

    HorizontalとVerticalから-1〜1の値を読みます。
  • STEP3
    移動量を計算

    方向ベクトルに速度とTime.deltaTimeを掛けます。
  • STEP4
    Playで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をスマホ向けに作れる!】

Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築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が作れる!】

Unity 2Dアクションゲームの作り方講座(ロックマン風)

  • ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
  • 7ステージ+ラスボスステージの本格的なゲーム設計を初心者でも実現
  • スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
  • 敵AI15体・多彩なマップギミック・武器システムを完全実装
  • 完全オリジナルゲームをアセット不使用で素材提供付きで制作

Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを、初心者でもゼロから開発できるようになる講座です。

全16回で当たり判定・物理挙動・敵AIの知識を実際のゲームコードとして実装する体験が詰め込まれています。スマホ化・広告実装まで対応しているため、「作って終わり」ではなくリリースまで見据えた実践スキルが身につきます。

「憧れのアクションゲームを自分の手で作ってみたい」という初心者に強くおすすめの一本です。

スマホ化・広告実装まで対応した本格横スクロールACT
初心者でもロックマン風2Dアクションをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
初心者でも本格ACTが完成する!広告収益まで視野に入れた実践スキルを手に入れよう!

ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

ゼルダ風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キー、動いた瞬間を体験してみましょう。

コメント

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