⛳
【Unity】PlayerPrefsの使い方と落とし穴【コピペ可】
使い方と落とし穴シリーズ一覧
さっさと試したい人向け コピペ可コード
using UnityEngine;
public class Test_PlayerPrefs : MonoBehaviour
{
void Start()
{
PlayerPrefs.SetInt("HighScore", 100);
PlayerPrefs.SetFloat("Volume", 0.8f);
PlayerPrefs.SetString("PlayerName", "ChatGPT");
PlayerPrefs.Save();
Debug.Log("データを保存");
int score = PlayerPrefs.GetInt("HighScore", 0);
float volume = PlayerPrefs.GetFloat("Volume", 1.0f);
string name = PlayerPrefs.GetString("PlayerName", "DefaultName");
Debug.Log($"HighScore: {score}");
Debug.Log($"Volume: {volume}");
Debug.Log($"PlayerName: {name}");
}
}
- 間違えて記事削除したので再投稿しました (めちゃくちゃ焦った)
一言
- 正直、他の手段を探った方がイイと思う (理由は「落とし穴」にて)
- ただ、簡単に使えて追加機能インストールの必要もないため、開発規模次第でアリ
PlayerPrefs
を使用するケース
- 軽量で簡単なデータの保存(例:ハイスコア、プレイヤー名)
- 最悪書き換えられてもいいデータ
PlayerPrefs
の使い方
基本操作
- 書込と読込
-
Get…
関数の第二引数では、指定キー対応の値が無い場合に返す値を指定している
PlayerPrefs.SetInt("Score", 100);
int score = PlayerPrefs.GetInt("Score", 0); //戻り値:100
- 指定キーの有無をチェック
string key = "Score"
PlayerPrefs.SetString(key, "Test");
if(PlayerPrefs.HasKey(key))
- 明示的に保存
PlayerPrefs.SetFloat("Score", 3.14);
PlayerPrefs.Save(); //それまでの内容を全て保存する
- 削除
PlayerPrefs.DeleteAll(); //全データの削除
PlayerPrefs.DeleteKey("KeyString"); //指定キーの削除
対応する型
- int (
SetInt
,GetInt
) - float (
SetFloat
,GetFloat
) - string (
SetString
,GetString
) - 以上。
PlayerPrefs
のメリット
- 簡単に使える(ファイル操作不要)
- Unity対応の全プラットフォームで使える
オイラはこんな落とし穴に出会った
セキュリティ面が不安
- 平文で保存される
- 特にWindows,Mac,Linux,WebGLプラットフォームは容易にアクセスできる場所に保存
- 暗号化処理の実装で解決できないこともない
複雑なデータに向かない
- 前述の通り、
int
,float
,string
にのみ対応 - シリアライズ化, JSONを介して
string
で渡す等で解決できないこともない
WebGLでは約1MBが保存上限
WebGL: Unity stores up to 1MB of PlayerPrefs data using the browser's IndexedDB API. For more information, see IndexedDB.
Unity - PlayerPrefs
他の保存手段との比較
手段 | 特徴 | 向いてる用途 | 実現例 |
---|---|---|---|
PlayerPrefs |
超簡単,セキュリティ不安 | オプション保存 | PlayerPrefs.SetXxx() |
JSON + ファイル保存 | 柔軟な構造 | セーブスロット,進行データ |
JsonUtility.ToJson() + File.WriteAllText()
|
ScriptableObject |
エディタで管理しやすい, 実行中の動的な保存には不向き | 定数,プリセット |
ScriptableObject 継承 |
MessagePack など |
圧縮, 高速, バイナリ形式 | セーブシステム, 外部送信 |
FileStream + ライブラリ |
Discussion