Protobuf:平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,一般用于网络通信和数据存储

第一步:下载并准备DLL文件

链接:mvn9(或者 https://github.com/protocolbuffers/protobuf/tree/82d3d7d250645322f8a7343188e5ae6246a76414)

先设置下DLL导出版本,不同版本的Unity3D可能对应的net版本不同

  1. 进入路径:protobuf-3.7.0\csharp\src\Google.Protobuf
  2. 编辑 Google.Protobuf.csproj 文件,准备设置DLL导出版本(不知道怎么编辑的记事本打开......)
  3. 找到里面的语句:<TargetFrameworks>netstandard1.0;net45;后面的 net45 就是DLL导出版本,想要同时导出多个版本将版本号用分号隔开就好,如果你不知道要导出的版本是哪个,可以百度一下?(一般来讲Unity2018的都是4.5,2017都是3.5)

之后就可以开始生成DLL了

  1. 进入路径:protobuf-3.7.0\csharp\src
  2. 打开 Google.Protobuf.sln 文件(我用的是VS2017)
  3. 右键 Google.Protobuf 点击生成
  4. 这个时候再进入路径:protobuf-3.7.0\csharp\src\Google.Protobuf\bin\Debug\net45,里面就是你生成的DLL文件

第二步:Protobuf简单使用

打开 ProtobufTool_Rect 傻瓜包,在里面新建.proto文件如下(随便起名就好):

编辑一下proto文件,在里面输入以下内容

syntax = "proto3";        //proto语法版本
package jaihk662;       //包名
message TestForProto    //一个message相当于一个类
{string name = 1;          //后面的 = 1是参数标签,必须有int32 age = 2;repeated int32 pos = 3;       //repeated可以理解为List,等价于List<int> pos;
}

之后你懂得,点击 buildC#.bat 就可以一键生成了,生成的.cs可以在 C#protocs 文件夹中找到

如果生成失败,说明你有语法错误,检查一下.proto内有没有打错字母等......

第三步:在Unity3D中测试

将你第二步生成的.cs文件和第一步生成的.dll文件全部放入你的项目里(放入Assest,建议新建一个文件夹进行管理)

到这一步其实你就已经会用Protobuf了,恭喜!(当然只针对前端)

接下来测试一下,随便新建一个脚本,输入以下代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Jaihk662;            //引用.cs文件中的命名空间(.proto文件中的package值)
using Google.Protobuf;     //引用DLL
public class AASD : MonoBehaviour
{void Start(){TestForProto toServer = new TestForProto();toServer.Name = "Jaihk662";toServer.Age = 22;for (int i = 5; i <= 7; i++)toServer.Pos.Add(i);//将对象转换成字节数组byte[] databytes = toServer.ToByteArray();//将字节数据的数据还原到对象中IMessage IMperson = new TestForProto();TestForProto toClient = new TestForProto();toClient = (TestForProto)IMperson.Descriptor.Parser.ParseFrom(databytes);Debug.Log(toClient.Name);Debug.Log(toClient.Age);for (int i = 0; i < toClient.Pos.Count; i++)Debug.Log(toClient.Pos[i]);}void Update(){}
}

搞定!

在Unity3D中使用Protobuf3相关推荐

  1. Unity3D 中 2D_Toolkit插件下载 和 导入方法

    Unity3D 中 2D_Toolkit插件下载 和 导入方法 1.你把下载来的包放到 安装目录:Editor\Standard Packages里面. 2.然后按ctrl+9,进入asset sto ...

  2. Unity3D中暂停时的动画及粒子效果实现

    暂停是游戏中经常出现的功能,而Unity3D中对于暂停的处理并不是很理想.一般的做法是将Time.timeScale设置为0.Unity的文档中对于这种情况有以下描述: The scale at wh ...

  3. Unity3D 中的程序后台运行

    Unity3D中程序后台运行,我原本认为当Application.runInBackground=false时,Socket保持连接,但是不接受数据,经过测试并非如此,当Application.run ...

  4. 工具设置Unity3D系列教程--使用免费工具在Unity3D中开发2D游戏 第一节

    时间紧张,先记一笔,后续优化与完善. 声明:   本博客文章翻译类别的均为个人翻译,版权全部.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http:/ ...

  5. unity3d中让物体显示和隐藏

    unity3d中让物体显示和隐藏的方法 gameObject.renderer.enabled //是控制一个物体是否在屏幕上渲染或显示  而物体实际还是存在的 仅仅是想当于隐身 而物体本身的碰撞体还 ...

  6. Unity3d中BlinnPhong光照模型注解

    /* *     版本:0.1     最后修改:2012-08-10     撰写:李现民 Unity3D中主要用到的shader(着色器)有三种,除了常规的vertex shader与fragme ...

  7. Unity3D中关于场景销毁时事件调用顺序的一点记录

    先说一下我遇到的问题,我弄了一个对象池管理多个对象,对象池绑定在一个GameObject上,每个对象在OnBecameInvisible时会进行回收(即移出屏幕就回收),但是当场景切换或停止运行程序时 ...

  8. unity3d双面材质_[转]unity3d中创建双面材质

    在其它三维软件中设置好的双面材质导入到unity3d中就失去了效果,不过我们可以通过自定义材质来在unity3d中实现双面材质的效果.步骤如下: 1.在资源库中新建一新shader:代码如下: Sha ...

  9. 如何将unity3d动画嵌入html,在Unity3D中使用精灵动画引擎制作动画的两种方法

    7月28日消息,如今的游戏玩家对于游戏角色的动作要求越来越高,给开发者提出了众多的要求,工作量也相应上升.那么如何才能简单快速地制作角色动画以提升效率呢?下面就和大家分享两个在Unity3D中使用精灵 ...

最新文章

  1. linux ubuntu 桌面,Ubuntu Linux 入门(三):熟悉 Ubuntu Linux 桌面环境
  2. python定义方法继承类_Python类的定义、继承及类对象使用方法简明教程
  3. mysql 调用未定义函数_php – Wierd和Annoying错误:调用未定义的函数mysql_query()[复制]...
  4. [渝粤教育] 郑州大学 互联网国际政治学 参考 资料
  5. 关于C++子类父类成员函数的覆盖和隐藏
  6. linux 端口tnpl,Linux和Windows端口占用情况查看
  7. 刘作虎曝光一加7真机视频 最流畅的手机来了!
  8. MATLAB 添加文件路径
  9. java home centos_Centos7配置JAVA_HOME
  10. 【转】[FPGA博客大赛](updated)在xilinx的FPGA系统中scanf函数的使用
  11. Linux基础知识 | vi编辑器
  12. PDF限制复制怎么办?怎么解决这个问题?
  13. 阿里P3C自定义规则后本地打包成IDEA插件
  14. C#读写内存也不差!(发布C#编写的植物大战僵尸作弊器源码)
  15. “机智歌王”--沙鸥,大陆的的张帝
  16. 解决通过硬盘或U盘安装ubuntu server出现无法挂载光盘的问题教程
  17. VUE的路由器的总结
  18. 下载的caj论文怎么转换成pdf?
  19. LLMs:《PaLM: Scaling Language Modeling with Pathways》翻译与解读
  20. PyCharm里面的c、m、F、f、v、p分别代表什么含义?

热门文章

  1. 零基础学python好学吗-Python0基础好学吗?
  2. micropython和python区别-什么是 MicroPython ?它有什么优势?
  3. 快准狠才叫爽!六款智能电视语音识别大比拼
  4. 1.零基础Java基础教程9天入门
  5. JavaScript-解构赋值
  6. java证书 查看cacer_R 语言关于 SSL 证书异常处理笔记
  7. 前端必须掌握30个CSS3选择器
  8. LeetCode 530二叉搜索树的最小绝对差
  9. 2012年软件开发者薪资调查报告
  10. 响应服务器auth first,asp.net mvc发送QQ邮件提示 命令顺序不正确。 服务器响应为: Error: need EHLO and AUTH first !...