1. はじめに
最近話題になっている「スイカゲーム」を知っていますか?このゲームは、フルーツを落として合成しながらスコアを稼ぐシンプルなパズルゲームですが、物理エンジンを活用した独特の動きがとても楽しいですよね。
この記事では、Unityを使ってスイカゲーム風の2Dパズルゲームを作る方法を解説していきます。壁の配置、フルーツの作成、スクリプトの実装、プレイヤーの操作などを順番に学びながら、一緒にゲームを作っていきましょう!
プログラムの初心者でも理解しやすいように、できるだけ分かりやすく説明します。C#の基礎を少しでも知っていれば、問題なく進められるので安心してくださいね。
このチュートリアルで学べること
- Unityで2Dオブジェクトを作成する方法
- Rigidbody2DやColliderを使った物理エンジンの設定
- C#スクリプトでフルーツの合成を実装
- プレイヤーの移動やフルーツの落下処理
- プレハブを活用して効率的にオブジェクトを管理
これらを学ぶことで、スイカゲーム風のパズルゲームを作れるだけでなく、他の2Dゲームにも応用できるスキルが身につきます!
どんなゲームを作るの?
今回作るゲームは、次のような仕組みになっています。
- 画面の上からフルーツを落とし、同じ種類のフルーツがぶつかると進化する
- フルーツがどんどん積み重なっていき、一定の高さを超えるとゲームオーバー
- プレイヤーは左右に動かしてフルーツを落とす位置を調整できる
スイカゲームの基本的な動きを再現しつつ、自由にアレンジを加えられるような設計にしていきます。
それでは、さっそくUnityプロジェクトの準備から始めましょう!
2. プロジェクトの準備
それでは、スイカゲーム風のパズルゲームを作るために、Unityで新しいプロジェクトを作成し、必要な設定をしていきましょう。
① 新しいUnity 2Dプロジェクトを作成
まずは、Unityを開いて新規プロジェクトを作成します。
- Unity Hubを開く
- 「新しいプロジェクト」をクリック
- テンプレートを「2D(URPではない)」に設定
- プロジェクト名を
SuikaGame
にする(任意の名前でOK) - 保存先を選んで「作成」をクリック
これで、新しい2Dゲーム用のプロジェクトが作成されました。
② シーンの基本設定
プロジェクトを開いたら、シーンの基本設定をしておきます。
1. メインカメラの設定
まずは、カメラの表示範囲を調整します。
- Hierarchy(ヒエラルキー)ウィンドウで
Main Camera
を選択 - Inspector(インスペクター)ウィンドウで
Background
の色を好きな色に変更(背景色) Orthographic Size
を 5 → 7 に変更(表示範囲を広げる)
③ 必要なアセットを準備
スイカゲーム風のフルーツや背景の画像を用意しましょう。
1. フルーツの画像を用意
- 無料画像サイト「いらすとや」 などで「みかん、すいか、ぶどう、りんご、もも」などのフルーツ画像をダウンロード
- PNG形式の画像がオススメ(背景が透過されているため)
2. 画像をUnityに取り込む
ダウンロードした画像をUnityの「Assets」フォルダにドラッグ&ドロップします。
3. 画像をスプライトに設定
- Projectウィンドウ で取り込んだ画像を選択
- Inspectorウィンドウ の
Texture Type
をSprite (2D and UI)
に変更 Apply
をクリック
これで、画像が2Dオブジェクトとして使えるようになりました!
④ ゲームの基礎となるオブジェクトを作成
スイカゲームの基本となる「壁」と「背景」を配置しましょう。
1. 背景の作成
Hierarchy
ウィンドウで 右クリック →2D Object
→Sprite
を選択- 名前を
Background
に変更 Inspector
でSprite Renderer
のSprite
に 背景画像を設定Transform
のScale
を調整して画面全体を覆うようにする

これで、基本的なシーンのセットアップが完了しました!
次のステップでは、ゲームの核となるフルーツの作成をしていきましょう。
3. 壁の配置
スイカゲーム風のパズルゲームでは、フルーツが画面外に飛び出さないように**「コの字型の壁」**を配置する必要があります。ここでは、壁の作成方法と設定手順を詳しく解説します。
① 壁を作成する
まずは、3つの壁(左壁、右壁、床)を作成し、ゲームの枠組みを作りましょう。

