1. はじめに
みなさん、こんにちは!今回は Unityで2D無限ランアクションゲーム を作る方法を紹介します。
「無限ランゲーム」とは、プレイヤーが自動で走り続け、障害物を避けながら進んでいくシンプルながらも楽しいゲームです。
「Temple Run」や「Flappy Bird」のように、反射神経を試すゲームジャンルとして人気があります。
この記事では、Unityの2D Tilemap機能やアニメーションを使いながら、基本的な無限ランゲームの仕組みを作っていきます!
スクリプトもシンプルにするので、初心者でも安心して作れますよ。
使用するアセット
今回のプロジェクトでは、Unity Asset Store にある 「Sunny Land」 を使います。
このアセットには可愛いドット絵のキャラクターや背景、アニメーションが含まれているので、初心者でもすぐにゲームが作れます!
ゲームの基本仕様
今回作る無限ランゲームの基本仕様は以下の通りです:
- プレイヤーは自動で前に進む
- スペースキーを押すとジャンプできる
- 地面に接触しているときだけジャンプ可能
- 障害物に当たるとゲームオーバー
- シンプルなアニメーション(走る・ジャンプ・落下)を実装
このように、基本的な仕組みを押さえながらゲームを作っていきます。
さっそく、地面の配置から始めていきましょう! 🚀
Unityを使えば2D無限ランアクションゲームを簡単に作ることができます。
この記事では一から作る方法を解説しますが、「もっと手軽に無限ランゲームを作りたい!」という方には、2D+3D Infinite Runner Engine という便利なアセットもあります!
2. 床(地面)の配置
無限ランアクションゲームでは、プレイヤーが走るための床(地面)を作成する必要があります。Unityでは Tilemap を使うことで、広範囲の地面を簡単に配置できます。ここでは、Tilemapを使って地面を設置し、プレイヤーが正しく動作するための設定を行います。
1. Tilemapを使って床を作成する
まず、Unityの Tilemap 機能を使って、床となるオブジェクトを作成します。
① Tilemapを作成する
- ヒエラルキー(Hierarchy)ウィンドウ で 右クリック し、
2D Object→Tilemap→Rectangularを選択。 - ヒエラルキーウィンドウ に
Gridオブジェクトが作成され、その子オブジェクトとしてTilemapが追加される。 Tilemapの名前をFloorに変更。
② Tilemapにタイルを配置する
- Tile Palette ウィンドウ を開く。(
Window→2D→Tile Palette) Create New Paletteをクリックし、新しいタイルパレットを作成。- アセットストアからダウンロードした「Sunny Land」アセット のタイルをTile Paletteにドラッグ&ドロップ。
- Tilemapエディタ(Brush Tool) を使って、シーン上にタイルを敷き詰める。

2. タグとレイヤーの設定
プレイヤーが床と接触する処理を行うために、Floor に専用の タグ と レイヤー を設定します。

① タグの作成
Floorを選択し、インスペクター(Inspector)ウィンドウ でTagをクリック。Add Tag...を選択し、+ボタンをクリック。- 新しいタグ
Floorを追加し、Floorオブジェクトに適用。
② レイヤーの作成
Layerをクリックし、Add Layer...を選択。User LayerにFloorを追加し、Floorオブジェクトに適用。
3. 床に当たり判定を付ける
プレイヤーが床の上を走れるようにするため、Floor にコライダーを設定します。
① Tilemap Collider 2D の追加
Floorを選択。- インスペクター の
Add Componentをクリック。 Tilemap Collider 2Dを追加。
② Composite Collider 2D の追加
タイルの継ぎ目がバラバラにならないように、Composite Collider 2D を追加します。
FloorにComposite Collider 2Dを追加。Tilemap Collider 2Dの Used by Composite にチェックを入れる。
③ Rigidbody 2D の設定
Composite Collider 2D を使用すると、自動で Rigidbody 2D が追加されます。物理的な影響を受けないように、以下の設定を変更します。
- Gravity Scale を
0に変更。 - Body Type を
Kinematicに設定。
4. ここまでのまとめ
✅ Tilemap を使って床を作成した
✅ Tile Palette でタイルを配置した
✅ Floor の タグ と レイヤー を設定した
✅ Tilemap Collider 2D と Composite Collider 2D で当たり判定を追加した
✅ Rigidbody 2D の設定を変更し、重力の影響を無効化した
より多彩な地形を作りたい場合は、2D Retro Pixel Art Platformer Pack に含まれるTilemap素材を活用すると、よりレトロな雰囲気のランゲームを作れます!
👉 アセットをチェック

