この記事で言っていること
- EasySaveの設定でSetting → Rantime Settings → DirectoryをDataPathにした場合、データディレクトリはexeファイルが置いてあるフォルダではなく、
[ゲームフォルダまでのパス]/[ゲーム名]_Data
になる。 - EasySaveのfilePathは絶対パスで指定される。(なので
./hoge/save.es3
みたいに書くとNotFoundって言われる)
はじめに
UnityでゲームのデータをEasySaveで永久セーブしてPC向けにビルド後ロードする際、2つほどしくじりをしました。
この2つは原因が分かってしまえばくだらないことなんですが、備忘録的に残しておきます。
EasySaveのデータディレクトリ
EasySaveには、データディレクトリを変更する機能があります。Window → Easy Save 3 → Setting → Rantime Settings → Directoryから変更できます。
これはデフォルトだとpresidentDataPathになっているのですが、ゲームのフォルダと関係ない奥深くのフォルダを汚すのも気が憚られたため、DataPathに変更しました。
私はてっきりexeファイル直下がデータディレクトリだと思い込み、そこにセーブフォルダを置いたのですが、本当は[ゲームフォルダまでのパス]/[ゲーム名]_Data
がデータディレクトリであり、この中にセーブフォルダを入れないと、当然ながら見つかりません。このせいでデータが見つからず時間を取られました。
filePathの指定
EasySaveにはパスを指定してセーブ、ロードする機能があります。例えばこんな風に。
string filePath = "/save/savedata.es3";
var saveData = ES3.Load<int[,]>("sampleKey", filePath);
このfilePathですが、絶対パスで指定され、更に上のようにDirectoryをDataPathにしている場合、カレントディレクトリは[ゲームフォルダまでのパス]/[ゲーム名]_Data
にいる扱いになり、filePathの最初に結合されます。
これがどういうことかというと、filePathは本当は[ゲームフォルダまでのパス]/[ゲーム名]_Data/save/savedata.es3
となっているわけです。なので、./save/savedata.es3
みたいに相対パスで探そうとすると[ゲームフォルダまでのパス]/[ゲーム名]_Data/./save/savedata.es3
となり、いざビルドして実行した際に強制終了してわけも分からず原因を探し回ることになります。