Unityゲームの作り方メモパズルゲーム

【Unity】スイカゲーム風の合成パズルを作る方法【2Dゲーム開発】

Unity

1. はじめに

最近話題になっている「スイカゲーム」を知っていますか?このゲームは、フルーツを落として合成しながらスコアを稼ぐシンプルなパズルゲームですが、物理エンジンを活用した独特の動きがとても楽しいですよね。

この記事では、Unityを使ってスイカゲーム風の2Dパズルゲームを作る方法を解説していきます。壁の配置、フルーツの作成、スクリプトの実装、プレイヤーの操作などを順番に学びながら、一緒にゲームを作っていきましょう!

プログラムの初心者でも理解しやすいように、できるだけ分かりやすく説明します。C#の基礎を少しでも知っていれば、問題なく進められるので安心してくださいね。

このチュートリアルで学べること

  • Unityで2Dオブジェクトを作成する方法
  • Rigidbody2DやColliderを使った物理エンジンの設定
  • C#スクリプトでフルーツの合成を実装
  • プレイヤーの移動やフルーツの落下処理
  • プレハブを活用して効率的にオブジェクトを管理

これらを学ぶことで、スイカゲーム風のパズルゲームを作れるだけでなく、他の2Dゲームにも応用できるスキルが身につきます!

どんなゲームを作るの?

今回作るゲームは、次のような仕組みになっています。

  • 画面の上からフルーツを落とし、同じ種類のフルーツがぶつかると進化する
  • フルーツがどんどん積み重なっていき、一定の高さを超えるとゲームオーバー
  • プレイヤーは左右に動かしてフルーツを落とす位置を調整できる

スイカゲームの基本的な動きを再現しつつ、自由にアレンジを加えられるような設計にしていきます。

それでは、さっそくUnityプロジェクトの準備から始めましょう!




2. プロジェクトの準備

それでは、スイカゲーム風のパズルゲームを作るために、Unityで新しいプロジェクトを作成し、必要な設定をしていきましょう。


① 新しいUnity 2Dプロジェクトを作成

まずは、Unityを開いて新規プロジェクトを作成します。

  1. Unity Hubを開く
  2. 新しいプロジェクト」をクリック
  3. テンプレートを「2D(URPではない)」に設定
  4. プロジェクト名を SuikaGame にする(任意の名前でOK)
  5. 保存先を選んで「作成」をクリック

これで、新しい2Dゲーム用のプロジェクトが作成されました。


② シーンの基本設定

プロジェクトを開いたら、シーンの基本設定をしておきます。

1. メインカメラの設定

まずは、カメラの表示範囲を調整します。

  1. Hierarchy(ヒエラルキー)ウィンドウMain Camera を選択
  2. Inspector(インスペクター)ウィンドウBackground の色を好きな色に変更(背景色)
  3. Orthographic Size5 → 7 に変更(表示範囲を広げる)

③ 必要なアセットを準備

スイカゲーム風のフルーツや背景の画像を用意しましょう。

1. フルーツの画像を用意

  • 無料画像サイト「いらすとや などで「みかん、すいか、ぶどう、りんご、もも」などのフルーツ画像をダウンロード
  • PNG形式の画像がオススメ(背景が透過されているため)

2. 画像をUnityに取り込む

ダウンロードした画像をUnityの「Assets」フォルダにドラッグ&ドロップします。

3. 画像をスプライトに設定

  • Projectウィンドウ で取り込んだ画像を選択
  • InspectorウィンドウTexture TypeSprite (2D and UI) に変更
  • Apply をクリック

これで、画像が2Dオブジェクトとして使えるようになりました!


④ ゲームの基礎となるオブジェクトを作成

スイカゲームの基本となる「壁」と「背景」を配置しましょう。

1. 背景の作成

  1. Hierarchy ウィンドウで 右クリック2D ObjectSprite を選択
  2. 名前を Background に変更
  3. InspectorSprite RendererSprite背景画像を設定
  4. TransformScale を調整して画面全体を覆うようにする

これで、基本的なシーンのセットアップが完了しました!
次のステップでは、ゲームの核となるフルーツの作成をしていきましょう。




3. 壁の配置

スイカゲーム風のパズルゲームでは、フルーツが画面外に飛び出さないように**「コの字型の壁」**を配置する必要があります。ここでは、壁の作成方法と設定手順を詳しく解説します。


① 壁を作成する

まずは、3つの壁(左壁、右壁、床)を作成し、ゲームの枠組みを作りましょう。

1. 左の壁を作る

  1. Hierarchy(ヒエラルキー)ウィンドウ右クリック
  2. 2D ObjectSpriteSquare を選択
  3. 名前を「Wall_Left」に変更
  4. Inspector(インスペクター)ウィンドウで以下の設定を変更:
    • TransformScale(0.5, 10, 1) に変更(縦長にする)
    • TransformPosition(-4.5, 0, 0) に設定(画面の左端に配置)

2. 右の壁を作る

  1. Wall_LeftCtrl + D(複製)
  2. 複製したオブジェクトの名前を Wall_Right に変更
  3. TransformPosition(4.5, 0, 0) に変更(画面の右端に配置)

3. 床を作る

  1. Hierarchyウィンドウで右クリック
  2. 2D ObjectSpriteSquare を選択
  3. 名前を「Wall_Bottom」に変更
  4. TransformScale(9, 0.5, 1) に変更(横長にする)
  5. TransformPosition(0, -5, 0) に設定(画面の下部に配置)

② 壁に衝突判定を追加

作成した壁がフルーツを止めるように、BoxCollider2D を追加します。

1. 壁にコライダーを設定

  1. Wall_Left を選択
  2. InspectorウィンドウAdd Component をクリック
  3. BoxCollider2D を検索して追加

この操作を Wall_RightWall_Bottom にも適用します。


③ 壁を整理する

複数の壁をまとめることで、シーンが見やすくなります。

1. 空のオブジェクトを作成

  1. Hierarchyウィンドウで右クリックCreate Empty
  2. 名前を Walls に変更

2. 壁を親子関係にする

  1. Wall_LeftWall_RightWall_Bottom の3つを**Walls の子オブジェクト**にする
    • HierarchyWall_LeftWall_RightWall_Bottomドラッグ&ドロップ して Walls にまとめる

これで、フルーツが画面外に飛び出さないようにする 「コの字型の壁」 が完成しました!
次のステップでは、フルーツを作成して落とす準備 をしていきましょう!




4. フルーツの作成

スイカゲーム風のパズルゲームでは、フルーツを作成し、物理エンジンを利用して落下させることが重要です。ここでは、フルーツの基本的な作成方法と、物理挙動を設定する手順を説明します。


① フルーツの基本形を作る

まずは、基本となる球体のフルーツを作成します。

1. フルーツの作成

  1. Hierarchy(ヒエラルキー)ウィンドウ右クリック
  2. 2D ObjectSpriteCircle を選択
  3. 名前を Fruit に変更
  4. Inspector(インスペクター)ウィンドウで以下の設定を変更:
    • TransformScale(1, 1, 1) に設定(大きさを調整)
    • Position(0, 3, 0) に設定(初期位置)

② 物理挙動を設定する

フルーツが自然に落ちるように、Rigidbody2D を追加し、適切な設定を行います。

1. Rigidbody2D を追加

  1. Fruit を選択
  2. InspectorAdd Component をクリック
  3. Rigidbody2D を検索して追加
  4. 以下のように設定:
    • Gravity Scale0(まだ落下しないようにする)
    • Mass(質量)1
    • Constraints(制約)Freeze Rotation(回転しないようにする)

③ 衝突判定を追加

フルーツ同士や壁と正しく衝突するために、CircleCollider2D を追加します。

1. CircleCollider2D を追加

  1. Fruit を選択
  2. InspectorAdd Component をクリック
  3. CircleCollider2D を検索して追加
  4. Radius を調整(フルーツの画像サイズに合わせる)

④ バウンド(跳ねる)効果を追加

フルーツが落ちたときに少しバウンドするように、Physics Material 2D を設定します。

1. Physics Material 2D を作成

  1. ProjectウィンドウAssets フォルダを開く
  2. 右クリックCreate2DPhysics Material 2D
  3. 名前を FruitMaterial に変更
  4. Inspector で以下の値を設定:
    • Friction(摩擦)0
    • Bounciness(弾力)0.5(跳ねる強さ)

2. フルーツに適用

  1. Fruit を選択
  2. CircleCollider2DMaterialFruitMaterial を設定

⑤ タグの設定

フルーツ同士がぶつかったときの処理を行うため、Fruits というタグを作成し、設定します。

1. タグを作成

  1. InspectorTag の横にある をクリック
  2. Add Tag... を選択
  3. + ボタンを押して、新しいタグ Fruits を追加

2. フルーツに適用

  1. Fruit を選択
  2. InspectorTagFruits に変更

⑥ フルーツをプレハブ化

今後、複数のフルーツを生成するために、フルーツをプレハブにします。

1. プレハブを作成

  1. FruitProjectウィンドウの「Assets」フォルダにドラッグ&ドロップ
  2. 名前を FruitPrefab に変更
  3. HierarchyFruit を削除(プレハブから生成するため)

⑦ フルーツの種類を増やす

ゲームらしくするために、複数の種類のフルーツを作成します。

