Unity3D protobuf-net使用方式

本文详细介绍了如何在Unity中使用protobuf-net进行数据序列化和反序列化。步骤包括下载protobuf-net,设置Unity工程,编写.proto文件,生成.cs代码,并提供了一个简单的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、下载protobuf-net

 

2、创建Unity工程,创建一个Plugins文件夹,将protobuf-net解压把里面得protobuf-net放到Plugins

 

3、创建一个名为mcs的文本文件,里面写上-unsafe

 

4、重启Unity

 

5、编译自动生成cs代码工具

 

protogen.exe就是刚才生成的

 

 

6、编写.proto文件

 

message.proto里写入

1

2

3

4

5

6

7

8

9

10

message TeamCharacterOne

{

    required    uint64              CharacterId             = 1;

    required    string              CharacterName           = 2;

    required    int32               RoleId                  = 3;

    required    int32               Level                   = 4;

    required    int32               Ladder                  = 5;

    required    int32               FightPoint              = 6;

    optional    int32               QueueResult             = 7;   

}

  

7、 生成.cs代码

创建一个proto.bat文件文件

里面写入

@echo off  
rem 查找文件  
for /f "delims=" %%i in ('dir /b ".\*.proto"') do echo %%i  
rem 转cpp  for /f "delims=" %%i in ('dir /b/a "*.proto"') do protoc -I=. --cpp_out=. %%i  
for /f "delims=" %%i in ('dir /b/a "*.proto"') do protogen -i:%%i -o:%%~ni.cs  
pause

 

8、把代码放入Unity工程

using message;

using System.Collections;

using System.Collections.Generic;

using System.IO;

using UnityEngine;



public class NewBehaviourScript : MonoBehaviour {



    // Use this for initialization

    void Start () {

        var a = new TeamCharacterOne();

        a.CharacterId = 10;

        a.CharacterName = "fdsafd";

        var b = Serialize(a);



        var data = Deserialize<TeamCharacterOne>(b);

        Debug.Log(data.CharacterName);

    }

     

    // Update is called once per frame

    void Update () {

         

    }



    byte[] Serialize(object o)

    {

        using (MemoryStream ms = new MemoryStream())

        {

            ProtoBuf.Serializer.Serialize(ms, o);

            byte[] result = new byte[ms.Length];

            ms.Position = 0;

            ms.Read(result, 0, result.Length);



            return result;

        }

    }



    T Deserialize<T>(byte[] b)

    {

        using (MemoryStream ms = new MemoryStream())

        {

            ms.Write(b, 0, b.Length);

            ms.Position = 0;

            return ProtoBuf.Serializer.Deserialize<T>(ms);

        }

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值