こんにちは、SAT-BOXのコアラです。
今日はタイトルの通り、PlayerPrefsの話です。
PlayerPrefsといえば、Unityでセーブ機能を作るときに使うものですよね!
簡単にセーブ、ロードができるので使いやすい反面、欠点があります。
欠点
1、保存できるものがint型、float型、string型に限られる
欠点1の話はしません!一行で完結しました。
欠点2が今日のメインストーリーです。僕がPlayerPrefsを使いたくない最大の理由がここにあります。
レジストリ
PlayerPrefsの保存場所は、OSによって異なります。
それについては、以前のSAT-BOXブログに書いてありました。
ameblo.jp
そして、Windowsだとレジストリに保存され、レジストリにはOSの重要な情報が入っているため、下手にいじるとPCが壊れます。
そんな僕からしたらレジストリに保存されるというのは、トラ、ウマ、コアラです。
なのでPlayerPrefsはあまり使わないのですが、ふと気になったことがありました。
「Windows10だったら保存場所変わってたりしないかな~」って
そんなに期待してませんでしたし、結論から言って変わってなかったです。
ですが、検証しているときに大事件が起こりました。
それは・・・
Unity5.5からレジストリに保存されていない!
6月最大の衝撃でした。
前後のバージョンをいくつか落として試しましたが、5.4.5まではレジストリにあることが確認できました。
しかし、5.5からのバージョンではレジストリの中に保存されていませんでした。
PlayerPrefs.GetString("Koala")などで保存したものは持ってこれたので保存はされているみたいですが・・・(レジストリの中も結構探しました・・・)
つまりどうゆうこと?
予想1 仕様が変わった
これが僕の中では濃厚ですが、Unityの5.5からのドキュメントなどを見ても、PlayerPrefsの保存場所はレジストリの中で変わっていませんでした。
また、調べても保存先が変わったというような情報は見つかりませんでした。
予想2 コアラがなんがミスした
ないと信じたい。
予想3 環境の違いでなんか起きた
謎
結論
わからんけどコアラが怪しい
全く心当たりはないですが、他の事例が見つからなかったので何かやっちゃったかもしれません。
それに、人を疑うくらいなら自分を疑いたかった・・・ かっこいー
最後に、今回の検証で作成したプロジェクトの数とソースコードを載せておきます
7つ!それぞれUnityのバージョンが違います!(これいらないかも
using UnityEngine; public class Sample : MonoBehaviour { // Use this for initialization void Start() { PlayerPrefs.SetString("Koala", "Koala!"); PlayerPrefs.Save(); Debug.Log("SAVE"); } }
間違ってないよね!?
是非皆さんも確認してみてください。僕も引き続き検証していきます。
以上、PlayerPrefsの謎でした!
※追記(2017年10月20日)
解決しました!
PlayerPrefsの謎(解決編) - SAT-BOX BLOG
レジストリの別の場所に保存されているようです。