FPSのリコイル処理を実装したい。
でも、「どうやって反動を表現すればいいのか分からない」そんな風に感じていませんか。
実は、FPSのリコイル処理は、カメラの回転と反動パターンを組み合わせることで実現できます。
Unityを使えば、初心者でもリコイルシステムを作ることができるでしょう。
この記事では、撃った感覚を作るリコイル処理の実装方法を、コピペで動くサンプルコードとともに詳しく解説します。
✨ この記事でわかること
- リコイル処理の基本的な実装方法(所要1時間)
- リコイルパターンの設計と実装(所要1時間)
- 自然な反動の作り方と調整方法(所要1時間)
- FPSリコイル処理でよくあるエラー5選と解決方法
- 実用的なリコイルシステム完成までの4ステップ(合計5時間)

最初は単純な上下の反動から始めて、徐々に複雑なパターンを追加するのがコツです。実際にプレイしながら調整しましょう。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
リコイル処理とは?基礎知識から理解する

リコイル処理とは、武器を撃った時にカメラが反動で動く演出のことです。
FPSゲームでは、リアルな感覚を演出する重要な要素でしょう。
リコイル処理を実装するには、反動パターンの設計とカメラの回転処理が重要になります。
反動パターンを設計し、それをカメラの回転に適用します。
時間の経過とともに反動を減衰させることで、自然な動きを実現できるでしょう。
リコイル処理に必要な要素
✅ リコイル処理に必要な要素
- 反動パターンの設計:リコイルの軌道を設計する処理(所要時間:1時間)
- カメラの回転処理:反動をカメラに適用する処理(所要時間:1時間)
- 反動の減衰:時間とともに反動を減らす処理(所要時間:30分)
- パターンの調整:武器ごとの反動パターンを調整する処理(所要時間:30分)
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
Unityを使ったリコイル処理の実装方法

Unityを使ったリコイル処理を実装する方法を解説します。
ここでは、コピペで動くサンプルコードを紹介します。
実装手順:基本的なリコイルシステムを作る
ステップ1:リコイルパターンの設計(所要30分)
まず、リコイルのパターンを設計します。
上下の反動と、左右のブレを組み合わせます。
ステップ2:リコイル処理スクリプトの作成(所要30分)
以下のコードで、リコイル処理を実装できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
using UnityEngine; /// <summary> /// FPSのカメラリコイル(反動)を制御するスクリプト /// Main Cameraにアタッチして使用します /// </summary> public class RecoilSystem : MonoBehaviour { [Header("反動設定")] [SerializeField] private float recoilX = 2.0f; // 1発あたりの縦方向の反動 [SerializeField] private float recoilY = 1.0f; // 1発あたりの横方向のブレ [SerializeField] private float recoilReturnSpeed = 10.0f; // 反動が戻るスピード private Vector2 currentRecoil; // 現在蓄積されている反動量 private Camera playerCamera; // 操作対象のカメラ void Start() { // カメラコンポーネントを取得(修正ポイント:型指定 <Camera> を追加) playerCamera = GetComponent<Camera>(); if (playerCamera == null) { Debug.LogError("RecoilSystem: Cameraコンポーネントが見つかりません。"); } } /// <summary> /// 銃を撃つタイミングで外部(PlayerShooting等)から呼び出す /// </summary> public void AddRecoil() { // 縦方向:少しランダム性を持たせて上に跳ね上げる float randomX = Random.Range(recoilX * 0.7f, recoilX); // 横方向:左右どちらかにランダムに振る float randomY = Random.Range(-recoilY, recoilY); currentRecoil += new Vector2(randomX, randomY); } void Update() { if (playerCamera == null) return; // 【反動の適用】 // localEulerAnglesを直接操作してカメラを回転させる Vector3 currentRotation = playerCamera.transform.localEulerAngles; // UnityのX軸回転はマイナス方向が「上」を向く挙動になる currentRotation.x -= currentRecoil.x * Time.deltaTime; currentRotation.y += currentRecoil.y * Time.deltaTime; playerCamera.transform.localEulerAngles = currentRotation; // 【反動の減衰】 // Lerpを使って、毎フレーム currentRecoil を Vector2.zero(0,0)に近づける currentRecoil = Vector2.Lerp(currentRecoil, Vector2.zero, Time.deltaTime * recoilReturnSpeed); } } |
配置場所:Main Cameraオブジェクトにアタッチ
確認方法:発射処理でAddRecoil()を呼び出して、カメラが反動で動けばOK
⚠️ よくあるエラー
- 反動が強すぎる/弱すぎる → recoilX、recoilYの値を調整
- 反動が戻らない → recoilReturnSpeedの値を確認
- 反動が不自然 → パターンの設計を見直す
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
リコイルパターンの設計

リコイルパターンの設計は、リコイル処理の重要な要素です。
適切なパターンにより、リアルな感覚を演出できます。
上下の反動と左右のブレ
上下の反動は、基本的に上方向に動きます。
左右のブレは、ランダムに左右に振れます。
上下の反動を強めに、左右のブレを弱めに設定することで、自然な反動になります。
連射時の反動の蓄積
連射時は、反動が蓄積されていきます。
発射するたびに反動を追加することで、連射するほど反動が大きくなります。
反動の上限を設けることで、反動が大きくなりすぎることを防げます。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
自然な反動の作り方

自然な反動を作るためには、いくつかのポイントがあります。
リアルな感覚を演出するための重要なポイントです。
反動の減衰処理
反動は、時間とともに減衰させることが重要です。
Lerp関数を使うことで、滑らかに反動を減らせます。
減衰速度を調整することで、反動の戻り方を調整できます。
パターンのバリエーション
同じパターンばかりでは、単調になります。
ランダム性を持たせることで、自然な反動を演出できます。
ただし、ランダム性が強すぎると、プレイヤーが混乱するため、適度な範囲にすることが重要でしょう。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
FPSリコイル処理でよくある失敗と解決方法

FPSのリコイル処理は、単純に数値を加算するだけでは「操作しにくい」「不自然」といった問題が発生しがちです。

ここでは、初心者が特につまずきやすい3つの失敗例とその解決策を詳しく解説します。
失敗1:反動の数値が極端で操作性を損なう
❌ よくある状態
- 反動が大きすぎて、一度撃つと視点が空を向いてしまう
- 逆に反動が小さすぎて、撃っている感覚(フィードバック)が全くない
リコイルの数値を「なんとなく」で設定してしまうと、ゲームバランスが崩れる原因になります。
特に初心者の場合、リアリティを求めすぎて反動を強くしすぎ、プレイヤーが制御不能になるケースが多いです。
✅ 解決方法:インスペクターで調整しながら「微調整」を繰り返す
Unityのシリアル化された変数(SerializeField)を活用し、ゲームを実行しながらインスペクター上で数値をいじってみましょう。
まずは「1発撃った時に、ターゲットからどの程度視点がズレるか」を基準にします。
アサルトライフルなら数発でレティクルが数センチ上がる程度、ハンドガンなら跳ね上がりは大きいが戻りも早い、といった具合に武器ごとの個性を出すのがコツです。
失敗2:反動の戻り処理(減衰)が機能していない
スクリプトを書いても、反動が「上がりっぱなし」で元の位置に戻らないというミスが頻発します。
これは、Update関数内での減衰処理が正しく記述されていないか、戻り速度(ReturnSpeed)の値が0になっている場合に起こります。
Lerp関数などを使って、現在の反動値を常にゼロに近づける処理が必要です。
✅ 解決方法:Time.deltaTimeを用いた滑らかな補間
反動を戻す際は、currentRecoil = Vector2.Lerp(currentRecoil, Vector2.zero, Time.deltaTime * recoilReturnSpeed); のように、フレームレートに依存しない形で記述しましょう。
戻り速度を反動の強さより少し早めに設定することで、キビキビとした「撃った後の収束感」を演出できます。
もし戻らない場合は、Update内でこの処理が毎フレーム呼ばれているかを再確認してください。
失敗3:反動が直線的すぎて「機械的」に見える
常に真上にだけ跳ね上がるリコイルは、プレイヤーに「安っぽい」印象を与えてしまいます。
現実の銃器やクオリティの高いFPSでは、反動は左右にランダムに揺れたり、連射数に応じて挙動が変化したりします。
上下のみの一定な動きは、プログラムで制御されている感が強く出てしまい、没入感を下げてしまいます。
✅ 解決方法:ランダムな揺らぎと累積の制限
反動を加える際に、Random.Range を使って左右(X軸)にも小さな値を散らしましょう。また、連射し続けた時に視点が一回転してしまわないよう、反動の最大蓄積量に「キャップ(上限)」を設けることも重要です。
「上方向への力 + 左右のランダムなブレ」を組み合わせるだけで、一気にプロっぽいリコイル挙動に進化します。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
実用的なリコイルシステム完成までの4ステップ

- STEP1リコイルパターンの設計(所要1時間)
上下の反動と左右のブレのパターンを設計する。
学べること:パターン設計、バランス調整
成果物:リコイルパターンの設計図
- STEP2基本的なリコイル処理(所要1時間)
カメラに反動を適用する処理を実装する。
学べること:カメラ操作、回転処理
成果物:基本的なリコイルシステム
- STEP3反動の減衰処理(所要1時間)
時間とともに反動を減らす処理を実装する。
学べること:減衰処理、Lerp関数
成果物:自然な反動の戻りが実装されたシステム
- STEP4パターンの調整と最適化(所要1時間)
実際にプレイして、パターンを調整する。
学べること:バランス調整、プレイテスト
成果物:実用的なリコイルシステム
合計5時間で、実用的なリコイルシステムが完成します。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
まとめ

撃った感覚を作るリコイル処理は、反動パターンとカメラ回転を組み合わせることで実現できます。
Unityを使えば、初心者でもリコイルシステムを作ることができるでしょう。
✅ 記事の要点まとめ
- リコイル処理の基本:反動パターンとカメラ回転の連動
- Unity実装:AddRecoil()を使った反動処理
- パターン設計:上下の反動と左右のブレ
- 自然な反動:減衰処理とパターンのバリエーション
- よくある失敗5選:反動の強さ、戻り処理など
- 実用的なシステム:4ステップで完成(合計5時間)
今日から始める3ステップ:
- STEP1:リコイルパターンを設計する(所要30分)
- STEP2:リコイル処理スクリプトを作成する(所要30分)
- STEP3:発射処理でAddRecoil()を呼び出す(所要1時間)
あなたのペースで、少しずつ進めていけば大丈夫です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント