ブロック崩し(breakout)を簡単に作成。Part3.終了判定と終了画面|Unityゲーム制作

Unity2Dで「ブロック崩し(breakout)」を作成。Part3では終了判定と終了画面を実装していきます。

はじめに

part1は下記から。

今回やる事

Part1ではパドルとボールを作成、Part2は「ブロックを壊す」、「スコア加算」、「ボール消失」を実装しました。Part3では「終了判定」と「終了画面」を実装していきます。

作成開始

終了画面を作成した後、細かい修正をしていきます。

終了画面を作成

新規でシーンを作成してシーン名を「gameover」にします。Hierarchyメニューで「UI」→「Legacy」→「Text」を2つ追加します。

名前を「TitleText」、「ScoreText」に変更して好きな位置に変更します。

新規オブジェクトを追加して名前を「GameOver」に変更、同名でスクリプトを追加します。

スクリプトの変更

GameManagerスクリプトを下記に変更します。読み込むシーンがない場合、ゲームクリアとしています。

using System;
using UnityEngine;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
    public static GameManager instance { get; private set; }
    public String TitleText;
    public int score = 0;

    private int stage = 1;
    private int life = 3;

    private void Awake()
    {
        instance = this;
        DontDestroyOnLoad(gameObject);
    }
    private void Start()
    {
        LoadStage(1);
    }

    private void LoadStage(int stage)
    {
        this.stage = stage;
        String scenePath = "stage" + stage;
        if (SceneUtility.GetBuildIndexByScenePath(scenePath) == -1)
        {
            TitleText = "GAME CLEAR";
            GameOver();
        }
        else
            SceneManager.LoadScene(scenePath);
    }

    public void AddScore(int score)
    {
        this.score += score;
    }
    public void NextStage()
    {
        LoadStage(this.stage + 1);
    }
    public void DecLife()
    {
        this.life--;

        if (this.life <= 0)
        {
            TitleText = "GAME OVER";
            GameOver();
        }
        else
        {
            GameObject.Find("Ball").GetComponent<Ball>().ResetBall();
        }
    }
    private void GameOver()
    {
        SceneManager.LoadScene("gameover");
    }
}

GameOverスクリプトを下記に変更します。タイトルをセットしてゲームクリアとゲームオーバーを切り替え、スコアを表示します。

using UnityEngine;
using UnityEngine.UI;

public class GameOver : MonoBehaviour
{
    [SerializeField] private Text TileText;
    [SerializeField] private Text ScoreText;

    private void Start()
    {
        TileText.text = GameManager.instance.TitleText;
        ScoreText.text = "SCORE: " + GameManager.instance.score.ToString();
    }
}

パラメータをセットします。

BuildSettingsにシーンを追加します。

これでブロック崩しゲームの一通りの流れが完成です。

ボールの動きを調整

少し補足で、ボールの動きを調整していきます。

開始時のボール

まずは初期のボール(ゲーム開始時)に角度を付けます。下記のようにスクリプトを変更して、ランダムに角度をつけます。

    public void ResetBall()
    {
        transform.position = Vector2.zero;

        float x = Random.Range(-0.5f, 0.5f);
        rigidbody.velocity = new Vector2(x, -speed);
    }

跳ね返りの調整

次にパドルのBoxcollider2DをPolygonCollider2Dに変更して下記のようにコライダーをセットします。

実行すると下記のようにボールの動き(跳ね返り)が良い感じになります。

実際はここから更に修正する部分がたくさんあります。

例えば、各ステージにスコアを表示したり、ボールの残り数を表示、ブロックが壊れたときのアニメーションや壊れないブロックを作成など。ここからの調整が一番時間が掛かり、大変だったりします。

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