とりあえずMessagePackをunityで使いたい
ちゃんと使いたい人は調べてください。
とにかくとりあえず動かしてみたい人向けです。
そもそもMessagePack-CSharpって何?
C#(.NET, .NET Core, Unity, Xamarin)用の新しい高速なMessagePack実装
こちらをご覧ください。作者さんの解説です。
使い方
githubから入手
neuecc/MessagePack-CSharp
リリースからunitypackageとMessagePackUniversalCodeGenerator.zipを取得してください。
シリアライズしたいクラスの定義
SerializeTarget.cs
[MessagePackObject]
public class msgpacktest
{
[Key(0)]
public Vector3 pos { get; set; }
[Key(1)]
public Vector3 rot { get; set; }
}
[MessagePackObject]
public class testlist
{
[Key(0)]
public List<msgpacktest> list = new List<msgpacktest>();
}
コードジェネレート
MessagePackUniversalCodeGenerator.zipを任意の場所に解凍して
コマンドプロンプトから
mpc.exe -i [プロジェクト名].csproj -o "MessagePackGenerated.cs"
でMessagePackGenerated.csを自動生成してAssets内に配置します。
ソリューションが分かれてるときはクラス定義スクリプトのソリューションcsprojをinputに指定してください。
準備
スタートにこれ突っ込んでください(よくわかってない)
sample.cs
public class mspseriarizetest : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
MessagePack.Resolvers.CompositeResolver.RegisterAndSetAsDefault(
MessagePack.Unity.UnityResolver.Instance,
MessagePack.Resolvers.GeneratedResolver.Instance,
MessagePack.Resolvers.BuiltinResolver.Instance,
MessagePack.Resolvers.AttributeFormatterResolver.Instance,
MessagePack.Resolvers.PrimitiveObjectResolver.Instance
);
}
}
シリアライズとデシリアライズ
serializetest.cs
msgpacktest msg = new msgpacktest
{
pos = new Vector3(1, 2, 3),
rot = new Vector3(3, 4, 5),
};
//シリアライズ
byte[] bytes = MessagePackSerializer.Serialize(msg);//LZ4MessagePackSerialzier
//デシリアライズ
msgpacktest msg1 = MessagePackSerializer.Deserialize<msgpacktest>(bytes);
以上。多分これで最低限動かせるはず。
stringだけとかならコードジェネレート必要ないです。