【Unity】PlayerPrefsを使わなくてもレジストリが使われる【Windowsアプリ】
Unityで作ったWindowsアプリのレジストリの使用状況に関する覚書です。
概要
今回は、Unityで作ったWindowsアプリのレジストリの使用状況に関する覚書を掲載する。
仕様書
環境
- Unity 2021.3.3f1
覚書
PlayerPrefsなどを使ってデータを保存した場合にUnityで作ったWindowsアプリではレジストリが使われる。
PlayerPrefs.SetString
関数などで保存されたデータはレジストリのコンピュータ\HKEY_CURRENT_USER\SOFTWARE\<Company Name>\<Product Name>
の中にキーと値として保存される。
<Company Name>
と<Product Name>
はUnity EditorのProject SettingsのPlayerのそれぞれの項目で設定できる。
今回は、PlayerPrefs.SetString
関数とPlayerPrefs.DeleteKey
関数とPlayerPrefs.DeleteAll
関数をそれぞれ実行した後にレジストリがどのような状態になってるか確認する。
PlayerPrefs.SetString
下記のコードを実行するとレジストリがどのような状態になってるか確認する。下記は、キーTEST_STRING
にNYAN
という値を書き込むコード。
PlayerPrefs.SetString("TEST_STRING", "NYAN");
実行後のレジストリは下図のようになる。実際にこの検証を行う場合に注意して欲しいのが、Unity Editor上の実行ではレジストリには書き込まれないので、Windows向けにビルドしたexeファイルを実行する。
自分がコードで指定したキー以外にもいろいろなデータが保存されてるのが分かる。ウィンドウの位置やサイズなどなど。
PlayerPrefs.DeleteKey
下記は、キーTEST_STRING
自体とその値を消去するコード。
PlayerPrefs.DeleteKey("TEST_STRING");
実行後のレジストリは下図のようになる。
TEST_STRING
の行が消える。
PlayerPrefs.DeleteAll
下記は、PlayerPrefsで保存したキーと値を消去するコード。
PlayerPrefs.DeleteAll();
キーTEST_STRING
以外にも表示に関するデータなどもいっしょに消える。
まとめ(感想文)
PlayerPrefs.SetString
関数を使わなくても、Unityで作ったWindowsアプリを実行するとレジストリが使われることが分かった。
正直、レジストリをデータ保存に使うのはちょっと…。他のOS向けのビルドと同様にファイルにしてもらった方が良いと個人的には思う。
レジストリを使うのが気になる場合は、現状アプリが不要になった段階でアンインストーラーなどをユーザーに実行してもらってレジストリを消すしかないのかもしれない。