Unity2Dで「マッチ3のパズルゲーム」を作成していきます。完成形を作ると長くなるので、基本となる機能を作成していきます。
はじめに
今回作成するマッチ3のパズルゲームは、「隣り合うピースの入れ替え」、「3つ以上同じ色で揃えると消える」を基本軸で作成していきます。
Unityのヴァージョン
Unity 6000.6.5f1ヴァージョン、「Universal 2D」テンプレートで作成していきます。
利用する画像
下記の画像をピースとして利用していきます。Inkscapeで簡単に作成したものです。

下記がエクスポートした画像です。

ゲーム作成開始
ここからゲームを作成していきます。まずはカラーピースを並べたボードを作成します。
ピースの作成
Assetsフォルダ内にSpritesフォルダを作成して、上記のエクスポートした画像を入れます。画像を選択してimportSettingsの「PixelsPerUnit」を128に変更します。画像が分割されていない場合は、SpriteModeを「Multiple」に変更して分割します。

Assetsフォルダ内にPrefabsフォルダを作成。分割された画像をHierarchyにドラッグアンドドロップ、名前を変更してPrefabsフォルダに移動します(名前はredTileとなっていますが、redPieceでも何でも分かりやすのでOK)。

下記の様に全ての色の画像をプレハブ化します。

ボードの作成
次にピースを並べて初期ボードを作成します。Hierarchyで「CreateEmpty」を選択、空オブジェクトを追加して名前を「Board」に変更。同じ名前でスクリプトを作成してアタッチします。

「Board」スクリプトの中身を下記に変更します。
using UnityEngine;
public class Board : MonoBehaviour
{
[SerializeField] private int width = 6;
[SerializeField] private int height = 6;
[SerializeField] private GameObject[] piecePrefabs;
private void Start()
{
GenerateBoard();
}
void GenerateBoard()
{
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
int randomIndex = Random.Range(0, piecePrefabs.Length);
GameObject piece = Instantiate
(piecePrefabs[randomIndex], new Vector3(x, y), Quaternion.identity);
}
}
}
}
指定した幅、高さ(ボードのサイズ)の数だけランダムに選択したピースを並べます。
パラメータを下記の様にセットします。

実行すると下記の様なゲーム画面になります。始点が0,0なので右上にボードが作成されます。

カメラ調整
位置を調整するので、ピースの生成位置を調整するか、カメラの位置を変更します。今回はボードサイズに合わせてカメラの位置を変更。「Board」スクリプトに下記「SetCameraPos」を追加します。
private void Start()
{
SetCameraPos();
GenerateBoard();
}
void SetCameraPos()
{
var cam = Camera.main;
float x = (float)(width - 1) / 2;
float y = (float)(height - 1) / 2;
cam.transform.position = new Vector3(x, y, cam.transform.position.z);
}
ついでにカメラの背景の色も黒色に変更しておきます(MainCameraオブジェクトのCamera→Environmentから変更)。実行して下記の様に真ん中にボードが作成されたらOKです。配色はランダムになります。
