手把手教你如何在Unity中使用UnityGoogle.Protobuf3(三) 序列化与反序列化

本文手把手教你如何在Unity2018以上版本中使用UnityGoogle.Protobuf3进行序列化和反序列化操作。首先创建Unity工程并切换.NET框架至4.x,接着导入Google.Protobuf.dll。然后导入.proto协议文件编译出的.cs类,并编写序列化与反序列化工具类。最后,通过测试代码验证序列化与反序列化的正确性。提供两种编写工具类的方式,并鼓励读者根据喜好选择。

1.Untiy工程创建

首先创建一个UnityDemo,Unity版本最好在2018以上。

创建完成之后把项目.net框架切换为4.x

如下:

在这里插入图片描述

2.导入Google.Protobuf.dll

1.创建Plugins/Google.Protobuf.3.17.0文件夹,文件夹后面跟上Google.Protobuf的版本号,避免日后遗忘。

2.把第一章下载好的Google.Protobuf相关的Dll导入Unity Asset/Plugins/Google.Protobuf.3.17.0文件夹中

如下:
在这里插入图片描述
导入完成之后,我们就可以使用Protobuf了。

3.导入proto协议文件

1.把 手把手教你使用Google.Protobuf3(二) .proto数据文件转.cs脚本 编译出来的.cs协议类导入到Untiy中。

放到Scripts/Protocal文件夹下,等待我们后面使用

如下:

在这里插入图片描述

4.编写序列化与反序列化工具类

编写序列化工具类有两种方式:

  • 第一种是在类库中进行编写,做成dll进行使用。

  • 第二种是在Unity中创建脚本进行编写。

注意:以上两种方式任选其一使用即可。

1.序列化与反序列化源码

序列化与反序列化代码:

    /// <summary>
    /// 序列化
    /// </summary>
    /// <param name="message"></param>
    /// <returns></returns>
    public static byte[] Serialize(IMessage message)
    {
        return message.ToByteArray();
    }
    /// <summary>
    /// 反序列化
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="packct"></param>
    /// <returns></returns>
    public static T DeSerialize<T>(byte[] packct) where T : IMessage, new()
    {
        IMessage message = new T();
        try
        {
            return (T)message.Descriptor.Parser.ParseFrom(packct);
        }
        catch (System.Exception e)
        {
            throw e;
        }
    }

2. 编写序列化类库 导入Unity

找到我们第一节创建的类库,然后拷贝代码,using Google.Protobuf ,右键生成即可。
生成完毕后,导入Untiy。
.
在这里插入图片描述

2.在Unity中编写序列化脚本进行使用

创建Protobuffer.cs脚本,粘贴序列化代码,保存即可。
如下:

在这里插入图片描述

5.编写协议正反序列化测试代码

在Scripts文件夹下创建ProtobufTest脚本,把下面代码粘贴上去,保存

然后把该脚本拖拽到 Main Camera 上。

正反序列化测试代码:

 	void Start()
    {
        //类序列化为二进制
        userInfo userInfo = new userInfo();
        userInfo.Name = "ZM壹叶成名";
        userInfo.Gold = 8888888;
        userInfo.Diamonds = 666666;
        userInfo.Level = 999;
        byte[] data = Protobuffer.Serialize(userInfo);
        Debug.Log("data.length:" + data.Length);

        //二级制序列化为类
        userInfo info = Protobuffer.DeSerialize<userInfo>(data);
        Debug.Log(info.Name);
        Debug.Log(info.Gold);
        Debug.Log(info.Diamonds);
        Debug.Log(info.Level);
    }

在这里插入图片描述
在这里插入图片描述

6.序列化与反序列化验证

代码编写完毕之后,启动Unity进行测试

在这里插入图片描述

好了,Untiy如何使用Google.Protobuf3相信大家也已经学会了。

回顾以下,我们的 Google.Protobuf3.dll 获取 和 proto协议序列化和反序列化 都用两种方式。

使用方式还是非常灵活的,具体使用那种,我这里只能做个引导,具体还是要看大家的喜好来决定。

售后学习交流群:728685392 (领取优惠券和红包)

觉得本篇文章可以的话,记得动动小手点下关注哦,更多干货知识你来拿!

要在Unity使用Google.Protobuf.dll进行序列化反序列化,你需要按照以下步骤进行操作: 1. 下载并安装Google.Protobuf.dll。 2.Unity中创建一个新的C#脚本,并将其命名为“ProtoHelper”(或任何你想要的名称)。 3. 在脚本中添加以下代码: ```csharp using Google.Protobuf; using System.IO; public static class ProtoHelper { public static byte[] Serialize<T>(T obj) where T : IMessage<T> { using (MemoryStream stream = new MemoryStream()) { obj.WriteTo(stream); return stream.ToArray(); } } public static T Deserialize<T>(byte[] bytes) where T : IMessage<T>, new() { T message = new T(); message.MergeFrom(bytes); return message; } } ``` 这个代码片段创建了一个名为“ProtoHelper”的静态类,并包含两个静态方法:Serialize和Deserialize。 Serialize方法将一个IMessage<T>对象序列化为一个字节数组,而Deserialize方法将一个字节数组反序列化为一个IMessage<T>对象。 4. 现在你可以在任何其他C#脚本中使用这些方法来序列化反序列化你的ProtoBuf消息。例如: ```csharp using Google.Protobuf; using UnityEngine; public class MyClass : MonoBehaviour { private void Start() { // 创建一个新的ProtoBuf消息 MyMessage message = new MyMessage { Id = 123, Name = "John Doe" }; // 序列化消息 byte[] bytes = ProtoHelper.Serialize(message); // 反序列化消息 MyMessage deserializedMessage = ProtoHelper.Deserialize<MyMessage>(bytes); // 输出消息 Debug.Log(deserializedMessage); } } ``` 这个示例创建了一个名为“MyClass”的MonoBehaviour,并在Start方法中创建了一个新的MyMessage对象。然后,它使用ProtoHelper.Serialize方法将该消息序列化为一个字节数组,并使用ProtoHelper.Deserialize方法将该字节数组反序列化为一个新的MyMessage对象。最后,它将反序列化的消息输出到Unity的控制台窗口。 这就是使用Google.Protobuf.dll在Unity中进行序列化反序列化的基本步骤。记住,你需要正确安装Google.Protobuf.dll,以便在Unity使用它。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铸梦xy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值