1. 左の壁を作る
- Hierarchy(ヒエラルキー)ウィンドウで右クリック
2D Object
→Sprite
→Square
を選択- 名前を「Wall_Left」に変更
- Inspector(インスペクター)ウィンドウで以下の設定を変更:
Transform
のScale
を(0.5, 10, 1)
に変更(縦長にする)Transform
のPosition
を(-4.5, 0, 0)
に設定(画面の左端に配置)
2. 右の壁を作る
Wall_Left
を Ctrl + D(複製)- 複製したオブジェクトの名前を
Wall_Right
に変更 Transform
のPosition
を(4.5, 0, 0)
に変更(画面の右端に配置)
3. 床を作る
- Hierarchyウィンドウで右クリック
2D Object
→Sprite
→Square
を選択- 名前を「Wall_Bottom」に変更
Transform
のScale
を(9, 0.5, 1)
に変更(横長にする)Transform
のPosition
を(0, -5, 0)
に設定(画面の下部に配置)
② 壁に衝突判定を追加
作成した壁がフルーツを止めるように、BoxCollider2D を追加します。
1. 壁にコライダーを設定
Wall_Left
を選択- Inspectorウィンドウで
Add Component
をクリック BoxCollider2D
を検索して追加
この操作を Wall_Right
と Wall_Bottom
にも適用します。
③ 壁を整理する
複数の壁をまとめることで、シーンが見やすくなります。
1. 空のオブジェクトを作成
- Hierarchyウィンドウで右クリック →
Create Empty
- 名前を
Walls
に変更
2. 壁を親子関係にする
Wall_Left
、Wall_Right
、Wall_Bottom
の3つを**Walls
の子オブジェクト**にするHierarchy
でWall_Left
、Wall_Right
、Wall_Bottom
を ドラッグ&ドロップ してWalls
にまとめる

これで、フルーツが画面外に飛び出さないようにする 「コの字型の壁」 が完成しました!
次のステップでは、フルーツを作成して落とす準備 をしていきましょう!
4. フルーツの作成
スイカゲーム風のパズルゲームでは、フルーツを作成し、物理エンジンを利用して落下させることが重要です。ここでは、フルーツの基本的な作成方法と、物理挙動を設定する手順を説明します。
① フルーツの基本形を作る
まずは、基本となる球体のフルーツを作成します。
1. フルーツの作成
- Hierarchy(ヒエラルキー)ウィンドウで 右クリック
2D Object
→Sprite
→Circle
を選択- 名前を
Fruit
に変更 - Inspector(インスペクター)ウィンドウで以下の設定を変更:
Transform
のScale
を(1, 1, 1)
に設定(大きさを調整)Position
を(0, 3, 0)
に設定(初期位置)
② 物理挙動を設定する
フルーツが自然に落ちるように、Rigidbody2D
を追加し、適切な設定を行います。
1. Rigidbody2D を追加
Fruit
を選択Inspector
のAdd Component
をクリックRigidbody2D
を検索して追加- 以下のように設定:
- Gravity Scale →
0
(まだ落下しないようにする) - Mass(質量) →
1
- Constraints(制約) →
Freeze Rotation
(回転しないようにする)
- Gravity Scale →
③ 衝突判定を追加
フルーツ同士や壁と正しく衝突するために、CircleCollider2D
を追加します。
1. CircleCollider2D を追加
Fruit
を選択Inspector
のAdd Component
をクリックCircleCollider2D
を検索して追加Radius
を調整(フルーツの画像サイズに合わせる)
④ バウンド(跳ねる)効果を追加
フルーツが落ちたときに少しバウンドするように、Physics Material 2D
を設定します。
1. Physics Material 2D を作成
- Projectウィンドウで
Assets
フォルダを開く - 右クリック →
Create
→2D
→Physics Material 2D
- 名前を
FruitMaterial
に変更 - Inspector で以下の値を設定:
- Friction(摩擦) →
0
- Bounciness(弾力) →
0.5
(跳ねる強さ)
- Friction(摩擦) →
2. フルーツに適用
Fruit
を選択CircleCollider2D
の Material にFruitMaterial
を設定

⑤ タグの設定
フルーツ同士がぶつかったときの処理を行うため、Fruits
というタグを作成し、設定します。
1. タグを作成
Inspector
でTag
の横にある▼
をクリックAdd Tag...
を選択+
ボタンを押して、新しいタグFruits
を追加
2. フルーツに適用
Fruit
を選択Inspector
でTag
をFruits
に変更

