前言

虚幻引擎在软件设计过程中,经常是需要完成跨进程数据通信。大部分企业在设计通信业务时,选择的交换数据格式是json,但是json格式却有很多问题,例如

  • 大小:JSON是文本格式,传输时需要转换成二进制数据,占用的空间较大。
  • 性能:JSON的解析和序列化速度相对较慢。
  • 隐私性:JSON数据在序列化后一般是以字符串方式记录,如无特殊处理,容易被篡改。

对于数据交换的协议格式,其实可以选择更好的方案,例如protocol buffers。

Protocol Buffers(简称:ProtoBuf)是一种开源跨平台的序列化数据结构的协议。其对于存储资料或在网络上进行通信的程序是很有用的。这个方法包含一个接口描述语言,描述一些数据结构,并提供程序工具根据这些描述产生代码,这些代码将用来生成或解析代表这些数据结构的字节流。

protobuf主要解决了将对象型数据(基于OOP设计协议更易于理解)序列化成为一种字节流数据格式,至于数据最终被如何使用,需要设计者考虑。例如用于存储,传输。

此次介绍分为两部分完成:

  1. 编译protocol buffers项目
  2. 在虚幻引擎工程中引入protocol buffers

本文只讲解WIN平台应用

编译Protocol Buffers项目

为什么需要编译项目?

在使用Protobuf前,需要保证我们有两部分内容:

  • Windows平台的编译器(用于编译protobuf协议到目标语言)
  • 生成解析库

官方有提供CMake配置,可以根据需求编译到对应的平台,并且官方提供已经编译好的protobuf编译器,但是库还是需要我们自己编译的。

1、下载安装CMake

官方下载地址

下载完成后安装CMake即可。

2、下载Protobuf源码工程

官方库Github地址

在git窗口执行指令(需要安装Git

git
1
git clone git@github.com:protocolbuffers/protobuf.git

执行安装子模块(第三方库)

git
1
2
cd protobuf
git submodule update --init --recursive

注意:因为在Protobuf项目中,有依赖其他项目内容,所以需要执行此语句,否则构建环境会出错。(如下图内容)

第三方库中的依赖
第三方库中的依赖

3、通过CMake生成编译环境

打开安装后的CMake的GUI工具

标记2中的路径build需要创建

点击Configure,在弹出窗口配置平台选项,参照下图:

标记2中,本机环境是x64可以留空

点击Finish


如出现错误:

log
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
CMake Error at cmake/gtest.cmake:7 (message):
  Cannot find third_party/googletest directory that's needed to build tests.
  If you use git, make sure you have cloned submodules:

    git submodule update --init --recursive

  If instead you want to skip tests, run cmake with:

    cmake -Dprotobuf_BUILD_TESTS=OFF

Call Stack (most recent call first):
  CMakeLists.txt:336 (include)

则表明未执行安装子模块,查阅安装


安装完成后,需要清理缓存再次生成配置,清理操作在File菜单中Delete Cache操作项

清理配置缓存
清理配置缓存
生成完配置后点击Generate,然后点击Open Project
生成编译环境配置
生成编译环境配置

4、VS中编译Protobuf项目

  1. 调整解决方案配置为Release版本
  2. 调整运行库(选中工程-右键-属性)
  3. 选中ALL_BUILD,右键-重新生成

编译完成后即可在解决方案的文件夹中找到编译完成的库和WIN平台的protobuf编译器。


如果需要了解如何将库导入到引擎,请移步这里