これでプレイヤーが正しく床の上を走れる状態になりました!次は、プレイヤーキャラを配置して、動く仕組みを作っていきましょう! 🚀
3. プレイヤーキャラの配置
無限ランアクションゲームの主役となる プレイヤーキャラクター を配置し、適切な設定を行います。
ここでは Sunny Land のキャラクターを使い、アニメーションの適用や当たり判定の設定を進めていきます。
1. プレイヤーのスプライトを配置する
まず、Sunny Landアセット に含まれているキャラクターを シーン に追加します。
① キャラクター画像を配置
- プロジェクトウィンドウ で
Sunny LandのRunフォルダを開く。 player-run-1.pngを ヒエラルキーウィンドウ(Hierarchy) にドラッグ&ドロップ。player-run-1を Player にリネーム。

② キャラクターの位置を調整
- シーンビュー(Scene) で
Playerを選択し、床の上 に配置。 - インスペクター(Inspector) の
TransformでPositionを(0, 0, 0)に設定。
2. タグとレイヤーの設定
プレイヤーを他のオブジェクトと区別しやすくするために、タグ と レイヤー を設定します。

① タグを作成
Playerを選択し、インスペクター(Inspector) でTagをクリック。Add Tag...を選択し、+ボタンをクリック。- 新しいタグ
Playerを作成し、Playerに適用。
② レイヤーを作成
Layerをクリックし、Add Layer...を選択。User LayerにPlayerを追加し、Playerに適用。
3. プレイヤーのアニメーションを設定
Sunny Landにはすでに 走るアニメーション が用意されているので、すぐに適用できます。

① Animatorコンポーネントを追加
Playerを選択し、インスペクター のAdd ComponentでAnimatorを追加。- プロジェクトウィンドウ の
Animatorフォルダを開く。 player-run-1.controllerをPlayerのAnimatorに ドラッグ&ドロップ。
4. プレイヤーの当たり判定を設定
ゲーム中に地面や障害物と正しく衝突するように Collider を設定します。
① Circle Collider 2D を追加
Playerを選択し、Add ComponentからCircle Collider 2Dを追加。- 半径(Radius) をキャラのサイズに合わせて調整。
- Is Trigger にチェックを入れる(※後で変更の可能性あり)。
5. ここまでのまとめ
✅ Sunny Land のキャラクターを配置した
✅ Player の タグ と レイヤー を設定した
✅ Animator を追加して、走るアニメーション を適用した
✅ Circle Collider 2D で 当たり判定 を追加した

これでプレイヤーキャラの基本設定が完了しました!次は プレイヤーのアニメーション(ジャンプ・落下) を設定していきます! 🚀
4. プレイヤーのアニメーション
プレイヤーキャラクターのアニメーションを設定して、ジャンプや落下の動きを自然に見せるようにします。ここでは、Animatorの設定を行い、ジャンプや落下のアニメーションが適切に切り替わるようにします。
① ジャンプと落下のアニメーションを作成する
まず、Sunny Landのアセットに含まれている「Jump」フォルダの画像を使って、新しいアニメーションを作成します。
- プロジェクトウィンドウで「jump」フォルダを開く
- 1枚の画像を選択し、ヒエラルキーの「Player」にドラッグ&ドロップ
- アニメーションウィンドウを開く(Window → Animation → Animation)
- 新しいアニメーションクリップを作成
- Animationウィンドウの左上にある「Create」ボタンを押す
Jump.animという名前を付けて保存
- アニメーションを作成
- 追加したジャンプ用の画像をアニメーションのフレームに設定
- 保存して完了
同じ手順で「Fall.anim」(落下アニメーション)も作成しておきましょう。
② Animatorの設定
次に、Animatorウィンドウでジャンプや落下のアニメーションが適切に切り替わるように設定します。
- Animatorウィンドウを開く(Window → Animation → Animator)
- Animatorにアニメーションを追加
- 既に設定されている「Run」アニメーションの横に、作成した「Jump」と「Fall」のアニメーションをドラッグ&ドロップで配置
- パラメータの追加
- Animatorウィンドウ内で「Parameters」タブを開く
- 「+」ボタンを押して以下のパラメータを追加
Jump(Float)Run(Bool)
③ アニメーションの遷移を設定
ジャンプや落下のアニメーションがスムーズに切り替わるように、遷移(トランジション)を設定します。