1. フルーツのバリエーションを作る

  1. FruitPrefab複製(Ctrl + D)
  2. 名前を変更(例:OrangePrefab, LimePrefab など)
  3. Sprite Renderer の画像を変更
  4. サイズ(Scale)やコライダーの調整(フルーツごとに適切なサイズにする)

2. 進化先の設定

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


これで、フルーツの作成が完了しました!
次のステップでは、フルーツを合成するスクリプトの実装に進みます。




5. フルーツの合成処理

フルーツがぶつかったときに**進化(合成)**する処理を実装します。
同じ種類のフルーツが衝突した場合、より大きなフルーツに進化し、小さいフルーツは削除される仕組みを作ります。


① C#スクリプトを作成

まず、フルーツの合成を管理する Fruits スクリプトを作成します。

1. スクリプトの作成

  1. ProjectウィンドウAssets フォルダを開く
  2. 右クリックCreateC# Script
  3. 名前を Fruits に変更
  4. スクリプトを ダブルクリック して開く

② フルーツの種類を管理

進化を実装するために、フルーツの種類を 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. スクリプトをフルーツにアタッチ

  1. Fruits スクリプトを FruitPrefab にドラッグ&ドロップ
  2. FruitsInspectorウィンドウ で次の設定をする:
    • TYPEフルーツの種類を選択
    • nextFruits進化後のフルーツプレハブを設定

2. 進化先を設定

フルーツ進化後
みかん(Mikan)ライム(Lime)
ライム(Lime)ぶどう(Grape)
ぶどう(Grape)りんご(Ringo)
りんご(Ringo)もも(Momo)
もも(Momo)スイカ(Suika)
スイカ(Suika)なし(消滅)

これで、フルーツの合成処理が完成しました!
次は、プレイヤーの操作 を実装して、フルーツを落とせるようにしていきます。




6. プレイヤーの配置

次に、プレイヤーを作成してフルーツを落とす仕組みを作ります。
プレイヤーは左右に移動できるようにし、一定の位置からフルーツを落とす機能を実装します。


① プレイヤーオブジェクトを作成

まず、プレイヤー(フルーツを落とす位置)を作成します。

1. プレイヤーの作成

  1. Hierarchy(ヒエラルキー)ウィンドウ右クリック
  2. 2D ObjectSpriteSquare を選択
  3. 名前を Player に変更
  4. Inspector(インスペクター) で以下の設定を変更:
    • TransformScale(1.5, 0.5, 1) に設定(横長にする)
    • TransformPosition(0, 4, 0) に設定(画面上部に配置)

② スポーン地点(フルーツの落とし口)を作成

プレイヤーの子オブジェクトとして、フルーツがスポーンする場所を作成します。

1. スポーンオブジェクトを作る

  1. Player を選択
  2. 右クリックCreate Empty を選択
  3. 名前を SpawnPoint に変更
  4. Inspector で TransformPosition(0, -0.5, 0) に設定(プレイヤーの少し下)

2. シーンで見やすくする

  1. InspectorTagUntagged に設定
  2. Iconカラーマーカー に設定(シーンで見やすくするため)

③ プレイヤーを移動させる

プレイヤーを左右に移動できるようにC#スクリプトを作成します。

1. スクリプトを作成

  1. ProjectウィンドウAssets フォルダを開く
  2. 右クリックCreateC# Script
  3. 名前を Player に変更
  4. スクリプトを開いて以下のコードを入力

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;
        }
    }
}

④ スクリプトをアタッチ

  1. Player.csPlayerオブジェクトにドラッグ&ドロップ
  2. Inspectorspeed3 に設定(調整可能)



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);
    }
}

② スクリプトの設定

  1. Player オブジェクトを選択
  2. InspectorPlayer スクリプトの設定で以下を行う:
    • Fruits(配列)に すべてのフルーツプレハブを設定
    • SpawnPointSpawnPoint オブジェクトを設定
    • Speed3(調整可能)

③ 動作確認

プレイヤーが左右に移動できる
スペースキーを押すとフルーツが落ちる
次のフルーツがランダムにセットされる
フルーツが連続して落ちないように連打防止がある




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

Rigidbody2DgravityScale を確認してください。1 以上に設定することで、フルーツが落下するようになります。

Q
フルーツが合成されない原因は?
A

OnCollisionEnter2D の処理で、フルーツの タグfruitsNum の設定が正しいか確認してください。また、nextFruits のプレハブが正しく設定されているかもチェックしましょう。

Q
フルーツのサイズが合わずにずれてしまいます
A

CircleCollider2DRadius を調整して、見た目に合わせたコライダーのサイズを設定してください。

タイトルとURLをコピーしました