PlayerPrefs 技術資料
PlayerPrefsは、Unityエンジンにおいて、簡単なデータの保存と読み込みを行うための機能です。主にユーザーの設定情報や小規模なデータ(例:音量、ハイスコア、プレイヤー名など)を保持するために使用されます。PlayerPrefsは、アプリケーションの終了後もデータを保持するため、次回起動時に前回の状態を復元することが可能です。
機能と目的
PlayerPrefsは、以下の目的で使用されます:
- 設定情報の保存:音量、画面の明るさ、コントロール設定など。
- ゲームデータの保存:ハイスコア、現在のレベル、プレイヤーの進行状況など。
- ユーザー情報の保存:プレイヤー名、選択したキャラクターなど。
PlayerPrefsは、以下の機能を提供します:
- データの保存、読み込み、削除。
- シンプルなAPIで容易に操作可能。
- 小規模なデータの保存に適している。
データ型
PlayerPrefsは、以下の3種類のデータ型をサポートしています:
- 整数(int)
- 浮動小数点数(float)
- 文字列(string)
複雑なデータ型(例:オブジェクト、リスト)を保存する場合は、シリアライズや他の保存方法を検討する必要があります。
使用方法
データの保存
データを保存する際には、SetInt
、SetFloat
、SetString
メソッドを使用します。データを保存した後、Save
メソッドを呼び出すことで確実に保存されます。
// 整数を保存する(例:ハイスコア)
PlayerPrefs.SetInt("HighScore", 100);
// 浮動小数点数を保存する(例:音量)
PlayerPrefs.SetFloat("Volume", 0.8f);
// 文字列を保存する(例:プレイヤー名)
PlayerPrefs.SetString("PlayerName", "Alice");
// 変更を保存する
PlayerPrefs.Save();
データの読み込み
保存されたデータは、GetInt
、GetFloat
、GetString
メソッドを使用して読み込みます。データが存在しない場合のデフォルト値を設定することも可能です。
// 整数を読み込む(存在しない場合は0)
int highScore = PlayerPrefs.GetInt("HighScore", 0);
// 浮動小数点数を読み込む(存在しない場合は0.0f)
float volume = PlayerPrefs.GetFloat("Volume", 0.0f);
// 文字列を読み込む(存在しない場合は空文字)
string playerName = PlayerPrefs.GetString("PlayerName", "");
データの削除
不要になったデータを削除するには、DeleteKey
またはDeleteAll
メソッドを使用します。
// 特定のキーのデータを削除
PlayerPrefs.DeleteKey("HighScore");
// すべてのデータを削除
PlayerPrefs.DeleteAll();
各プラットフォームでの保存場所
PlayerPrefs で保存したデータは、各プラットフォームごとに異なる場所に保存されます。以下に、代表的なプラットフォームでの保存場所を示します。
- Windows: レジストリに保存されます。
- パス:
HKEY_CURRENT_USER\Software\[会社名]\[プロジェクト名]
- パス:
- Mac OS: ローカルファイルとして保存されます。
- パス:
~/Library/Preferences/[会社名].[プロジェクト名].plist
- パス:
- iOS/Android: ローカルファイルとして保存されます。
- iOS パス:
~/Library/Preferences/[会社名].[プロジェクト名].plist
- Android パス:
/data/data/[アプリパッケージ名]/shared_prefs/[プロジェクト名].xml
- iOS パス:
注意点
データ型の制限:
- PlayerPrefsは基本的なデータ型(int, float, string)のみをサポートしています。複雑なデータを保存する場合は、他の方法(例:JSONシリアライズ、ファイル保存)を検討してください。
セキュリティ:
- PlayerPrefsに保存されたデータは暗号化されていません。ユーザーが簡単にデータを改ざんできるため、重要なデータ(例:ハイスコアやゲーム進行状況)を保護する必要がある場合は、別の保存方法を使用してください。
サイズ制限:
- PlayerPrefsは小規模なデータの保存に適しています。大量のデータを保存すると、読み書きのパフォーマンスに影響を与える可能性があります。
プラットフォーム依存性:
- PlayerPrefsの保存場所や動作はプラットフォームによって異なる場合があります。クロスプラットフォーム対応を考慮する際には注意が必要です。
ベストプラクティス
キーの一貫性:
保存するデータに対して一貫したキー名を使用し、ハードコーディングを避けるために定数を利用しましょう。
public static class PlayerPrefsKeys
{
public const string HighScore = "HighScore";
public const string Volume = "Volume";
public const string PlayerName = "PlayerName";
}
// 使用例
PlayerPrefs.SetInt(PlayerPrefsKeys.HighScore, 100);
デフォルト値の設定:
データが存在しない場合に備えて、適切なデフォルト値を設定しましょう。
保存タイミングの最適化:
頻繁な保存はパフォーマンスに影響を与える可能性があるため、必要なタイミングでのみ保存を行います。例えば、設定変更時やゲーム終了時など。
データの検証:
読み込んだデータが有効かどうかを検証し、不正な値が存在しないか確認します。
例
以下に、PlayerPrefsを使用した簡単なスクリプト例を示します。
using UnityEngine;
public class PlayerSettings : MonoBehaviour
{
// 設定を保存するメソッド
public void SaveSettings(int highScore, float volume, string playerName)
{
PlayerPrefs.SetInt("HighScore", highScore);
PlayerPrefs.SetFloat("Volume", volume);
PlayerPrefs.SetString("PlayerName", playerName);
PlayerPrefs.Save();
}
// 設定を読み込むメソッド
public void LoadSettings()
{
int highScore = PlayerPrefs.GetInt("HighScore", 0);
float volume = PlayerPrefs.GetFloat("Volume", 1.0f);
string playerName = PlayerPrefs.GetString("PlayerName", "Player");
Debug.Log($"HighScore: {highScore}, Volume: {volume}, PlayerName: {playerName}");
}
// 設定を削除するメソッド
public void ResetSettings()
{
PlayerPrefs.DeleteKey("HighScore");
PlayerPrefs.DeleteKey("Volume");
PlayerPrefs.DeleteKey("PlayerName");
}
}
このスクリプトでは、プレイヤーの設定を保存、読み込み、リセットする基本的な機能を提供しています。
ディスカッション
コメント一覧
まだ、コメントがありません