1.MeeagePack简介

1.1什么是序列化与反序列化

在进入正题之前,咱们简略介绍下什么是序列化与反序列化。序列化和反序列化是计算机科学中用于将目标或数据结构转化为字节省或其他格局的进程,并在需求时将其康复为原始目标或数据结构的进程。

序列化是将目标或数据结构转化为字节省或其他格局的进程。经过序列化,能够将目标或数据结构存储在磁盘上或经过网络传输。序列化的结果是一个包含目标或数据结构的字节序列,能够被保存、传输或耐久化存储。

反序列化是将序列化的字节省或其他格局转化回目标或数据结构的进程。经过反序列化,能够从存储介质或网络中的字节省中重新创建原始的目标或数据结构。反序列化的进程将字节序列解析并康复为相应的目标或数据结构。

序列化和反序列化在许多运用程序中都起着重要的效果。它们能够用于数据耐久化、数据传输、远程进程调用(RPC)等方面。例如,当咱们需求将目标在不同的系统之间传输或存储时,能够将目标序列化为字节省,然后在另一个系统上进行反序列化以康复目标。

在许多编程言语中,序列化和反序列化功能通常由言语自身或第三方库供给。不同的序列化机制和格局能够运用不同的算法和协议来完成目标到字节省的转化和逆转化。一些常见的序列化格局包含JSON(JavaScript Object Notation)、XML(eXtensible Markup Language)、MessagePack、Protocol Buffers等。

1.2什么是MessagePack

Unity中如何使用4.7kStars开源项目MessagePack进行序列化与反序列化
经过上述简略介绍,咱们知道什么是序列化与反序列化,该技能在日常开发中非常常见,不同的编程言语都有对应的第三方库进行序列化与反序列化。在运用Unity及C#编程中,能够运用今天推荐的Github4.7KStart的开源项目MessagePack进行序列化与反序列化,优点是速度快、功能好,还内置了LZ4极快的紧缩算法,在大型项目中能明显功能。

MessagePack是适用于 C# 的极快MessagePack序列化器。它比MsgPack-Cli快 10 倍,而且功能优于其他 C# 序列化器。MessagePack for C# 还内置了对 LZ4 紧缩的支撑 – 一种极快的紧缩算法。功能很重要,尤其是在游戏、分布式计算、微服务或数据缓存等运用程序中。

2.Unity中MessagePack运用

2.1下载MessagePack的Unity专用包

github地址:github.com/MessagePack…

进入上述网址,在右侧找到release,点击进入

Unity中如何使用4.7kStars开源项目MessagePack进行序列化与反序列化

找到UnityPackage包,下载

Unity中如何使用4.7kStars开源项目MessagePack进行序列化与反序列化

2.2在Unity项目中导入MessagePack

打开Unity项目,挑选菜单栏Assets/Import Package,挑选刚刚下载的UnityPackage包

Unity中如何使用4.7kStars开源项目MessagePack进行序列化与反序列化

挑选之后会弹窗如下,挑选全部,点击Import导入即成功

Unity中如何使用4.7kStars开源项目MessagePack进行序列化与反序列化

2.3代码主动生成器

运用MessagePack进行序列化与反序列化,首要需求导入命名空间MessagePack,需求即将序列化的类用特性[MessagePackObject()]标识,要序列的数据类型的权限有必要是揭露(Public)的,当然也答应私有(Private),详细运用请参阅MessagePack官方运用,要序列化的数据类型用特性[Key(0)]进行标识,对不需求进行序列化与反序列的数据用特性[IgnoreMember] 标识,括号里的int值依次加一,演示代码如下:

namespace Assets.Libs.Config
{
    using MessagePack;
    /// <summary>
    /// 游戏记录
    /// </summary>
    [MessagePackObject()]            //对要进行序列化与反序列化的类用MessagePackObject()标识
    public class Record
    {
        /// <summary>
        /// 模式
        /// </summary>
        [Key(0)]                    //对揭露字段用[Key(0)]进行标识
        public string playMode;
        /// <summary>
        /// 分数
        /// </summary>
        [Key(1)]
        public float score;
        /// <summary>
        /// 长度
        /// </summary>
        [Key(2)]
        public float length;
        /// <summary>
        /// 单局时长
        /// </summary>
        [Key(3)]
        public string duration;
        /// <summary>
        /// 时间
        /// </summary>
        [Key(4)]
        public string timeOver; 
        /// <summary>
        /// 次数
        /// </summary>
        [IgnoreMember]              //对不进行序列化与反序列化的字段用[IgnoreMember]进行标识
        public string timeOver; 
    }
}

这儿messagePack供给了代码主动生成器,导入unityPackage同时也会生成主动代码生成器,坐落Unity菜单中Windows-MessagePack-CodeGenerator。点击后会弹出代码生成器,界面如下:

Unity中如何使用4.7kStars开源项目MessagePack进行序列化与反序列化

榜首栏为输入途径,这儿输入的途径为你想要序列化的CS文件位置,如图,我将一切要序列化的cs文件放在Assets文件下的Libs文件夹。第二栏为输出途径,如图我定义为Assets文件下的MessagePack文件夹,点击Generate后,一切序列化的代码将主动生成输出到MessagePack文件夹下。生成成功后Unity控制台将会打印相关的日志信息,如下:

Unity中如何使用4.7kStars开源项目MessagePack进行序列化与反序列化

同时也能够查看输出文件下是否新增了新主动生成的代码,如下:

Unity中如何使用4.7kStars开源项目MessagePack进行序列化与反序列化

3.在Unity中的实际运用

运用MessagePack进行序列化与反序列化,能够实现项目的装备、数据的快速保存即加载,在实际工程的运用能够参阅我的上一篇文章从0开始,用Unity写一个“健壮”的贪吃蛇项目。里边用MessagePack实现了游戏设置即游戏记录数据的保存及加载。

关于MessagePack在Unity项目中的简略运用介绍就到这儿了,更多运用欢迎大家评论区留言评论,谢谢!