【Unity】PlayerPrefsを使わなくてもレジストリが使われる【Windowsアプリ】

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【Unity】PlayerPrefsを使わなくてもレジストリが使われる【Windowsアプリ】

2022-6-14 |

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_STRINGNYANという値を書き込むコード。

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向けのビルドと同様にファイルにしてもらった方が良いと個人的には思う。

レジストリを使うのが気になる場合は、現状アプリが不要になった段階でアンインストーラーなどをユーザーに実行してもらってレジストリを消すしかないのかもしれない。