Unityではじめてのテトリス風落ちゲー制作 ~その8 スコア加算編~

Unity

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

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

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

今回はスコア加算編です。

前回記事では、1列ブロックが揃ったのを判定し、ブロックを消去するまでのプログラムを解説しました。

今回は、消去列数に応じてスコアを加算する仕組みを作っていきます。

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

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

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

スコアを表示するTextオブジェクトを作成

まず、ゲーム画面上にスコアを表示するテキストオブジェクトを追加します。

HierarchyウィンドウからUI > Textを選択して下さい。

Canvasオブジェクトが出来、その下にTextオブジェクトが追加されます。名前をScore Textに変更しましょう。

次にInspectorウィンドウ TextコンポーネントのText、Font Size、Colorを下図のように変更します。

続いてSocre Textオブジェクトをゲーム画面左上に配置します。

Inspectorウィンドウ Rect TransformコンポーネントのAnchor Presetsを選択し、Altキーを押しましょう。すると、下図のような表示から

下図の表示に変わります。四角で囲まれた箇所をクリックして下さい。

Score Textオブジェクトがゲーム画面の左上に配置されました。

消去列に応じてスコアを加算するメソッド作成

ここでは、消去列に応じてスコアを加算するメソッドを作成していきます。

GameControllerスクリプトを開いて、下のAddScoreメソッドを追加して下さい。

private int AddScore(int rowNum)
{
    int addScore;

    if(rowNum == 1){
        addScore = 10;
    }
    else if(rowNum == 2){
        addScore = 30;
    }
    else if(rowNum == 3){
        addScore = 80;
    }
    else if(rowNum == 4){
        addScore = 200;
    }
    else{
        addScore = 0;
    }

    return addScore;
}

引数を消去列、戻り値を加算スコアとしています。1列揃ったら10点、2列揃ったら30点、3列揃ったら80点、4列揃ったら200点としました。

1列以上揃ったら、列数に応じたスコアを加算し、Textオブジェクトに反映するスクリプト作成

Score TextオブジェクトのTextをGameControllerスクリプト上から変更出来るように、以下をスクリプト先頭に追加します。

using UnityEngine.UI;

次にscoreText変数、score変数を追加します。

public Text scoreText;
private int score;

Unityに戻るとGame ControllerオブジェクトのGameControllerコンポーネントにscoreText変数が追加されますので、Score Textオブジェクトをドラッグします。

これでGameControlleスクリプト上からScore TextオブジェクトのTextを変更する準備が整いました。

では、消去列に応じた点数をscoreに加算し、scoreTextに反映するスクリプトを作成していきます。

まず、前回のブロック消去編で作成したBlockEraseメソッドを修正します。

消去列数eraseCountを戻り値として返すようにしました。

private int BlockErase(){
    int eraseCount;
    /*
    (省略)
    */

    return eraseCount;

}

eraseCountをAddScoreメソッドの引数とし、消去列数に応じた点数をscoreに加算します。そして、scoreTextにscoreを反映させます。


void Update() {
    switch(gameStat){
        /*
        (省略)
        */

        case ERASE:
            int n;
            n = BlockErase();
            score += AddScore(n);
            scoreText.text = "SCORE: " + score;
            NextBlockSet();
            gameStat = START;
            break;
            
    }
}

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

1列揃ったらゲーム画面左上に、消去列数に応じて加算されたスコアが表示されます。

まとめ

消去列数に応じてスコアを加算する仕組みを作りました。

今回以下を解説しました。

  • スコアを表示するTextオブジェクトを作成
  • 消去列に応じてスコアを加算するメソッド作成
  • 1列以上揃ったら、スコアを加算し、UI表示するスクリプト作成

次回は最上位列までブロックが埋まったらゲームオーバーする仕組みを作っていく予定です。

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