箱を積み上げる簡単な落ち物ゲームを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にチェックを入れて、スクリプトを追加します。

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


