【初心者向け】Unityでスコアを保存する簡単な方法|ゲーム終了後も記録が残る!

Unity

Unityでゲームを作っていると、

「ハイスコアを保存したい」
「ゲームを終了してもクリア状況を残したい」
「ステージの解放状況を次回起動時にも反映したい」

といった場面が出てきます。

このようなデータ保存には、UnityのPlayerPrefsを使うと簡単に実装できます。

PlayerPrefsを使えば、ハイスコア、クリアタイム、プレイヤー名、ステージ解放状況など、ちょっとしたデータを保存できます。

この記事では、Unity初心者向けにPlayerPrefsを使ったセーブ機能の作り方を解説します。

まずはハイスコアを保存する基本の流れを確認し、そのあと保存データの削除、データの存在確認、int・float・stringの保存方法まで紹介します。

ステージ管理やシーン遷移と組み合わせることで、ゲームを終了しても進行状況が残る仕組みに発展させることができます。

この記事で分かること:

・Unityでセーブ機能を作る基本の流れ
・PlayerPrefsを使ってハイスコアを保存する方法
・保存したデータを取得する方法
・保存データを削除する方法
・PlayerPrefs.Save()が必要な理由
・int、float、stringのデータを保存する方法
・ステージ解放状況やクリア状況の保存に応用する考え方

💬 わからないことがあれば、遠慮なくコメント欄やX(旧Twitter)でご相談ください!
📱 アカウント → @otakutomo

Unityでハイスコアを保存する方法【PlayerPrefs】

まずは実際に使える実装コードを紹介します。
この方法で、ゲーム終了後もハイスコアのデータを保持することができます。

public int score;    //スコア
public int highScore = 0; // ハイスコアを保持

// "SCORE"をキーとして、ハイスコアを取得
//※値がない場合は0となる。
highScore = PlayerPrefs.GetInt("SCORE", 0);

if (highScore < score)  //ハイスコアを超えた場合に更新
{
      highScore = score;

   //"SCORE"をキーとして、ハイスコアを保存
      PlayerPrefs.SetInt("SCORE", highScore);
      PlayerPrefs.Save();//ディスクへの書き込み
}  

上記のコードの簡単な流れは以下の通りです。

  1. scoreとhighScoreの変数を定義
  2. PlayerPrefs.GetInt(“SCORE”, 0) で過去のスコアを取得(初回は0)
  3. score > highScore ならば新しいスコアで上書き
  4. PlayerPrefs.SetInt() で保存し
  5. PlayerPrefs.Save() でディスクに反映する(これが超重要!)

以上が大まかな流れです。
💡 注意点:
PlayerPrefs.Save() を忘れると、アプリ終了時にデータが保存されず、次回起動時にハイスコアがリセットされてしまいます。
※余談ですがわたしは、ディスクへの書き込みを忘れており、四苦八苦しました(笑)

このように、PlayerPrefs を使えば簡単にデータの保存ができるので、ハイスコア機能の第一歩としてぜひ使ってみてください!

ハイスコアを削除する方法【PlayerPrefs】

保存したハイスコアは何もしなければアプリを再起動しても残り続きます。
開発中にリセットしたい場合や、初期化ボタンを実装したいときは、以下のコードで削除できます。

🔸 特定のキー(ハイスコア)を削除する

// "SCORE"をキーとして、ハイスコアを削除する
PlayerPrefs.DeleteKey("SCORE");

🔸 全ての保存データを削除する

// 保存データの全てを削除する
PlayerPrefs.DeleteAll();

⚠️ DeleteAll()すべてのデータが消えるため注意が必要です。
スコア以外にも設定やセーブデータがある場合は、個別に DeleteKey() を使う方が安全です。

🔍 保存データの存在を確認する方法

保存されたデータが存在するかどうかを確認するには、PlayerPrefs.HasKey() を使います。

if (PlayerPrefs.HasKey ("SCORE")) {
    // 存在する
} else{
    // 存在しない
}

例:データがなければ初期値で表示する場合

if (PlayerPrefs.HasKey("SCORE")) {
    int highScore = PlayerPrefs.GetInt("SCORE");
    Debug.Log("ハイスコア:" + highScore);
} else {
    Debug.Log("ハイスコアの保存データがありません");
}

ハイスコア以外のデータ型も保存できる?【PlayerPrefsの型別関数】

これまで紹介した PlayerPrefs.SetInt()GetInt() は整数(int型)のスコア保存に使う関数でした。

実は、PlayerPrefsでは他にも3種類のデータ型を保存・取得できます。
以下に、保存&取得用の関数を一覧で紹介します。

保存関数説明対応する取得関数
SetInt(string key, int value)整数を保存GetInt(string key)
SetFloat(string key, float value)浮動小数点を保存GetFloat(string key)
SetString(string key, string value)文字列を保存GetString(string key)

使用例

🔹 浮動小数点(例:クリアタイムの保存)

PlayerPrefs.SetFloat("ClearTime", 12.34f);

// 取得
float clearTime = PlayerPrefs.GetFloat("ClearTime");

🔹 文字列(例:プレイヤー名の保存)

PlayerPrefs.SetString("PlayerName", "Tomo");

// 取得
string playerName = PlayerPrefs.GetString("PlayerName");

ステージ解放状況を保存したい場合は、ステージ管理の考え方と組み合わせると理解しやすくなります。

例えば、ステージ1をクリアしたらステージ2を解放し、その解放状況をPlayerPrefsに保存しておけば、ゲームを再起動しても解放済みステージを維持できます。

ステージ選択画面やステージ解放の作り方は、以下の記事で解説しています。

関連記事:
Unityでステージ選択画面を作る方法

まとめ:Unityの簡単なセーブ機能はPlayerPrefsから始めよう

今回は、UnityでPlayerPrefsを使ってセーブ機能を作る方法を解説しました。

PlayerPrefsを使えば、ハイスコア、クリアタイム、プレイヤー名、ステージ解放状況など、ちょっとしたデータを簡単に保存できます。

特にUnity初心者のうちは、まず「保存する」「取得する」「削除する」という基本の流れを理解することが大切です。

ステージ管理やシーン遷移と組み合わせることで、ゲームを終了しても進行状況を残したり、クリア済みステージを次回起動時に反映したりできるようになります。

まずはハイスコア保存のような小さな機能から試して、少しずつ実際のゲームに必要なセーブ処理へ応用していきましょう。

🧩 さらに学びたい方へおすすめ教材はこちら:


🚀 次のおすすめ記事:


💬 ご質問や不明点があればお気軽にご連絡ください!
コメント欄、またはX(旧Twitter)でも受け付けています。

📱 Twitter → @otakutomo

コメント

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