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

11
1
0

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
  3. You can use dark theme
What you can do with signing up
11
1