Unityエディタ上で実行した時と、Buildしたアプリ上で実行した時で
Application.persistentDataPathのパスが違ったので備忘録
Unityエディタでデータを保存したことがある場合だと、保存したデータが優先して読み込まれます。
環境
・MacOS BigSur 11.6.7
・Unity 2021.3.8
Application.persistentdatapath
Buildしたアプリケーションで実行する際、Unityエディタ上で実行した時に保存したデータが存在すれば、それを読み込む
/Users/{UserName}/Library/Application Support/{CompanyName}/{ProductName} を読み込む
つまり、開発者が編集したPCと同じPCでBuildしたアプリを実行するとデータが引き継がれる
Unityエディタ上で実行した時のデータがなければ、Unityエディタ上で実行した時とは別のパスを読み込む
/Users/{UserName}/Library/Application Support/{BundleIdentifier} を読み込む
つまり、開発者以外の人が、アプリケーションを実行するとこのパスにデータが作成される
余談
Unityの公式リファレンスによると、
「アプリケーションは、システム上で必要なデータを含む最も古いフォルダーを見つけて使用します。」
と書いてあるのに、違うじゃん!!という話。
古いデータではなく、正しくはエディタで実行したものを優先的に読み込む。
開発者的にはデバッグしたデータをそのままビルドした後も引き継げて便利だけど、ちょっと困った。
自分の場合はBundleIdentifierの設定をしていなかったために、原因不明のバグが発生していました。
共同制作している友達のPCで保存できるか試してたんですけど、以前に渡したBuildしたアプリが書き込んだセーブデータが
/Users/{UserName}/Library/Application Support/DefaultCompany/{ProductName}
に残っていたために、そちらのデータを読み込んでしまって一生ゲームが進行しない。という状態でした。
自分の環境だと、データを消去する際は
/Users/{UserName}/Library/Application Support/{CompanyName}/{ProductName} を消せばいいのですが、友人の場合だとそのパスにそもそもデータが存在しなかった。
ちなみに、CompanyName・ProductName, BundleIdentifierを設定している場合、していない場合だとパスが微妙に変わります。
Unityエディターで実行した際のパス
・CompanyName, ProductNameを設定している場合
/Users/{UserName}/Library/Application Support/{CompanyName}/{ProductName}
・設定していない場合
/Users/{UserName}/Library/Application Support/DefaultCompany/{ProductName}
Buildしたアプリ上でのパス
・BundleIdentifierを設定している場合
/Users/{UserName}/Library/Application Support/{BundleIdentifier}
・設定していない場合
/Users/{UserName}/Library/Application Support/com.DefaultCompany.2DProject
(2DProjectの箇所は最初に選んだテンプレート名になると思われます)
CompanyName, ProductName, BundleIdentifier については以下で設定できます
File/Build Settings/Player ProjectSettingsをクリックして出てくる
ProjectSettings内にで設定する
CompanyNameとProductName
BundleIdentifier
OtherSettings/MacAppStoreOptionsにある
何か間違いなどあれば指摘お願いします。