※ これは 2022/12/01 時点の Unity 2022.1.23f1 MemoryPack for C# v1.8.12 の情報です
最新版では動作が異なる可能性がありますのでご注意ください
少し前に使ってみた MessagePack for C# について
なんと性能がアップした後継のライブラリ MemoryPack for C# がリリースされたようなので、MessagePack から移行する形で使ってみたい
スポンサードリンク
まずは Package Manager を開き、Add package from git URL
で https://github.com/Cysharp/MemoryPack.git?path=src/MemoryPack.Unity/Assets/Plugins/MemoryPack
を入力してインポート
これで Unsafe がないとエラーメッセージが出る場合・・・
MemoryPack の github リポジトリ から System.Runtime.CompilerServices.Unsafe.dll
をダウンロードして Assets/Plugins
配下に追加する
ここから MessagePack から MemoryPack へのコード移行
SaveData.cs
は下記のような感じで、[MessagePackObject]
を [MemoryPackable]
、[Key]
を [MemoryPackOrder]
、[IgnoreMember]
を [MemoryPackIgnore]
、[SerializationConstructor]
を [MemoryPackConstructor]
にそれぞれ書き換える
using MemoryPack; using System; /// <summary> /// セーブデータ /// </summary> [MemoryPackable] [Serializable] public partial class SaveData { /// <summary> /// ID /// </summary> /// <value></value> [MemoryPackOrder(0)] public int Id { get; protected set; } = default; /// <summary> /// 保存日時 /// </summary> /// <value></value> [MemoryPackOrder(1)] public string Message { get; protected set; } = null; /// <summary> /// 空データフラグ /// </summary> [MemoryPackIgnore] public bool IsEmpty => this.Id == default; public SaveData() { } [MemoryPackConstructor] public SaveData(int id, string message) { this.Id = id; this.Message = message; } }
次に Test.cs
MessagePackSerializer
を MemoryPackSerializer
に書き換える
using MemoryPack; using UnityEngine; public class Test : MonoBehaviour { public void Awake() { // シリアライザの初期設定 // いらない! } public void Start() { // シリアライズしたものをデシリアライズしてみる var data = new SaveData(1, "ラグドールもふもふ巨大ねこ"); var serialized = MemoryPackSerializer.Serialize(data); var deserialized = MemoryPackSerializer.Deserialize<SaveData>(serialized); UnityEngine.Debug.Log( $"Id={deserialized.Id}, Message={deserialized.Message}"); } }
MemoryPack では Roslyn によるコード分析に対応しているため、なんとネイティブアプリ用の手動コード生成が不要になったらしい!
シリアライザーの初期設定もそれにともなって消えた!すごい!
とりあえずこのコードを実行してシリアライズ→デシリアライズを試してみると・・・
できた!これは MessagePack よりだいぶ進化してる・・・