⑥ フルーツをプレハブ化
今後、複数のフルーツを生成するために、フルーツをプレハブにします。
1. プレハブを作成
Fruit
を Projectウィンドウの「Assets」フォルダにドラッグ&ドロップ- 名前を
FruitPrefab
に変更 Hierarchy
のFruit
を削除(プレハブから生成するため)

⑦ フルーツの種類を増やす
ゲームらしくするために、複数の種類のフルーツを作成します。
1. フルーツのバリエーションを作る
FruitPrefab
を 複製(Ctrl + D)- 名前を変更(例:
OrangePrefab
,LimePrefab
など) - Sprite Renderer の画像を変更
- サイズ(Scale)やコライダーの調整(フルーツごとに適切なサイズにする)

2. 進化先の設定
この後のステップで、同じフルーツが合成されたときに進化するように設定します。
進化先のフルーツを設定できるように、Fruits
スクリプトを作成して、プレハブにアタッチします。

これで、フルーツの作成が完了しました!
次のステップでは、フルーツを合成するスクリプトの実装に進みます。
5. フルーツの合成処理
フルーツがぶつかったときに**進化(合成)**する処理を実装します。
同じ種類のフルーツが衝突した場合、より大きなフルーツに進化し、小さいフルーツは削除される仕組みを作ります。
① C#スクリプトを作成
まず、フルーツの合成を管理する Fruits
スクリプトを作成します。
1. スクリプトの作成
- Projectウィンドウで
Assets
フォルダを開く - 右クリック →
Create
→C# Script
- 名前を
Fruits
に変更 - スクリプトを ダブルクリック して開く
② フルーツの種類を管理
進化を実装するために、フルーツの種類を enum
で定義します。
1. Fruits.cs
に以下のコードを記述
using UnityEngine;
public class Fruits : MonoBehaviour
{
public enum TYPE
{
Suika, // スイカ
Mikan, // みかん
Lime, // ライム
Grape, // ぶどう
Ringo, // りんご
Momo // もも
}
public TYPE type = TYPE.Suika;
// 進化後のフルーツ
[SerializeField] GameObject nextFruits;
public int fruitsNum; // フルーツの識別番号
}
ポイント
enum TYPE
で フルーツの種類を設定nextFruits
で 進化後のフルーツを指定fruitsNum
で フルーツの合成管理
③ フルーツの衝突を検知
次に、フルーツ同士がぶつかったときの処理を OnCollisionEnter2D
を使って実装します。
1. Fruits.cs
に追記
private void OnCollisionEnter2D(Collision2D collision)
{
// 衝突したオブジェクトがフルーツか確認
if (collision.gameObject.tag == "Fruits")
{
TYPE colType = collision.gameObject.GetComponent<Fruits>().type;
int colNum = collision.gameObject.GetComponent<Fruits>().fruitsNum;
Debug.Log("フルーツ同士がぶつかりました");
// 同じ種類のフルーツがぶつかったら合成
if (type == colType)
{
Debug.Log("フルーツのタイプが一致しました");
// 最大レベル(スイカ)の場合は消滅
if (type == TYPE.Suika)
{
Destroy(collision.gameObject);
Destroy(gameObject);
return;
}
// 進化先が設定されている場合のみ処理
if (nextFruits != null)
{
// 進化するフルーツを生成
GameObject newFruit = Instantiate(nextFruits, transform.position, transform.rotation);
newFruit.GetComponent<Rigidbody2D>().gravityScale = 1;
newFruit.GetComponent<Fruits>().fruitsNum = Mathf.Max(fruitsNum, colNum) + 1;
// もとのフルーツを削除
Destroy(collision.gameObject);
Destroy(gameObject);
}
}
}
}
④ インスペクターで進化設定
スクリプトを適用し、進化するフルーツをインスペクターで設定します。
1. スクリプトをフルーツにアタッチ
Fruits
スクリプトをFruitPrefab
にドラッグ&ドロップFruits
の Inspectorウィンドウ で次の設定をする:TYPE
→ フルーツの種類を選択nextFruits
→ 進化後のフルーツプレハブを設定
2. 進化先を設定
フルーツ | 進化後 |
---|---|
みかん(Mikan) | ライム(Lime) |
ライム(Lime) | ぶどう(Grape) |
ぶどう(Grape) | りんご(Ringo) |
りんご(Ringo) | もも(Momo) |
もも(Momo) | スイカ(Suika) |
スイカ(Suika) | なし(消滅) |

