箱を積み上げるシンプルな落ち物ゲーム(StackBox)Part3.ゲームオーバー|Unityゲーム制作

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

実行して、箱が下に落ちたときに画面がリフレッシュしたら完成です。

あとがき

下記で実際に公開しているゲームは、見た目を変更し、カメラの移動やスコア、開始画面や終了画面などを追加しています。

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