こんにちは、アマギラスです。
Unityでセーブ機能を実装する際、最も手軽に使える方法の一つが PlayerPrefs を用いる方法です。PlayerPrefs は主に小規模なデータの保存に適しており、整数(int)、浮動小数点(float)、文字列(string)のデータを保存することができます。
この記事では、Unityで簡単なセーブ機能をPlayerPrefs を使って int 型や string 型のデータを保存し、ロードする基本的なセーブ機能を実装する方法を紹介します。
1. PlayerPrefsとは?
PlayerPrefs は、ゲーム内のデータを保存し、次回のプレイ時にロードできるようにするUnityのビルトイン機能です。PlayerPrefs は主にスコアや設定情報などの小規模なデータを保存するために使われます。
PlayerPrefs で保存できるデータ型は以下の3つです:
int: 整数データ
float: 浮動小数点データ
string: 文字列データ
2. セーブ機能の実装
2.1 int 型データの保存とロード
例えば、スコアやレベルなどを int 型で保存する場合は、以下のコードを使用します。
using UnityEngine;
public class SaveManager : MonoBehaviour
{
// スコアを保存するメソッド
public void SaveScore(int score)
{
PlayerPrefs.SetInt("PlayerScore", score); // "PlayerScore" というキーでスコアを保存
PlayerPrefs.Save(); // データを実際に保存する
Debug.Log("スコアを保存しました: " + score);
}
// スコアをロードするメソッド
public int LoadScore()
{
int defaultScore = 0; // スコアが存在しない場合に返すデフォルト値
int score = PlayerPrefs.GetInt("PlayerScore", defaultScore); // 保存されているスコアを取得
Debug.Log("ロードしたスコア: " + score);
return score;
}
}
2.2 string 型データの保存とロード
次に、例えばプレイヤー名などを string 型で保存する場合は、以下のコードを使います。
using UnityEngine;
public class SaveManager : MonoBehaviour
{
// プレイヤー名を保存するメソッド
public void SavePlayerName(string playerName)
{
PlayerPrefs.SetString("PlayerName", playerName); // "PlayerName" というキーでプレイヤー名を保存
PlayerPrefs.Save(); // データを実際に保存する
Debug.Log("プレイヤー名を保存しました: " + playerName);
}
// プレイヤー名をロードするメソッド
public string LoadPlayerName()
{
string defaultName = "Guest"; // プレイヤー名が存在しない場合のデフォルト値
string playerName = PlayerPrefs.GetString("PlayerName", defaultName); // 保存されているプレイヤー名を取得
Debug.Log("ロードしたプレイヤー名: " + playerName);
return playerName;
}
}
3. セーブ・ロード機能の実行
これらのセーブ機能をゲーム内で呼び出すには、例えばボタンに紐付けるか、ゲームの進行に応じて呼び出すようにします。
using UnityEngine;
public class GameManager : MonoBehaviour
{
public SaveManager saveManager;
void Start()
{
// ゲーム開始時にスコアをロード
int currentScore = saveManager.LoadScore();
Debug.Log("現在のスコア: " + currentScore);
// ゲーム開始時にプレイヤー名をロード
string playerName = saveManager.LoadPlayerName();
Debug.Log("現在のプレイヤー名: " + playerName);
}
public void OnSaveButtonPressed()
{
// スコアとプレイヤー名を保存
saveManager.SaveScore(100); // 例としてスコア100を保存
saveManager.SavePlayerName("JohnDoe"); // プレイヤー名を保存
}
public void OnLoadButtonPressed()
{
// スコアとプレイヤー名をロード
saveManager.LoadScore();
saveManager.LoadPlayerName();
}
}
3.1 PlayerPrefs.DeleteKey と PlayerPrefs.DeleteAll
保存したデータを削除したい場合は、PlayerPrefs.DeleteKey または PlayerPrefs.DeleteAll を使用します。
PlayerPrefs.DeleteKey("キー名"): 指定したキーのデータを削除します。
PlayerPrefs.DeleteAll(): 保存されている全てのデータを削除します(慎重に使う必要があります)。
// 特定のデータを削除
PlayerPrefs.DeleteKey("PlayerScore");
// 全てのデータを削除
PlayerPrefs.DeleteAll();
4. 注意点
PlayerPrefs は、ゲーム内の設定や簡単なデータの保存に適していますが、大量のデータやセキュリティが重要なデータを扱う場合には向いていません。その場合は、ファイル保存やデータベースを使用することを検討しましょう。
データを確実に保存するためには、PlayerPrefs.Save() を明示的に呼び出すことが推奨されます。データはアプリケーションが終了したタイミングでも保存されますが、明示的に保存することで安全性が高まります。
まとめ
今回は PlayerPrefs を使って簡単なセーブ機能を実装しました。PlayerPrefs は小規模なデータの保存に最適な方法であり、設定や進行状況を管理するのに非常に便利です。ぜひ、あなたのプロジェクトでも活用してみてください!