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);
}
}
}