🍣

【初心者向け】UnityでFPS移動を実装するコツと考え方

2024/12/28に公開

【初心者向け】Unity FPS移動を実装するコツと考え方

UnityでFPSゲームを作りたいのに「キャラクターの移動方法がわからない」という悩みを抱えていませんか。特に、プログラミング経験が浅い方や、3Dゲームそのものが初めての方にとっては、専門用語やコンポーネントの種類が多すぎて混乱しがちです。

本記事では、Unity初心者の学生や社会人の男性をターゲットに、FPS特有のプレイヤー移動をスムーズに実装する考え方やポイントを解説していきます。

たった5日でFPSゲームが作れる自分に変わる教材はこちら

https://zenn.dev/ryuryu_game/books/fd28de9d8e963a

なぜFPS移動がハードルになりやすいのか

  • 操作感がゲームの面白さに直結
    FPSはプレイヤー視点での移動・視点回転が要となるため、移動がぎこちないと途端につまらなくなってしまいます。

  • InputSystemの違いに戸惑う
    旧式のInput.GetAxisを使う方法と、新式のInputSystemを利用する方法が混在しており、初心者はどちらを学べばいいのか迷いがちです。

  • CharacterControllerかRigidbodyか
    衝突判定や重力をどう扱うかで選択が分かれます。慣れていないと、思った通りの挙動にならず「なぜかキャラクターが跳ね回ってしまう…」などのトラブルが発生しがちです。

  • 視点回転(カメラ制御)が複雑
    移動だけでなく、視点を360度自由に動かすFPS特有のカメラ操作は、他ジャンルよりもロジックが複雑化しがちです。

FPS移動の基本構造

1. 入力を受け取る

Inputの基本イメージ
  • Input.GetAxis("Horizontal")Input.GetAxis("Vertical") を使って数値を取得
  • 最新のInputSystemを使う場合は、アクションマッピングで同様の入力取得ができる
float h = Input.GetAxis("Horizontal"); // 左右キー
float v = Input.GetAxis("Vertical");   // 前後キー

ここで取得した値をもとに、キャラクターをどの方向に動かすかを決定します。

2. キャラクターを動かす

  • CharacterController

    • 物理演算を大きく活用しない場合はこちらがおすすめ
    • controller.Move()controller.SimpleMove()を使って移動ベクトルを適用する
  • Rigidbody

    • AddForce()velocityを直接操作
    • 物理挙動を重視するシューティングやアクションで活躍するが、慣れないと制御が難しい

3. カメラの回転を分離

FPSならではのポイントが、移動とカメラの視点回転を別々のロジックで扱うことです。1つのスクリプトに詰め込みすぎると混乱しがちなので、以下のように分割しましょう。

  • 移動スクリプト: 前後左右の移動や重力の設定を担当
  • カメラスクリプト: 上下左右の視点回転(いわゆるマウスルック)を担当

簡単なサンプルコード

以下はCharacterControllerを使った基礎例です。

PlayerMove
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float gravity = -9.8f;
    private CharacterController controller;
    private Vector3 velocity;
    private bool isGrounded;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        isGrounded = controller.isGrounded;
        if (isGrounded && velocity.y < 0)
        {
            // 接地している場合は落下速度をリセット
            velocity.y = -2f;
        }

        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        // ローカル座標をワールド座標に変換
        Vector3 moveDirection = transform.TransformDirection(new Vector3(h, 0, v)) * moveSpeed;
        controller.Move(moveDirection * Time.deltaTime);

        velocity.y += gravity * Time.deltaTime;
        controller.Move(velocity * Time.deltaTime);
    }
}
  • transform.TransformDirection
    • カメラやプレイヤーの向きに合わせて入力方向を調整
  • gravity
    • FPSといえどもキャラクターが地面にめり込んだり、浮いてしまわないように重力を適用

実装ステップで押さえるコツ

1. シーン準備

  • 新規3Dプロジェクトを作成し、カプセルやCubeなどを配置してプレイヤーとする
  • 3D空間が暗い場合はDirectional Lightの角度やIntensityを調整

2. コンポーネント確認

  • プレイヤーにCharacterControllerをアタッチ
  • PlayerMove.csのような移動スクリプトを追加しておく

3. 入力確認とテスト

  • Gameビューでプレイを実行し、WASDや矢印キーでキャラが動くかチェック
  • 動いたら速度や重力などの数値を変えて「操作感」を微調整

4. カメラ制御を追加

  • 別スクリプトで視点回転を管理し、マウス操作で360度を見渡せるようにする
  • 移動が混乱しない程度にマウス感度を設定し、プレイヤーが快適に操作できる視界にする

よくある疑問と対策

Q. なぜキャラクターが勝手に横滑りする?
A. 重力が適切に処理されていなかったり、RigidbodyCharacterControllerを併用してコンフリクトが起きている可能性があります。不要なコンポーネントを外し、重力計算を見直してみましょう。

Q. 移動がガクガクになるときは?
A. Time.deltaTimeを忘れていたり、物理演算とUpdate()が競合している場合があります。FixedUpdate()の利用も検討しつつ、一貫したタイミングで移動を処理しましょう。

Q. 視点を一度にX軸もY軸も回転させるとコードがわからなくなる…
A. まずは**縦回転(Y軸)と横回転(X軸)**を別々の変数で管理することをおすすめします。1つずつ実装すればバグの原因を特定しやすいです。

移動プログラムを成功させるためのロードマップ

  • 環境構築: Unity Hubのインストールと初期設定
  • キャラクター&カメラの配置: シーンを準備し、オブジェクトを設置
  • 入力取得→移動ベクトル作成: WASDやマウスの動きを数値化
  • Move()やAddForce()の適用: 実際に移動処理を行う
  • テストとデバッグ: 不自然な挙動がないかを確認し、修正
  • カメラ操作の追加: 視点回転を分けて管理
  • 操作感の微調整: 移動速度や重力、回転速度などを好きな数値に調整

最初の成功体験を手に入れる意義

一度でも「自分で動きをプログラムしてFPSキャラクターが動いた!」という成功体験があると、Unityでのゲーム制作が楽しくなります。次第に以下の要素も欲しくなるでしょう。

  • 敵のAIや当たり判定
  • 銃の発射・エフェクト
  • UIでの体力ゲージ・弾数表示
  • シンプルなステージ構成

こうした追加機能は、初期の移動プログラムが安定していればスムーズに組み込めます。基礎部分をしっかり押さえておくことで、エラーが起きても原因を絞り込みやすく、ゲーム開発が加速度的に進むのです。

まとめ:小さな一歩からFPS開発を始めよう

Unity初心者が最初にぶつかりやすい壁である「FPS移動」の実装ですが、シンプルなキャラクター移動&カメラ回転の仕組みを理解できれば、思いのほかスムーズに進みます。以下の流れで取り組むと挫折を減らせるでしょう。

  • 設計: Inputの取得方法や物理演算の要不要を決める
  • 実装: CharacterControllerかRigidbodyかを選んでコードを書く
  • 分業: カメラ回転用のスクリプトを分けて混乱を防ぐ
  • 調整: テストしながら移動速度やマウス感度を好みに合わせる

移動ができたら、あなたのゲームの可能性は一気に広がります。「攻撃システムを入れてみたい」「ステージギミックを追加したい」など、やりたいことが次々に浮かんできたら、もうUnityの世界にどっぷりハマっているサイン。あとはクリエイティブな発想を形にするだけです。

この記事を読んで「もっと実践したい!」と感じたあなたへ

Unity開発を効率よく進めるためには、実践的なスキルと仲間との交流が欠かせません。
そんな方におすすめのステップが、下記の3つです。

1. 有料教材「どこでもUnity教室」でゲーム制作を短期マスター

  • 5日でシンプルなFPS完成:初心者向けに要点を押さえたカリキュラム
  • C#や最新のInputSystem、FPS実装まで網羅:つまずきやすいポイントを先回りで解説
  • 購入特典:Discord招待+サンプルプロジェクトDLで、疑問や実装例を即確認

たった5日でFPSゲームが作れる自分に変わる教材はこちら

https://zenn.dev/ryuryu_game/books/fd28de9d8e963a

2. 無料コミュニティで、疑問をすぐに解消&モチベーションUP

  • 初心者~中級者までOK:学習進度に合わせて質問や情報共有
  • 質問サポートが充実:わからないことを仲間や講師に即相談
  • 学習仲間と切磋琢磨:一緒に学ぶから続けやすい

Discordサーバー参加はこちら

https://discord.gg/5FwuKCacNy

3. 実績豊富な“ゲーム開発所RYURYU”があなたをトータルサポート

  • コナラ総販売200件超:さまざまなUnity開発の依頼を対応
  • VR/AR/AIなど最新技術にも精通:幅広いノウハウを活かして開発支援
  • ゲームクリエイター甲子園や東京ゲームショウなど出展実績多数

ご相談・お問い合わせはこちら

https://coconala.com/users/1772507

Discussion