これで、フルーツの合成処理が完成しました!
次は、プレイヤーの操作 を実装して、フルーツを落とせるようにしていきます。
6. プレイヤーの配置
次に、プレイヤーを作成してフルーツを落とす仕組みを作ります。
プレイヤーは左右に移動できるようにし、一定の位置からフルーツを落とす機能を実装します。
① プレイヤーオブジェクトを作成
まず、プレイヤー(フルーツを落とす位置)を作成します。
1. プレイヤーの作成
- Hierarchy(ヒエラルキー)ウィンドウで 右クリック
2D Object
→Sprite
→Square
を選択- 名前を
Player
に変更 Inspector(インスペクター)
で以下の設定を変更:Transform
のScale
を(1.5, 0.5, 1)
に設定(横長にする)Transform
のPosition
を(0, 4, 0)
に設定(画面上部に配置)
② スポーン地点(フルーツの落とし口)を作成
プレイヤーの子オブジェクトとして、フルーツがスポーンする場所を作成します。
1. スポーンオブジェクトを作る
Player
を選択- 右クリック →
Create Empty
を選択 - 名前を
SpawnPoint
に変更 - Inspector で
Transform
のPosition
を(0, -0.5, 0)
に設定(プレイヤーの少し下)
2. シーンで見やすくする
Inspector
でTag
をUntagged
に設定Icon
を カラーマーカー に設定(シーンで見やすくするため)
③ プレイヤーを移動させる
プレイヤーを左右に移動できるようにC#スクリプトを作成します。
1. スクリプトを作成
- Projectウィンドウで
Assets
フォルダを開く - 右クリック →
Create
→C# Script
- 名前を
Player
に変更 - スクリプトを開いて以下のコードを入力
2. Player.cs
のコード
using UnityEngine;
public class Player : MonoBehaviour
{
// 移動速度
public float speed = 3f;
float x;
void Update()
{
Move();
}
void Move()
{
x = Input.GetAxisRaw("Horizontal");
if (x > 0)
{
// 右に移動
transform.position += new Vector3(speed, 0, 0) * Time.deltaTime;
}
else if (x < 0)
{
// 左に移動
transform.position += new Vector3(-speed, 0, 0) * Time.deltaTime;
}
}
}
④ スクリプトをアタッチ
Player.cs
を Playerオブジェクトにドラッグ&ドロップInspector
でspeed
を 3 に設定(調整可能)
7. フルーツを落とす機能
プレイヤーがスペースキーを押すと、フルーツが落下し、次のフルーツがセットされるようにします。
また、フルーツが連続して落ちないように連打防止の仕組みも追加します。
① スクリプトの修正
すでに Player.cs
に基本の移動機能があるので、フルーツを落とす処理を追加します。
1. Player.cs
にフルーツを落とす処理を実装
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour
{
public float speed = 3f;
float x;
// フルーツのプレハブを格納する配列
[SerializeField] GameObject[] fruits;
// フルーツのスポーン位置
[SerializeField] Transform spawnPoint;
// 生成したフルーツを格納する変数
GameObject currentFruit;
// フルーツの落下を制御
bool isDropping;
// フルーツの番号
int fruitIndex = 0;
void Start()
{
// 最初のフルーツをセット
SpawnNewFruit();
}
void Update()
{
Move();
// スペースキーでフルーツを落とす
if (Input.GetKeyDown(KeyCode.Space))
{
if (!isDropping)
{
isDropping = true;
StartCoroutine(DropFruit());
}
}
}
void Move()
{
x = Input.GetAxisRaw("Horizontal");
if (x > 0)
{
transform.position += new Vector3(speed, 0, 0) * Time.deltaTime;
}
else if (x < 0)
{
transform.position += new Vector3(-speed, 0, 0) * Time.deltaTime;
}
}
IEnumerator DropFruit()
{
// フルーツを落下させる
currentFruit.GetComponent<Rigidbody2D>().gravityScale = 1;
currentFruit.transform.SetParent(null);
// 1秒待機(連打防止)
yield return new WaitForSeconds(1);
// 次のフルーツを生成
SpawnNewFruit();
isDropping = false;
}
void SpawnNewFruit()
{
// ランダムにフルーツを選択
int f = Random.Range(0, fruits.Length);
currentFruit = Instantiate(fruits[f], spawnPoint.position, Quaternion.identity, this.transform);
}
}
② スクリプトの設定
Player
オブジェクトを選択Inspector
のPlayer
スクリプトの設定で以下を行う:Fruits
(配列)に すべてのフルーツプレハブを設定SpawnPoint
にSpawnPoint
オブジェクトを設定Speed
は 3(調整可能)
③ 動作確認
✅ プレイヤーが左右に移動できる
✅ スペースキーを押すとフルーツが落ちる
✅ 次のフルーツがランダムにセットされる
✅ フルーツが連続して落ちないように連打防止がある
8. まとめ
ここまでで、スイカゲーム風のパズルゲームの基本的な仕組みを作成しました!
壁の配置、フルーツの作成、合成処理、プレイヤーの移動、フルーツの落下機能を順番に実装して、実際に動かせるようになりましたね。
今回学んだこと
✅ 2Dオブジェクトの作成(壁、フルーツ、プレイヤー)
✅ Rigidbody2D や Collider を使った物理エンジンの設定
✅ C#スクリプトでフルーツの合成処理を実装
✅ プレイヤーを左右に移動させる方法
✅ フルーツをランダムにスポーンし、落とす仕組み
このままでもゲームとして遊べますが、さらに面白くするために以下の機能を追加してみましょう!
1. ゲームオーバー判定
- 画面の上に
BoxCollider2D
を配置し、フルーツが一定の高さを超えたらゲームオーバーにする GameManager
スクリプトを作成し、ゲームの進行管理をする
2. スコア機能
- フルーツが合成されるたびにスコアを加算する
UI Text
を作成し、スコアを画面に表示
3. 音やエフェクトの追加
- フルーツが合成されたときに効果音やアニメーションを追加
Particle System
を使って、フルーツの進化時にエフェクトを表示
「HyperCasual – Puzzle Game Engine」で簡単ゲーム開発!
スイカゲーム風の落下&合成パズルゲームを作りたいけど、
- ゼロからプログラムを書くのは大変…
- 物理演算やスコア管理が難しそう…
- すぐに遊べる形にしたい!
こんな悩みを持っている方にピッタリなアセットがあります!
それが 「HyperCasual – Puzzle Game Engine」 です。
このアセットの魅力
✅ 落下&合成系のパズルゲームを簡単に作れる!
✅ スコアシステムや物理エンジンの設定済み!
✅ コードをほぼ書かずに、カスタマイズだけでオリジナルゲームが作れる!
✅ スマホ向けに最適化済みだから、すぐにリリース可能!
このアセットを使えば、スイカゲーム風のパズルゲームをサクッと開発できます!
Unityの知識が少なくても、完成されたテンプレートを活用することで、ゲーム作りが一気に加速しますよ💡✨
こんな人におすすめ!
🎮 スイカゲーム風のカジュアルパズルを作りたい
🎮 ゲーム開発初心者だけど、すぐに動くものを作りたい
🎮 コードを書く時間を減らして、デザインやゲーム性に集中したい
🎮 スマホ向けのハイパーカジュアルゲームを効率的に開発したい
今すぐチェック!
🔗 HyperCasual – Puzzle Game Engine
このアセットを使えば、面倒な設定なしですぐにパズルゲーム開発をスタートできます!
ぜひチェックして、あなたのスイカゲームを形にしましょう!🍉🎮
まとめ
Unityの基本機能を活用しながら、シンプルながらも奥深いゲームを作ることができました!
スクリプトやオブジェクトの管理を工夫すれば、さらにオリジナル要素を追加することも可能です。
これをベースに、オリジナルのルールや演出を加えて、自分だけのスイカゲームを作ってみてください! 🎮✨
よくある質問(FAQ)
- Qフルーツが動かないのですが、どうすればいいですか?
- A
Rigidbody2D
のgravityScale
を確認してください。1
以上に設定することで、フルーツが落下するようになります。
- Qフルーツが合成されない原因は?
- A
OnCollisionEnter2D
の処理で、フルーツのタグ
やfruitsNum
の設定が正しいか確認してください。また、nextFruits
のプレハブが正しく設定されているかもチェックしましょう。
- Qフルーツのサイズが合わずにずれてしまいます
- A
CircleCollider2D
のRadius
を調整して、見た目に合わせたコライダーのサイズを設定してください。