1、下載protobuf-net
2、創建Unity工程,創建一個Plugins文件夾,將protobuf-net解壓把里面得protobuf-net放到Plugins

3、創建一個名為mcs的文本文件,里面寫上-unsafe

4、重啟Unity
5、編譯自動生成cs代碼工具

protogen.exe就是剛才生成的

6、編寫.proto文件

message.proto里寫入
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工程
9、寫測試代碼
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);
}
}
}
