Unity Protobuf的简单使用
2020-02-02 11:54
3427 查看
刚开始学习使用Protobuf,用于记录学习过程中遇见的问题,各位高手如果发现存在的问题敬请指出!
一、准备工作
- 下载
protoc
编译工具和protobuf
的源代码到本地 - 使用VS2017或者以上版本的VS打开
protobuf\csharp\src\Google.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
的位置:protobuf\csharp\src\Google.Protobuf\bin\Release\net45
下
- 在文本文件中按照protobuf语法格式进行相应的编写,并将文件的后缀以
.proto
进行保存
二、编译生成
关于proto文件的编译方式则有两种,效果一样,可以根据自己的喜欢选择使用。
1、protoc --proto_path=
./proto/ Demo.proto UserInfo.proto--csharp_out=./cs/
第一个参数:保存proto文件的位置,该位置可以自行添加,有一点需要格外注意,那就是在第二个/后面需要添加一个空格,不然会报错,错误看下图
第二个参数:想要输出的语言类型,因为是结合Unity使用的,所以使用的是 csharp_out,其他的类型可以自行查阅protobuf官网上的设定
第三个参数:文件的输出路径,自行设定
2、protoc -I=
F:\ProtocolBuffers\protoc-3.8.0-win64\bin\--csharp_out=F:\ProtocolBuffers\protoc-3.8.0-win64\bin\cs\F:\ProtocolBuffers\protoc-3.8.0-win64\bin\proto\Demo.proto F:\ProtocolBuffers\protoc-3.8.0-win64\bin\proto\UserInfo.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 3D Protobuf的使用 信息的简单发送 并在Java服务器上接受显示
- google protobuf java 简单使用
- C# 快速使用protobuf的简单方法
- Protobuf简单使用及其抓包分析
- Android项目使用 protobuf和grpc简单例子
- Unity 使用 Protobuf-net
- [Unity3D]简单使用Protobuf-net(一)
- [Unity3D]简单使用Protobuf-net(一)
- Google Protobuf 简单使用
- [Unity3D]简单使用Protobuf-net(三)
- protobuf 3 的简单使用
- C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信
- Unity 使用 Protobuf
- Unity3D简单使用Protobuf-net(一)
- Centos6.4下安装protobuf及简单使用
- Unity环境下使用GoogleProtoBuf
- Unity中使用Protobuf-net
- Protobuf简单使用及其抓包分析
- unity中使用protobuf(兼容ios平台)
- [Unity3D]简单使用Protobuf-net(二)