PlayerPrefs 技術資料

PlayerPrefsは、Unityエンジンにおいて、簡単なデータの保存と読み込みを行うための機能です。主にユーザーの設定情報や小規模なデータ(例:音量、ハイスコア、プレイヤー名など)を保持するために使用されます。PlayerPrefsは、アプリケーションの終了後もデータを保持するため、次回起動時に前回の状態を復元することが可能です。

機能と目的

PlayerPrefsは、以下の目的で使用されます:

  • 設定情報の保存:音量、画面の明るさ、コントロール設定など。
  • ゲームデータの保存:ハイスコア、現在のレベル、プレイヤーの進行状況など。
  • ユーザー情報の保存:プレイヤー名、選択したキャラクターなど。

PlayerPrefsは、以下の機能を提供します:

  • データの保存、読み込み、削除。
  • シンプルなAPIで容易に操作可能。
  • 小規模なデータの保存に適している。

データ型

PlayerPrefsは、以下の3種類のデータ型をサポートしています:

  1. 整数(int)
  2. 浮動小数点数(float)
  3. 文字列(string)

複雑なデータ型(例:オブジェクト、リスト)を保存する場合は、シリアライズや他の保存方法を検討する必要があります。

使用方法

データの保存

データを保存する際には、SetIntSetFloatSetStringメソッドを使用します。データを保存した後、Saveメソッドを呼び出すことで確実に保存されます。

// 整数を保存する(例:ハイスコア)
PlayerPrefs.SetInt("HighScore", 100);

// 浮動小数点数を保存する(例:音量)
PlayerPrefs.SetFloat("Volume", 0.8f);

// 文字列を保存する(例:プレイヤー名)
PlayerPrefs.SetString("PlayerName", "Alice");

// 変更を保存する
PlayerPrefs.Save();

データの読み込み

保存されたデータは、GetIntGetFloatGetStringメソッドを使用して読み込みます。データが存在しない場合のデフォルト値を設定することも可能です。

// 整数を読み込む(存在しない場合は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

注意点

データ型の制限:

  • 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");
    }
}

このスクリプトでは、プレイヤーの設定を保存、読み込み、リセットする基本的な機能を提供しています。

PlayerPrefs,Unity

Posted by hidepon