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回
ディスカッション
コメント一覧
まだ、コメントがありません