概述
刚开始学习使用Protobuf,用于记录学习过程中遇见的问题,各位高手如果发现存在的问题敬请指出!
Unity版本:2018.3.4f1
Protobuf地址:GitHub地址
Protoc编译工具版本:protoc-3.8.0-win64
Protoc编译工具下载地址:GitHub地址 或者 https://repo1.maven.org/maven2/com/google/protobuf/protoc/
一、准备工作
- 下载
protoc
编译工具和protobuf
的源代码到本地 - 使用VS2017或者以上版本的VS打开
protobufcsharpsrcGoogle.Protobuf.sln
解决方案,在打开解决方案之后可能会遇见下列问题,如果没有遇见问题可以直接跳过这一段
2.1、在生成解决方案的时候,报错The current .NET SDK does not support targeting .NET Core 2.1. Either target
,这个是因为本地没有安装.NET Core
或者版本与 protobuf所需要的版本不一致,检测方法就是找到下载的protobuf源码文件夹,在protobuf文件夹的根目录下有一个global.json
文件,根据该文件中的版本去下载.NET Core
(地址:.NET Core),最好将32位和64位都安装上防止再出现其他问题(至于单装一个是否会出现问题,本人则没有测试过) - 将编译解决方案之后生成的
dll
文件拷贝到Unity中的Plugins
文件夹下,至于dll
的位置:protobufcsharpsrcGoogle.ProtobufbinReleasenet45
下
- 在文本文件中按照protobuf语法格式进行相应的编写,并将文件的后缀以
.proto
进行保存
二、编译生成
关于proto文件的编译方式则有两种,效果一样,可以根据自己的喜欢选择使用。
1、protoc --proto_path=
./proto/ Demo.proto UserInfo.proto
--csharp_out
=./cs/
第一个参数:保存proto文件的位置,该位置可以自行添加,有一点需要格外注意,那就是在第二个/
后面需要添加一个空格,不然会报错,错误看下图
第二个参数:想要输出的语言类型,因为是结合Unity使用的,所以使用的是 csharp_out,其他的类型可以自行查阅protobuf官网上的设定
第三个参数:文件的输出路径,自行设定
2、protoc -I=
F:ProtocolBuffersprotoc-3.8.0-win64bin
--csharp_out
=F:ProtocolBuffersprotoc-3.8.0-win64bincs
F:ProtocolBuffersprotoc-3.8.0-win64binprotoDemo.proto F:ProtocolBuffersprotoc-3.8.0-win64binprotoUserInfo.proto
第一个参数:protoc.exe所在的路径
第二个参数:上面已经讲过不再描述
第三个参数:输出文件的保存位置
第四个参数:需要编译的proto文件,如果有多个文件,中间用空格隔开
三、使用
- 将编译后的
UserInfo.cs
文件拷贝到Unity中 - 在Unity中创建一个
Demo.cs
,用于进行简单的使用,代码如下:
using Google.Protobuf;
using Protobuf;
using UnityEngine;
using UnityEngine.UI;
public class Demo : MonoBehaviour
{
public Text m_ShowMessage;
// Start is called before the first frame update
void Start()
{
ProtobufAnalysis();
}
// Update is called once per frame
void Update()
{
}
void ProtobufAnalysis()
{
UserInfo info = new UserInfo();
info.UID = 120;
info.ULevel = 100;
info.UName = "Protobuf";
info.UDescribe = "攻城狮";
byte[] data = info.ToByteArray();
//将字节数据还原到对象
IMessage message = new UserInfo();
UserInfo user = (UserInfo)message.Descriptor.Parser.ParseFrom(data);
m_ShowMessage.text = "编号:" + user.UID + " 等级:" + user.ULevel + " 名称:" + user.UName + " 职业:" + user.UDescribe;
}
}
- 需要注意命名空间的引入:一个就是要引入
using Google.Protobuf;
,还有一个是编译后的cs文件中的命名空间,如UserInfo.cs
的命名空间Protobuf
最后
以上就是整齐纸飞机为你收集整理的Unity Protobuf的简单使用的全部内容,希望文章能够帮你解决Unity Protobuf的简单使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复