MessagePack for C#のエラーとその対処法一覧

Unity
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に導入しました。

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 ...

まとめ

ドキュメントさらっと読んで暗記して、エラー文から推測しないとはまります。