Unity3D protobuf-net使用方式


 

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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM