マリオのような横スクロールアクションゲームを作りたい。
でも、カメラの追従や画面スクロールの仕組みが分からない。
実は、基本的な仕組みを理解すれば、意外とシンプルに実装できます。
この記事では、横スクロールアクションの作り方を、ステージ構成からカメラ演出まで解説します。
✨ この記事でわかること
- 横スクロールアクションの基本構造
- カメラ追従の実装方法
- ステージ構成とギミックの作り方
- 敵配置と足場の設計

横スクロールアクションは、カメラの動きが命です。まずは基本の追従から実装していきましょう。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
横スクロールアクションの基本構造

横スクロールアクションには、次の要素が必要です。
- プレイヤーの左右移動とジャンプ
- カメラの追従(プレイヤーに合わせて動く)
- ステージの横方向への配置
- 足場と障害物
- 敵の配置と行動パターン
特に重要なのが、カメラの追従です。
例えば、プレイヤーだけが右に動いて、カメラが固定されたままだとどうなるでしょうか。
すぐに画面端にぶつかり、横スクロールゲームらしさは失われてしまいます。
プレイヤーの移動に合わせてカメラも動かすことで、画面全体が横に流れ、はじめて「横スクロールしている」感覚が生まれます。
カメラ追従の実装方法

カメラ追従は、カメラの位置をプレイヤーの位置に合わせることで実現します。
以下のスクリプトで、基本的な追従ができます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using UnityEngine; public class CameraFollow : MonoBehaviour { [SerializeField] private Transform target; [SerializeField] private float smoothSpeed = 0.125f; [SerializeField] private Vector3 offset; void LateUpdate() { Vector3 desiredPosition = target.position + offset; Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed); transform.position = smoothedPosition; } } |
このコードで、カメラが滑らかにプレイヤーを追います。
smoothSpeedの値を変えると、追従の速度が調整できます。
0.125fだと少し遅めなので、0.2fくらいから始めるのも良いでしょう。
また、Y軸の追従を制限したい場合は、以下のように修正します。
|
1 2 3 4 5 6 7 8 |
void LateUpdate() { Vector3 desiredPosition = target.position + offset; desiredPosition.y = transform.position.y; // Y軸は固定 Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed); transform.position = smoothedPosition; } |
これで、カメラは横方向のみ追従し、縦方向は固定されます。

カメラの追従は、ゲームの操作感に大きく影響します。実際に動かしながら、最適な値を探してみてください。
ステージ構成の作り方

ステージは、Tilemapを使って効率的に作ります。
横スクロールアクションでは、横方向に長いステージが必要です。
手順は次の通りです。
- Hierarchyで右クリック → 2D Object → Tilemap
- Tile Paletteウィンドウを開く(Window → 2D → Tile Palette)
- タイル画像をインポートして、パレットに追加
- 横方向に長く、足場を配置していく
足場の配置では、プレイヤーのジャンプ力を考慮します。
ジャンプで届かない距離に足場を置くと、ゲームが進められなくなります。
また、足場には必ずCollider2Dを追加してください。
プレイヤーが乗れるように、BoxCollider2Dを設定します。
ギミックの実装方法

横スクロールアクションには、様々なギミックがあります。
代表的なものをいくつか紹介します。
落下床の実装
プレイヤーが乗ると、一定時間後に落下する床です。
以下のコードで実装できます。
|
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 |
using UnityEngine; public class FallingPlatform : MonoBehaviour { [SerializeField] private float fallDelay = 1f; [SerializeField] private float fallSpeed = 5f; private bool isFalling = false; private Rigidbody2D rb; void Start() { rb = GetComponent<Rigidbody2D>(); rb.isKinematic = true; } void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.CompareTag("Player") && !isFalling) { Invoke("StartFalling", fallDelay); } } void StartFalling() { isFalling = true; rb.isKinematic = false; rb.velocity = new Vector2(0, -fallSpeed); } } |
このコードで、プレイヤーが乗って1秒後に落下します。
fallDelayの値を変えると、落下までの時間が調整できます。
移動床の実装
左右に動く床です。
以下のコードで実装できます。
|
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 |
using UnityEngine; public class MovingPlatform : MonoBehaviour { [SerializeField] private float moveSpeed = 2f; [SerializeField] private float moveDistance = 3f; private Vector3 startPosition; private bool movingRight = true; void Start() { startPosition = transform.position; } void Update() { if (movingRight) { transform.Translate(Vector3.right * moveSpeed * Time.deltaTime); if (transform.position.x >= startPosition.x + moveDistance) { movingRight = false; } } else { transform.Translate(Vector3.left * moveSpeed * Time.deltaTime); if (transform.position.x <= startPosition.x - moveDistance) { movingRight = true; } } } } |
このコードで、床が左右に往復します。
moveSpeedとmoveDistanceの値を変えると、動きが調整できます。
敵配置と行動パターン

横スクロールアクションでは、敵の配置が重要です。
プレイヤーの進行を妨げるように配置しますが、難しすぎないように調整します。
基本的な敵の行動パターンは、次の通りです。
- パトロール(左右に往復)
- 待機(一定時間停止してから行動)
- 追尾(プレイヤーを追いかける)
最初は、シンプルなパトロールから始めましょう。
敵が左右に往復するだけで、ゲームらしさが出ます。
さらに高度な行動として、プレイヤーを追尾する機能も追加できます。
⚠️ 敵配置の注意点
- 敵を配置しすぎると、難しくなりすぎる
- プレイヤーのジャンプ力で回避できる位置に配置する
- 最初のステージは簡単に、徐々に難易度を上げる
カメラ演出のテクニック

カメラ演出を工夫すると、ゲームがより魅力的になります。
代表的なテクニックをいくつか紹介します。
カメラの境界設定
カメラが動ける範囲を制限します。
これにより、ステージの端でカメラが止まります。
|
1 2 3 4 5 6 7 8 9 10 11 |
[SerializeField] private float minX = 0f; [SerializeField] private float maxX = 100f; void LateUpdate() { Vector3 desiredPosition = target.position + offset; desiredPosition.x = Mathf.Clamp(desiredPosition.x, minX, maxX); Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed); transform.position = smoothedPosition; } |
これで、カメラはminXからmaxXの範囲内でしか動きません。
カメラの揺れ防止
プレイヤーがジャンプする際、カメラが上下に揺れないようにします。
Y軸の追従を制限することで、揺れを防げます。
先ほど紹介したコードで、Y軸を固定する方法が有効です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
実践的な横スクロールアクション制作を学ぶには

ここまで、横スクロールアクションの基本要素を解説してきました。
ただし、実際のゲーム制作では、さらに多くの要素が必要になります。
背景のスクロール、エフェクト、UI、サウンドなど、全体を体系的に学ぶには、専門の講座が効率的です。
Unity入門の森では、横スクロールアクションの作り方を、基礎から完成まで丁寧に解説しています。
コードの意味から、なぜその実装方法を選ぶのかまで、しっかり理解できる内容になっています。
横スクロールアクション制作に特化した講座なら、効率的にスキルアップできます。
ゲーム制作でスキルを上げたい方は、ぜひチェックしてみてください。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
まとめ

横スクロールアクションの作り方を解説しました。
要点のまとめ
- カメラ追従が横スクロールの核心
- Tilemapを使うと、ステージ作成が効率的
- ギミックは、落下床や移動床から始める
- 敵配置は、難易度を考慮して調整する
基本を押さえれば、あとは応用していくだけです。
まずは、ここで紹介したコードを実際に動かしてみてください。
動かしながら理解を深めていくのが、上達への近道です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント