「並び替えの簡単なパズルゲーム(ソートゲーム)」を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回目で整理していきます。