GitHub - MessagePack-CSharp/MessagePack-CSharp: Extremely Fast MessagePack Serializer for C#(.NET, .NET Core, Unity, Xamarin). / msgpack.org[C#]
Extremely Fast MessagePack Serializer for C#(.NET, .NET Core, Unity, Xamarin). / msgpack.org - MessagePack-CSharp/MessagePack-CSharp
MessagePack for C#使ってますか?僕は最近unityに導入しました。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9TWVzc2FnZVBhY2slMjBmb3IlMjBDJTIzJTIwJUUzJTgyJTkyJTIwVW5pdHklMjBpT1MlMjAlRTMlODElQTclRTQlQkQlQkYlRTMlODElODYlRTYlOTklODIlRTMlODElQUUlRTMlODMlQTElRTMlODMlQTImdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPWFkYWQzNmYyZjFjMzc5YzhhNDFlYjQyYzNjYjM1YzRl&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBub2lyX25lbyZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9MGQwNDYyMGNjOTIzYzhjMzQ0NDQxZDY4ZDY5YjFjMTY&blend-x=142&blend-y=436&blend-mode=normal&txt64=aW4g44Kv44Op44K544K_44O85qCq5byP5Lya56S-&txt-width=770&txt-clip=end%2Cellipsis&txt-color=%23212121&txt-font=Hiragino%20Sans%20W6&txt-size=36&txt-x=156&txt-y=536&s=385cffdc7fca1f81f05ae14ec287161e)
MessagePack for C# を Unity iOS で使う時のメモ - Qiita
これはなにMessagePack for C# を Unity の iOS で使うとき一癖あったのでそのメモです。環境macOS Mojave 10.14.1Unity 2018.2.10f1…
今やみんなIL2CPPなのでコードの事前生成が必要です。上記記事を参考にしましょう。ちなみに僕はruby scriptでmpc.exeを実行するようにしました。
これでJsonUtitlityの代わりにサクッとバイナリファイル使えると思ったらmpc.exeがエラー出しまくりました。ググってもよくわからなかったのでエラー文から推測しました。直りました。
Unity実行時エラー
mpc.exeを実行してコード生成しましょう。そしてResolverまわりの初期化を使う前に呼びましょう。
mpc.exeエラー
Unhandled Error:MessagePack.CodeGenerator.MessagePackGeneratorResolveFailedException: Serialization Object must mark MessagePackObjectAttribute. type: global::GameActor
GameActorクラスに[MessagePackObject]のつけ忘れです
Unhandled Error:MessagePack.CodeGenerator.MessagePackGeneratorResolveFailedException: key is duplicated, all members key must be unique. type: global::GameActor member:_id
GameActorクラスのメンバ変数_idのKeyアトリビュートはすでに使用されてます。継承してると分かりにくい…
Unhandled Error:MessagePack.CodeGenerator.MessagePackGeneratorResolveFailedException: Serialization Type must mark UnionAttribute. type: global::GameCharacter
AbstractやInterfaceであるGameCharacterクラスの場合は[Union(0, typeof(GameActor))]アトリビュートを使うのだ
Unhandled Error:MessagePack.CodeGenerator.MessagePackGeneratorResolveFailedException: all public members must mark KeyAttribute or IgnoreMemberAttribute. type: global::GameActor member:CharaType
GameActorクラスのCharaTypeプロパティに[IgnoreMember]のつけ忘れです
Unhandled Error:System.AggregateException: One or more errors occurred. (Mismatched target events) ---> System.InvalidOperationException: Mismatched target events
謎です。突然出ました。rubyスクリプトからmpc.exe呼び出すのをやめて、コマンドラインgで直接mpc.exeを実行したら正常にいけました。とあるアセットがAssembly definition fileを使ってるのが今までにないことです。そのせい?
自作のstruct型もエラーの原因になりそうです(下記リンクの改変mpc.exeで無限ループっぽい挙動になりました
mpc.exe: exception occured while trying to generate · Issue #386 · MessagePack-CSharp/MessagePack-CSharp
Hi there, I'm currently working on a Unity project that is not PC exclusive and the other platforms require IL2CPP to build. After looking at the documentation ...
まとめ
ドキュメントさらっと読んで暗記して、エラー文から推測しないとはまります。