Unityではじめてのテトリス風落ちゲー制作 ~その9 ゲームオーバー機能追加編~

Unity

Unityでテトリス風落ちゲーを作ってみたいけど、何から手を付けていいか分からない。私もそんな一人です。ここでは、自分の勉強も含めて、簡単なテトリス風落ちゲーを制作していく過程を掲載していきます。

この連載を最後まで読めば、このようなテトリス風落ちゲーが1人で作れるようになります。

別ウィンドウで開く場合はこちら

今回はゲームオーバー機能追加編です。

前回記事では、消去列数に応じてスコアを加算する仕組みを作りました。

今回は、最上位列までブロックが積みあがったらゲームオーバーになる機能を追加します。

この記事はこんな人におすすめ!

  • 用意されたアセットを極力使わず、自分の力でゲームを作りたい
  • プログラミング初心者で1つ1つ丁寧に解説した記事が読みたい
  • Unity初心者がスキルを上げながらゲームを制作していく過程を見たい

本ゲーム制作方法は自己流です。もっと簡単に作る方法もあると思いますので、ご了承下さい。

ゲーム画面にGame Overと表示させるためのテキストオブジェクトを追加

まず、ゲーム画面にGame Overと表示させるため、テキストオブジェクトを追加します。

HierarchyウィンドウからUI > Textを選択し、テキストオブジェクトを作成しましょう。名称をGameOver Textに変更します。

Textコンポーネントの設定を下図のように変更しましょう。

Sceneウィンドウには、下図のようにGame Overのテキストが表示されます。

ゲーム開始時にはGame Overのテキストは非表示にしますので、下図のチェックボックスをオフにします。

続いて、スクリプト上からGameOver Textオブジェクトを操作出来るようにします。

GameControllerスクリプトにText型の変数を宣言します。

public Text gameOverText;

Game ControllerコンポーネントにgameOverText変数が追加されますので、GameOver Textオブジェクトをドラッグします。

これでスクリプト上からGameOver Textを操作出来ます。

ゲームオーバー判定メソッドの作成

最上位列がブロックで埋まったらゲームオーバーと判定するメソッドを作成します。

GameControllerスクリプトを開いて下さい。

下記メソッドを追記します。

private bool JudgeGameOver()
{
    if(blockStat[fallBlockInitPosY, fallBlockInitPosX] == 3)
    {
        return true;
    }
    else
    {
        return false;
    }
}

落下ブロックの初期位置が配置ブロック(=3)の時にJudgeGameOverはtrueを返します。

ゲームオーバーを判定し、GameOverテキストオブジェクトをアクティブ化

JudgeGameOverメソッドを使ってゲームオーバーの時にゲーム画面上に”Game Over”と表示させます。

状態遷移図を基に、GROUND状態のときにJudgeGameOverメソッドによってゲームオーバーを判定します。ゲームオーバーと判定したら、GAME OVER状態に遷移し、GameOver Textオブジェクトをアクティブにします。ここでも状態遷移図を作っておくとプログラムを書くのが楽ちんですね。

GameControllerスクリプトのUpdateメソッドに上記処理を追加します。

void Update() {
    switch(gameStat){
        case START:
            /* (省略) */
            break;

        case GROUND:
            /* (省略) */

            // 落下ブロックの着地確定
            if(groundCountTime >= 1){
                /* (省略) */

                // 1列以上ブロックが揃ったら"ERASE"に遷移
                if(JudgeEraseRow()){
                    gameStat = ERASE;
                }
                // 最上位までブロックが積みあがったら"GAMEOVER"に遷移
                else if(JudgeGameOver()){
                    gameStat = GAMEOVER;
                }
                else
                {
                    NextBlockSet();
                    gameStat = START;          
                }
                
            }
            break;

        case ERASE:
            /* (省略) */
            break;
            
        case GAMEOVER:
            gameOverText.gameObject.SetActive(true);
            break;
    }
}

実際にゲームを動かしてみよう

最上位列までブロックが積みあがったらゲーム画面にGame Overと表示されるようになりました!

まとめ

今回はゲームオーバー機能追加編として、最上位列までブロックが積みあがったらゲームオーバーになる機能を追加しました。

作り方をおさらいすると

  • ゲーム画面にGame Overと表示させるためのテキストオブジェクトを追加
  • ゲームオーバー判定メソッドの作成
  • ゲームオーバーを判定し、GameOverテキストオブジェクトをアクティブ化

です。

次回は、タイトル画面を作り、シーンを遷移させる機能を追加していきたいと思います。

最後までお読み頂きありがとうございました。