Unity|並び替えパズルゲーム(ソートゲーム)。Part1.ボール生成と移動

「並び替えの簡単なパズルゲーム(ソートゲーム)」をUnityで作成してみます。

ミニゲーム的なチュートリアルで、基本的なゲーム部分だけを作成してみます。できるだけ簡単に実装していきます。

はじめに

今回作成するのは、「瓶の中にボールが入っている」、「ボールを動かして同じ色でそろえる」簡単なパズルゲームです。GooglePlayで検索すると下記のように沢山ヒットするゲームです。動作や見た目などはそれぞれ違いますが、基本的なゲーム部分を作成していきます。

Unityのバージョン

「Unity 2022.3.14f1」バージョンで作成しています。

UnityHubから「新しいプロジェクト」を選択、テンプレートは「2D」を選択、プロジェクト名は「SortGame」としています。

作成開始

第1回目は「ボールの生成」と「仮で動かす(位置の変更)」まで実装していきます。

瓶とボールを作成

Hierarchyで右クリック、「CreateEmpty」を追加。

名前をBottleに変更し、配下に「2DObject」→「Sprites」→「Square」を追加。

名前を「BottleColor」に変更して、ScaleとColorを変更。

さらに「CreateEmpty」で空オブジェクトを追加。

名前をBallsにして、Balls配下に「2DObject」→「Sprites」→「Circle」を追加。

名前をBallに変更してPositionを変更、Layerを変更して前に表示されるようにします。

Ballをプレハブ化して名前をBall_REDに変更。色を変更して、Tagを作成してREDにします。

スクリプトの作成

ボールを生成するスクリプトを作成します。スクリプト名はBottleとし、Instantiateでボールを生成。

using UnityEngine;

public class Bottle : MonoBehaviour
{
    [SerializeField] private GameObject ballPrefab;
    [SerializeField] private Transform balls;

    void Start()
    {
        GameObject ball = Instantiate(ballPrefab, balls);
        ball.transform.position = new Vector3(0, -1.5f);
    }
}

Bottleにアタッチして、パラメータをセット。実行するとBallsの配下にボールが生成されます。

下記のようにスクリプトを変更すると複数個ボールの生成ができます。(縦に並びます)

using UnityEngine;

public class Bottle : MonoBehaviour
{
    [SerializeField] private GameObject[] ballPrefab;
    [SerializeField] private Transform balls;

    void Start()
    {
        for (int i = 0; i < ballPrefab.Length; i++)
        {
            GameObject ball = Instantiate(ballPrefab[i], balls);
            ball.transform.position = new Vector3(0, -1.5f + i);
        }
    }
}

3つボールを生成する場合は下記のような感じ。

ボールの生成は仮でこんな感じ。

ボールの移動

次にボールを移動してみます。まずはBottleを配下ごとコピーして瓶を2本にします。

2本目の瓶はPositionを変更し、Ballは無しにします。

動作確認のため、スクリプトを仮で下記に変更します。Bottle内のボールをBottle(1)に移動します。

using UnityEngine;

public class Bottle : MonoBehaviour
{
    [SerializeField] private GameObject[] ballPrefab;
    [SerializeField] private Transform balls;

    [Header("--Debug--")]
    [SerializeField] Bottle bottleRef;

    [Header("--Debug--")]
    [SerializeField] private bool isBottle;

    private GameObject ball;

    void Start()
    {
        for (int i = 0; i < ballPrefab.Length; i++)
        {
            ball = Instantiate(ballPrefab[i], balls);
            ball.transform.position = new Vector3(0, -1.5f + i);
        }
    }

    void Update()
    {
        if (Input.GetKeyUp(KeyCode.Space) && isBottle == true)
        {
            ball.transform.parent = bottleRef.balls;
            ball.transform.position = new Vector3(2.0f, -1.5f);
        }
    }
}

各パラメータは下記のようにします。移動元のBottleにはボールを1個だけセット、isBottleにチェックを入れいます。移動先のBottle(1)はボール無し、isBottleのチェックは無しとします。

実行して、スペースキーを押したら下記のように隣の瓶にボールが移動すればOK

第1回目はここまで。ボールを生成、ボールの移動を行いましたが、まだ動作確認の仮段階です。次回の2回目で整理していきます。

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