WindowsでのPlayerPrefsのデータを消す

PlayerPrefsを使うとセーブが作れます。当然プラットフォームによらないので、一度コードを書けばAndroid/iOSはもちろんPC上でもセーブがされています。私はWindowsで開発をしているので今日はその問題について書こうと思います。

セーブがどこに保存されているかというとWindowsではレジストリになります。レジストリはプログラムが設定情報などを書き込むデータの保存場所です。PlayerPrefsを使うと、このレジストリにセーブが保存されるというのはあまり良くありません。データの保存場所なのだからそこに保存することは自然に見えるのですが、大きな問題はセーブ内容を直接見れることと、編集できてしまうことです。特に編集できてしまうのが悪影響を与えます。範囲外のデータが保存されるとプログラムがおかしくなるというのはよくあることです。
開発中はセーブを自由にいじりやすいというのはメリットなのですが、配布するゲームのセーブがいじれてしまうのはまずいです。Unityを使ってPCゲームを一般に配布するなら、セーブ方法は自前でファイルに保存するように実装しないと駄目でしょう。

Androidとかだともう少しセーブがいじりづらい仕組みのようなので、気にしないで使うことにしています。とはいえ気になる人は自分でファイルを作ってデータを保存するのが良いのは間違いないです。セーブの改ざんをどこまで防ぎたいかによって手間の掛け方が違うということです。

Windowsでセーブ内容を見るにはregedit.exeを使います。これはレジストリエディタというものでWindowsに付属しています。名前の通り簡単にレジストリがいじれます。 プログラムを検索すれば見つかるので、regeditで検索して開いてみてください。
PlayerPrefsの解説ページにあるようにHKCU\Software\[company name]\[product name]キーのところに保存されています。このキーはレジストリエディタの左側のフォルダみたいなものです。HKCUというのが略でHKEY_CURRENT_USERのキーを表しています。
下の図だとcompany nameがFreelyAppsでproduct nameがFreelyAppsキーの下にいくつか並んでいます。当然これはPlayer Settingsの値によって決まっています。プロジェクトごとにproduct nameが違えばちゃんと区別されているでしょう。

名前と書いてあるものがPlayerPrefsのkeyに対応し、データが保存されている値になります。このデータを編集するとセーブを編集することが可能です。また項目を削除すればセーブからデータの一部がなくなったことになります。

プロジェクトに対応するキーを削除するとセーブがなくなるので、いちからゲームを始めた状態を作りたいときはそうすると便利かもしれません。
ただキーが削除できない場合があります。先ほどの画像のトランプ・ナポレオンというキーの下の謎の文字列はそういったキーです。選択すると下のようなエラーが発生します。もちろんキーを消すこともできません。

この原因はキーにnull文字が含まれている場合だそうで、キーが文字化けしているのでわかりやすいエラーです。null文字ってC言語のやつと同じなのかとかなんで発生するのかはよくわかりませんでしたが、RegDelNullというマイクロソフトによるこの問題の対応ソフトがあるので使うと削除できます。regeditにこの機能を入れておいてよとか思いつつ、ダウンロードして実行してみました。

こんな風に-sをつけておくとHKCU/Software/FreelyAppsキーの下を再帰的に検索してnull文字を検知してくれます。見つけると消すか聞いてくるのでYes答えましょう。これでレジストリエディタで消せなかった文字化けしているキーを消すことができます。

たぶん日本語名のアプリだから起こる問題なのだと思います。英語のタイトルのアプリでは起きてないと思うので、その可能性が高いです。

レジストリをいじるときは注意しましょう。
最悪パソコンが起動しなくなる恐れがあります。