- 「Run」から「Jump」へ遷移を作成
- 「Run」アニメーションを右クリック → 「Make Transition」
- 矢印を「Jump」アニメーションへつなげる
- 作成した矢印をクリックしてInspectorを開く
Has Exit Timeのチェックを外すTransition Durationを0にするConditionsをJump > 0.8に設定(プレイヤーのY速度が0.8より大きいとき)
- 「Run」から「Fall」へ遷移を作成
- 「Run」アニメーションを右クリック → 「Make Transition」
- 矢印を「Fall」アニメーションへつなげる
- 作成した矢印をクリックしてInspectorを開く
Has Exit Timeのチェックを外すTransition Durationを0にするConditionsをJump < 0.8に設定(プレイヤーのY速度が0.8より小さいとき)

この設定によって、プレイヤーがジャンプすると自動的に「Jump」アニメーションに切り替わり、落下し始めると「Fall」アニメーションに遷移するようになります。
次のステップでは、これらのアニメーションをスクリプトで制御していきます!
5. プレイヤーの移動スクリプト
無限ランアクションゲームでは、プレイヤーキャラクターが自動で前に進むようにする必要があります。さらに、スペースキーを押したときにジャンプし、地面に着地したら再びジャンプできるようにします。これらの動きをスクリプトで実装していきます。
PlayerMoveスクリプトの作成
まず、プレイヤーの移動を制御するC#スクリプトを作成します。
スクリプト作成手順
- プロジェクトウィンドウを右クリック
- **「Create」→「C# Script」**を選択
- スクリプトの名前を 「PlayerMove」 に変更
作成した PlayerMove スクリプトを プレイヤーオブジェクト にアタッチしておきましょう。
スクリプトの実装
スクリプトを開き、以下のコードを入力してください。
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
// 移動速度とジャンプ力
[SerializeField] private float moveSpeed = 5f;
[SerializeField] private float jumpForce = 5f;
// Rigidbody2Dコンポーネント
private Rigidbody2D rb;
// 地面にいるか判定
private bool isJumping;
private void Awake()
{
rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
Jump();
}
private void FixedUpdate()
{
MovePlayer();
}
// プレイヤーを自動的に前進させる
private void MovePlayer()
{
rb.velocity = new Vector2(moveSpeed, rb.velocity.y);
}
// ジャンプ処理
private void Jump()
{
if (Input.GetKeyDown(KeyCode.Space) && !isJumping)
{
isJumping = true;
rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
}
}
// 地面との接触を検出する
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Floor"))
{
isJumping = false;
}
}
}
コードの解説
MovePlayer()FixedUpdate()内で呼び出され、常に前進するようにrb.velocityを設定しています。Vector2(moveSpeed, rb.velocity.y)にすることで、Y方向の速度を維持しながら、X方向に移動できます。
Jump()Update()内でJump()を呼び出して、スペースキーが押されたらジャンプするようにしています。isJumping変数を使って 地面にいるときだけ ジャンプできるように制御します。
OnCollisionEnter2D()- プレイヤーが
Floorというタグがついたオブジェクトに接触したら、isJumpingをfalseにして、再びジャンプできるようにします。
- プレイヤーが
スクリプトを適用する
PlayerMoveスクリプトを プレイヤーオブジェクトにドラッグ&ドロップ してアタッチします。moveSpeedとjumpForceの値を調整して、適切な速度で移動・ジャンプできるようにしましょう。moveSpeed = 5くらいがちょうどよいです。jumpForce = 5くらいで、適度なジャンプができます。
動作確認
- プレイヤーが 自動で前進 しているか
- スペースキーを押したらジャンプ するか
- 地面に接触すると再びジャンプ可能 になるか
もし動作が意図した通りでない場合、スクリプトの isJumping の判定や CompareTag("Floor") が正しく設定されているか確認してみてください。

