LoginSignup
1

More than 3 years have passed since last update.

unityでとりあえずMessagePack for CSを使うやり方

Posted at

とりあえず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だけとかならコードジェネレート必要ないです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1