白黒羊

Utf8Json × Unity × iOS がうまく動かないときの対応

環境

Unity Editor Version: 2020.2.7f1
Utf8Json: Ver 1.3.7

Utf8Json導入

UnityでJsonを使いたいとき、Unity標準のJsonUtilityや.NETのJson.NETなどを使うことになると思いますが、速度を求める場合はUtf8Jsonが便利です。

こちらのサイトを参考に、Unity+il2cpp環境でも使えるようなセッティングをしてみました。

upmには対応していないので、.unitypackageからプロジェクトに導入します。

パッケージを解凍するとEditorでエラーが出るので、Api Compatibility Levelを.NET 4.xに、Allow ‘unsafe’ codeのチェックボックスにチェックを入れる必要があります。

Pre Code Generation(Unity/Xamarin Supports) を参考に、リリースページからUtf8Json.UniversalCodeGenerator.zipをダウンロードして、以下のようなコマンドを叩きます(Mac)。

dotnet Utf8Json/src/Utf8Json.UniversalCodeGenerator/bin/Debug/netcoreapp2.0/Utf8Json.UniversalCodeGenerator.dll -d Assets/Project/Scripts/ -o Assets/Project/Scripts/Utf8JsonGenerated.cs

iOSでビルドエラーが出たときの対応

これで使えるようになるはずなのですが、iOSでだけビルドエラーが出てしまいました。

対応策として、ProjectSettings.assetのapiCompatibilityLevelPerPlatformに iOS: 3と書かれている場合はそれを以下のようにテキストファイルとして開いて iPhone: 3 に編集してあげると動くようになります。

apiCompatibilityLevelPerPlatform:
Android: 3
Standalone: 3
WebGL: 3
iPhone: 3