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