Unityで学ぶC#メソッド入門:複数データの保存と読み込み


はじめに

Unityで学ぶC#メソッド入門:PlayerPrefsを使ったレベル保存と読み込み

これまでの記事で、レベルを保存する SaveLevel と レベルを読み込む LoadLevel を作りました。

今回はさらに一歩進めて、複数のデータ(レベル、スコア、アイテム名など) を保存・読み込みする方法を解説します。


PlayerPrefsで扱えるデータ型

PlayerPrefsは次の3種類のデータを扱えます:

  • int(整数) → SetInt / GetInt
  • float(小数) → SetFloat / GetFloat
  • string(文字列) → SetString / GetString

これを使えば、レベルだけでなくスコアやアイテム名なども簡単に保存できます。


複数データを保存するサンプル

public void SaveGameData(int level, float score, string itemName)
{
    if (level < 1 || 99 < level)
    {
        throw new Exception("レベルは1~99で指定してください");
    }

    // レベル(int)
    PlayerPrefs.SetInt("level", level);

    // スコア(float)
    PlayerPrefs.SetFloat("score", score);

    // アイテム名(string)
    PlayerPrefs.SetString("item", itemName);

    // 保存を確定
    PlayerPrefs.Save();

    Debug.Log("ゲームデータを保存しました!");
}

複数データを読み込むサンプル

public void LoadGameData(out int level, out float score, out string itemName)
{
    // レベル(存在しない場合は1)
    level = PlayerPrefs.HasKey("level") ? PlayerPrefs.GetInt("level") : 1;

    // スコア(存在しない場合は0)
    score = PlayerPrefs.HasKey("score") ? PlayerPrefs.GetFloat("score") : 0f;

    // アイテム名(存在しない場合は "なし")
    itemName = PlayerPrefs.HasKey("item") ? PlayerPrefs.GetString("item") : "なし";

    Debug.Log("ゲームデータを読み込みました! " +
              $"レベル: {level}, スコア: {score}, アイテム: {itemName}");
}

コード解説

1. データ型ごとに保存・取得

  • SetInt / GetInt → 整数データ(例:レベル、HP)
  • SetFloat / GetFloat → 小数データ(例:スコア、経験値)
  • SetString / GetString → 文字列データ(例:アイテム名、ユーザー名)

2. デフォルト値を設定

  • HasKey(“key") を使って存在チェックを行う
  • データがなければ「初期値」を返すようにする
  • これで、初回起動時やデータ削除後もゲームがエラーなく動作します

3. out パラメータを利用

public void LoadGameData(out int level, out float score, out string itemName)
  • out修飾子 を使うことで、複数の値をまとめて返すことができます
  • 呼び出し側で受け取れるようになります

実際の使い方

void Start()
{
    // データを保存
    SaveGameData(10, 1234.5f, "勇者の剣");

    // データを読み込み
    int level;
    float score;
    string itemName;

    LoadGameData(out level, out score, out itemName);

    Debug.Log($"現在のデータ → レベル:{level}, スコア:{score}, アイテム:{itemName}");
}

コンソール例:

ゲームデータを保存しました!
ゲームデータを読み込みました! レベル: 10, スコア: 1234.5, アイテム: 勇者の剣
現在のデータ → レベル:10, スコア:1234.5, アイテム:勇者の剣

まとめ

  • PlayerPrefsは int / float / string が保存可能
  • 複数データを扱うときは、キーを分けて保存する
  • HasKeyで存在確認し、デフォルト値を返す処理を入れると安全
  • 複数の戻り値は outパラメータ でまとめて返せる

👉 さらに応用するなら:

  • セーブデータをまとめて管理するクラス(GameDataクラス)を作る
  • JSON形式でシリアライズして保存する

といった方法もあります。これでデータの拡張性や見通しがもっと良くなります。


訪問数 4 回, 今日の訪問数 4回

PlayerPrefs,Unity

Posted by hidepon