箱を積み上げる簡単な落ち物ゲームをUnity6で作成する。第3回目です。
はじめに
Part1は下記です。
今回やること
パート1と2で箱の生成、箱の横移動、箱の落下を実装しました。
今回は、調整とゲームオーバーを作成していきます。とりあえずのゲームの形ができます。
実装開始
まずはPart2からの修正で、箱を落下した時に左右に移動しないように修正します。
Boxスクリプトを下記に修正します。
using UnityEngine; public class Box : MonoBehaviour { private float xPos_max = 2.0f; private float xPos_min = -2.0f; private float MoveSpeed = 3.0f; private int direction = 1; private Rigidbody2D rb; private bool isMove = true; private void Start() { rb = GetComponent<Rigidbody2D>(); } private void FixedUpdate() { if (!isMove) return; float posX = transform.position.x + MoveSpeed * Time.fixedDeltaTime * direction; transform.position = new Vector2(posX, transform.position.y); if (transform.position.x >= xPos_max) direction = -1; if (transform.position.x <= xPos_min) direction = 1; } public void MoveStop() { isMove = false; rb.simulated = true; } }
スクリプトの簡単な解説
- MoveStopを呼び出すことで左右の自動移動を停止
- Rigidbodyを有効にして箱を落下させる
Gamemanagerスクリプトの変更
Boxスクリプトで箱の移動制御を行うので、GameManagerでBoxスクリプトのMoveStopを呼ぶように変更します。
GameManagerのスクリプトを下記に変更します。
using UnityEngine; using UnityEngine.InputSystem; public class GameManager : MonoBehaviour { [SerializeField] private GameObject boxPrefab; [SerializeField] private Transform boxPosition; private Box currentBoxSC; private bool isBox = false; void Start() { SpawnBox(); } public void DropBox(InputAction.CallbackContext context) { if (!isBox) return; if (context.started) { isBox = false; currentBoxSC.MoveStop(); Invoke("SpawnBox", 1.0f); } } private void SpawnBox() { GameObject currentBox = Instantiate(boxPrefab, boxPosition.position, Quaternion.identity); currentBoxSC = currentBox.GetComponent<Box>(); isBox = true; } }
スクリプトの簡単な解説
- GameManagerスクリプトでは「箱の生成」だけを行うように変更。
- 箱の移動、落下はBoxスクリプトのMoveStop()を利用することで実装
実行すると下記のような感じに動きます。左クリックで真下に落下して箱が積み上がります。

ゲームオーバーの設定
次にゲームオーバーを設定していきます。
Hierarchyで「CreateEmpty」から空のオブジェクトを追加してBoxCollider2Dを追加。位置とBoxcolliderのサイズを変更して、台の下に設置します。

このライン(コライダー)に触れたらゲームオーバーになるようにしていきます。
ゲームオーバースクリプトの作成
新規スクリプトを作成して名前をGameOverLineにします。

スクリプトの中身は下記に変更します。
using UnityEngine; public class GameOverLine : MonoBehaviour { private void OnTriggerEnter2D(Collider2D collision) { SceneManager.LoadScene(0); } }
スクリプトの簡単な解説
- 設置したラインに箱が触れたらシーンの再読み込みを行っています。
シーン移動については下記記事が参考になります。
GameOverLineのBoxCollider2DのisTriggerにチェックを入れて、スクリプトを追加します。

実行して、箱が下に落ちたときに画面がリフレッシュしたら完成です。
あとがき
下記で実際に公開しているゲームは、見た目を変更し、カメラの移動やスコア、開始画面や終了画面などを追加しています。