Unityではじめてのテトリス風落ちゲー制作 ~最終回 ベストスコアセーブ編~

Unity

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

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

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

最終回はベストスコアセーブ編です。

前回記事では、タイトル画面を追加し、ゲームオーバーになったらタイトル画面に戻れる機能を追加しました。

今回はベストスコアを更新したらセーブし、ゲームを再開時にベストスコアをロードする機能を追加します。

尚、データのセーブ、ロード方法は別記事で詳しく解説していますので、本記事では簡単に説明させてもらいます。

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

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

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

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

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

下図のようにベストスコアを表示させましょう。細かな設定は、これまで解説していますので割愛します。

GameController.csにテキスト変数を追加してテキスト変更をスクリプトで扱えるようにします。

public Text bestScoreText;

Unityに戻ってGameControllerコンポーネントにBest Score Textオブジェクトをセットします。

ベストスコアをロードするメソッド作成

まず、JSON形式でベストスコアを格納するクラスを作成します。

[System.Serializable]
class SaveData
{
    public int bestScore;
}

ベストスコアをロードするためのメソッドです。このメソッドを呼び出すことによって、savefile.jsonにセーブされているベストスコアをロードします。

private void LoadBestScore()
{
    string path = Application.persistentDataPath + "/savefile.json";
    if (File.Exists(path))
    {
        string json = File.ReadAllText(path);
        SaveData data = JsonUtility.FromJson<SaveData>(json);

        bestScore = data.bestScore;
    }
    else
    {
        bestScore = 0;
    }

    bestScoreText.text = "Best Score: " + bestScore;
}

ベストスコアをセーブするメソッド作成

スコアがベストスコアを上回ったらJSON形式でスコアを保存します。

private void SaveBestScore(){

    if(score > bestScore)
    {
        bestScoreText.text = "Best Score: " + score;

        SaveData data = new SaveData();
        data.bestScore = score;

        string json = JsonUtility.ToJson(data);

        File.WriteAllText(Application.persistentDataPath + "/savefile.json", json);
    }
}

Application.persistentDataPathの場所は、Windowsだと\usr\AppData\LocalLow\CompanyNameになります。

ゲームスタート時にベストスコアをロードする処理追加

ゲームスタート時に作っておいたLoadBestScore()メソッドを呼び出せば、ベストスコアがロードされます。

void Start()
{
    /*
    (省略)
    */

    LoadBestScore();
    
    /*
    (省略)
    */
}

ゲームオーバー時にベストスコアをセーブする処理追加

ゲームオーバー時に作っておいたSaveBestScore()メソッドを呼び出しましょう!

void Update() {
    switch(gameStat){
        /*
        (省略)
        */    
        case GAMEOVER:
            SaveBestScore();
            gameOverText.gameObject.SetActive(true);
            restartButton.gameObject.SetActive(true);
            returnTitleButton.gameObject.SetActive(true);
            break;
    }
    /*
    (省略)
    */
}

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

ゲームオーバー時にベストスコアが更新されました。

まとめ

最終回では、ベストスコアを更新したらセーブし、ゲームを再開時にベストスコアをロードする機能を追加しました。

データのセーブ、ロード方法は簡単に説明しましたが、別記事で詳しく解説していますので参考に。

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