これでプレイヤーの基本的な動作(前進&ジャンプ)が完成しました!次は、ジャンプアニメーションの設定を行い、よりゲームらしく仕上げていきます。
6. ジャンプアニメーションのスクリプト
プレイヤーがジャンプしたとき、適切なアニメーションを再生するようにスクリプトを作成します。今回はPlayerAnimationスクリプトを作成し、Animatorと連携してアニメーションを制御します。その後、PlayerMoveスクリプトにアニメーションの処理を追加します。
① PlayerAnimationスクリプトの作成
まず、アニメーションを制御するためのスクリプトを作成します。
スクリプトの作成
プロジェクトウィンドウを右クリック → 「Create」 → 「C# Script」 を選択し、スクリプトの名前を PlayerAnimation にします。
作成したスクリプトをプレイヤーのオブジェクトにアタッチしてください。
スクリプトの記述
作成した PlayerAnimation.cs を開き、以下のコードを入力してください。
using UnityEngine;
public class PlayerAnimation : MonoBehaviour
{
private Animator animator;
private void Awake()
{
animator = GetComponent<Animator>();
}
// ジャンプ時のアニメーション処理
public void PlayJump(float velY)
{
animator.SetFloat("Jump", velY);
}
// 走るアニメーションの処理
public void Running(bool running)
{
animator.SetBool("Run", running);
}
}
コードの説明
Awake()メソッドでAnimatorコンポーネントを取得します。PlayJump(float velY)メソッドでは、JumpというパラメーターにプレイヤーのY軸の速度を設定します。
→ Y軸の速度が大きいと「ジャンプ」状態、小さいと「落下」状態になります。Running(bool running)メソッドでは、Runというパラメーターをtrueまたはfalseに設定し、走るアニメーションを制御します。
② PlayerMoveスクリプトにアニメーション処理を追加
次に、プレイヤーの移動処理を行う PlayerMove スクリプトにアニメーション処理を追加します。
PlayerMoveスクリプトの修正
すでに作成した PlayerMove.cs を開き、以下のコードを追加してください。
private PlayerAnimation playerAnimation;
private void Awake()
{
rb = GetComponent<Rigidbody2D>();
playerAnimation = GetComponent<PlayerAnimation>(); // 追加
}
private void FixedUpdate()
{
MovePlayer();
AnimatePlayer(); // 追加
}
// アニメーションを制御するメソッドを追加
private void AnimatePlayer()
{
playerAnimation.PlayJump(rb.velocity.y);
playerAnimation.Running(!isJumping);
}
コードの説明
PlayerAnimation型の変数playerAnimationを追加。Awake()メソッドでGetComponent<PlayerAnimation>()を使い、PlayerAnimationスクリプトを取得。FixedUpdate()内でAnimatePlayer()を呼び出し、プレイヤーの移動ごとにアニメーションを更新。AnimatePlayer()メソッドで、- ジャンプアニメーションの制御 (
PlayJump()) - 走るアニメーションの制御 (
Running())
- ジャンプアニメーションの制御 (
まとめ
これで、プレイヤーがジャンプした際に適切なアニメーションが再生されるようになりました。
PlayerAnimationスクリプト →Animatorを制御PlayerMoveスクリプト → アニメーションの更新処理を追加- Animatorでの設定 →
Jump&Runのパラメーターでアニメーションを制御

次のステップでは、障害物の生成を実装し、プレイヤーと障害物の当たり判定を設定していきましょう!
7. 障害物の生成
無限ランゲームでは、プレイヤーが障害物を避けながら進むのが醍醐味です。ここでは、障害物を定期的に生成し、当たり判定を設定する方法を解説します。
① 障害物のプレハブ化
まず、障害物となるオブジェクトを作成し、それをプレハブ化します。
1. オブジェクトの配置
- ヒエラルキー(Hierarchy)ウィンドウで 「右クリック」 → 「2D Object」 → 「Sprite」 を選択し、新しいオブジェクトを作成します。
- インスペクター(Inspector)ウィンドウで「名前をObstacle」に変更 します。
- Sprite Renderer の「Sprite」に障害物用の画像を設定します(アセットに含まれるオブジェクトを使用可能)。
- TransformのScale(大きさ)を調整 し、適切なサイズに変更します。
2. 当たり判定(Collider)の設定
- 「Add Component」ボタンをクリック して Box Collider 2D を追加します。
- 「Is Trigger」にチェックを入れます(プレイヤーが接触したときにイベントを発生させるため)。
- 「Rigidbody 2D」を追加し、以下の設定を行います。
- Body Type:Kinematic
- Gravity Scale:0(重力を受けないようにする)
- Collision Detection:Continuous(衝突判定を精密にする)
3. プレハブ化
- ヒエラルキーのObstacleオブジェクトをプロジェクト(Project)ウィンドウにドラッグ&ドロップ してプレハブ化します。
- プレハブ化したら、ヒエラルキー上のObstacleオブジェクトを削除 します。
② 一定間隔で障害物を生成するスクリプト
次に、障害物をランダムな間隔で自動生成するスクリプトを作成します。
1. スクリプトの作成
- プロジェクトウィンドウを右クリック して「Create」→「C# Script」を選択。
- スクリプト名を ObstacleSpawner に変更。
- 作成したスクリプトを 空のGameObject(名前:Spawner)にアタッチ します。
2. スクリプトの編集
ObstacleSpawnerスクリプトを開いて、以下のコードを入力します。
using UnityEngine;
public class ObstacleSpawner : MonoBehaviour
{
public GameObject obstaclePrefab; // 障害物のプレハブ
public Transform spawnPoint; // 生成位置
public float spawnInterval = 2f; // 生成間隔
public float minY = -2f, maxY = 2f; // 障害物の高さ範囲
private void Start()
{
// 一定間隔で障害物を生成する
InvokeRepeating(nameof(SpawnObstacle), 1f, spawnInterval);
}
void SpawnObstacle()
{
// ランダムなY座標で障害物を生成
Vector3 spawnPosition = new Vector3(spawnPoint.position.x, Random.Range(minY, maxY), 0f);
Instantiate(obstaclePrefab, spawnPosition, Quaternion.identity);
}
}
3. スクリプトの設定
- ヒエラルキーで「右クリック」→「Create Empty」 して「Spawner」オブジェクトを作成。
- 「ObstacleSpawner」スクリプトを「Spawner」にアタッチ。
- Inspectorウィンドウで「Obstacle Prefab」に作成した障害物プレハブを設定。
- 「Spawn Point」の位置をカメラの右側(X座標を適度に調整)に設定。
③ 当たり判定の設定(Game Over処理)
プレイヤーが障害物に当たったらゲームオーバーになるようにします。
1. プレイヤー側のスクリプト修正
- PlayerMoveスクリプトを開く。
- 以下のコードを追加 して、障害物に衝突したときに処理を行う。
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("Obstacle"))
{
Debug.Log("Game Over");
Time.timeScale = 0; // ゲームを停止
}
}
2. 障害物のタグ設定
- プロジェクトの「Tags & Layers」から新しいタグ「Obstacle」を作成。
- Obstacleプレハブに設定(Inspectorの「Tag」から「Obstacle」を選択)。
まとめ
- 障害物を作成し、プレハブ化。
- 一定間隔で障害物を生成するスクリプトを作成。
- プレイヤーが障害物に当たるとゲームオーバーになるように設定。

この仕組みを応用すれば、ゲームの難易度を調整したり、異なる種類の障害物を追加したりできます。
あわせて読みたい
無限ランナーゲームの開発をさらに深めたい方は、以下の記事もぜひご覧ください!
- 🔁 Unityで背景を無限スクロールさせる方法【初心者向け】
背景のスクロール演出は無限ランナーに欠かせません。パララックス効果の実装にも役立ちます。 - 🧠 【Unity2D】敵がプレイヤーを追跡!簡単AIの作り方
障害物や敵キャラに追尾させたいときに便利なAIの基礎スクリプトを紹介しています。 - 🎮 Unity初心者必見!クリックだけでジャンプさせる簡単なスクリプト
ジャンプ処理の導入はゲーム性の幅を広げます。ワンタップ動作の設計にぴったり。 - 🎲 【Unity】複数のprefabからランダムに選んで生成したい
障害物のバリエーションを増やしたいときに活用できるテクニックです。 - 🔧 Unity初心者必見!Asset Storeで手に入るゲーム制作が楽になるおすすめアセット
無限ランナー開発にも役立つテンプレートや便利アセットを紹介しています。








※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。