【初心者向け】UnityでFPS移動を実装するコツと考え方
【初心者向け】Unity FPS移動を実装するコツと考え方
UnityでFPSゲームを作りたいのに「キャラクターの移動方法がわからない」という悩みを抱えていませんか。特に、プログラミング経験が浅い方や、3Dゲームそのものが初めての方にとっては、専門用語やコンポーネントの種類が多すぎて混乱しがちです。
本記事では、Unity初心者の学生や社会人の男性をターゲットに、FPS特有のプレイヤー移動をスムーズに実装する考え方やポイントを解説していきます。
たった5日でFPSゲームが作れる自分に変わる教材はこちら
なぜ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
を使った基礎例です。
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. 重力が適切に処理されていなかったり、Rigidbody
とCharacterController
を併用してコンフリクトが起きている可能性があります。不要なコンポーネントを外し、重力計算を見直してみましょう。
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ゲームが作れる自分に変わる教材はこちら
2. 無料コミュニティで、疑問をすぐに解消&モチベーションUP
- 初心者~中級者までOK:学習進度に合わせて質問や情報共有
- 質問サポートが充実:わからないことを仲間や講師に即相談
- 学習仲間と切磋琢磨:一緒に学ぶから続けやすい
Discordサーバー参加はこちら
3. 実績豊富な“ゲーム開発所RYURYU”があなたをトータルサポート
- コナラ総販売200件超:さまざまなUnity開発の依頼を対応
- VR/AR/AIなど最新技術にも精通:幅広いノウハウを活かして開発支援
- ゲームクリエイター甲子園や東京ゲームショウなど出展実績多数
ご相談・お問い合わせはこちら
Discussion