🐡
Unity(UaaL), iOS, Androidでローカル保存のデータを共有する
概要
- Unity as a Libraryを利用したネイティブ + Unityのアプリを開発している。Unity、Android、iOSのそれぞれの部分で、同じローカルの保存領域を参照し、データを共有したい。
- ユースケースとしては、iOSやAndroidのネイティブ部分で保存したデータを、Unity(UaaL)が参照する。
- それぞれのプラットフォームごとに用意されたローカルへのKey, Value形式の平文保存を利用する方法は以下の通り。
- Unity: PlayerPrefs
- Android: SharedPreferences
- iOS: UserDefaults
結論
- (以下、ネイティブで書き込んだデータをUnity側で読み取る例で説明する。)
- Unityは通常通りPlayerPrefsを利用
PlayerPrefs.GetInt("TestKey", 1); // 1はValueが無い時のデフォルト値。
- AndroidではSharedPreferencesのファイル名をPackageName(Application ID) + 特別な形で指定
SharedPreferences samplePrefs = getSharedPreferences("[Application IDと同じ文字列].v2.playerprefs", MODE_PRIVATE);
samplePrefs.edit().putInt("TestKey", 10).apply();
- iOSでは、通常通りUserDefaultsを利用
let userDefaults = UserDefaults.standard
userDefaults.set(10, forKey: "TestKey")
- この通り設定すると、ネイティブアプリでUaaL部分を起動すると、10が表示される。
詳細
- UnityのPlayerPrefsの保存場所や挙動はこちらの公式docを参照
Unity Androidと、ネイティブAndroidの比較
- Androidでは、xmlファイルが参照される。
- Unity Androidでは、
/data/data/PACKAGE_NAME/shared_prefs/PACKAGE_NAME.v2.playerprefs.xml
- ネイティブAndroidでは、SharedPreferences利用時は、
/data/data/PACKAGE_NAME/shared_prefs/PREFS_NAME.xml
- よって、PREFS_NAME = PACKAGE_NAMEとすればよい。なお、Android StudioにおけるPACKAGE_NAMEは、Application IDを指す。
Unity iOSと、ネイティブiOSの比較
- Unity iOSではファイル場所はドキュメントに記載されていない。
[NSUserDefaults standardUserDefaults]
を利用すると記載。 - 結論に書いた通り、UnityでもネイティブiOSでも特に意識することなく、PlayerPrefs/UserDefaultsにアクセスすればよい。
(補足)UnityのProduct Name, Package Nameと、ネイティブでの設定について
- 補足として、UnityのProject Settingsで設定するProduct Name, Package Nameと、Android Studio / XCodeで設定するPackage Name(Android StudioではApplication ID, XCodeではBundle Identifier)がどのように両立/上書きされるのかを検証する。
- 結論としては、
- Product NameはUnityで設定したものがUnity単体起動でも、UaaL状態でも参照される。
- Package Nameは、ネイティブで設定したもので上書きされる。
実験
- Unity部分を起動した直後にviewに表示されるようにして、実際の値を検証した。Unity C#の以下のコードでProduct, Package Nameを取得している。
string productName = Application.productName;
string packageName = Application.identifier;
結果
\ | Unity設定 | UnityEditor起動 | AndroidStudio/XCode設定 | UaaLをAndroid/iOS実機起動 |
---|---|---|---|---|
Product | ProductUnity | ProductUnity | 無し | ProductUnity |
Package | com.C.ProductUnity | com.C.ProductUnity | com.C.ProductMobile | com.C.ProductMobile |
Discussion