【技术实现步骤摘要】
一种虚幻引擎与外部程序的数据通信方法
本专利技术属于数据传输
,具体涉及一种虚幻引擎与外部程序的数据通信方法。
技术介绍
虚幻引擎(UnrealEngine,简称UE或UE4)是EpicGame公司开发的一款游戏引擎。虚幻引擎以其强大的实时渲染能力、高真实感的画质效果、开发者友好的编辑工具、体系完备的功能模块成为最为顶尖的游戏引擎之一。虚幻引擎不仅在游戏制作领域占有绝大多数的市场,而且广泛应用在高精度仿真、工业设计、虚拟现实、电影制作等诸多行业和领域之中。虚幻引擎与外部程序的数据通信有着重要的应用价值。在虚幻引擎的应用中,虚幻引擎多与其它外部程序共同协作以实现特定应用的完整功能。例如,虚幻引擎作为仿真展示系统与其外部程序仿真物理引擎交互以实现具有高真实感画面的高精度仿真。虚幻引擎与外部程序的协作、交互均依于虚幻引擎与外部程序之间的通信。例如上例中,仿真物理引擎将模型数据通过某种通信方法发送给虚幻引擎用以渲染展示。因此,虚幻引擎与外部程序之间的通信对于广泛的商业、工业应用起到了基础性、关键性、决定性的作用。当前虚幻引擎与外部通信的方法主要包括文件读写型、服务器通信型、点对点通信型三种类型。文件读写型方法通过虚幻引擎和外部程序同时读写存储介质中的同一文件实现通信。该方法实现方式简单,但是其通信效率受限于存储介质的读写速度,且无法实现虚幻引擎与部署在远程主机上的外部程序进行通信。因此,文件读写型方法仅适用于单机部署且对通信速度要求不高的系统,其应用场景有限。服务器通信型方法建立通信服务 ...
【技术保护点】
1.一种虚幻引擎与外部程序的数据通信方法,其特征在于,所述虚幻引擎与外部程序之间采用gRPC远程服务调用作为数据传输的通信方式,采用protobuf作为数据传输格式;虚幻引擎与外部程序的数据通信分为虚幻引擎主动请求和虚幻引擎被动监听两种形式;其中,/n所述虚幻引擎主动请求是虚幻引擎将需要发送的消息封装为protobuf数据传输格式,采用gRPC提供的request功能,将数据发送给指定的外部程序,并收取该外部程序通过gRPC提供的reply功能对上述数据进行的回复;/n所述虚幻引擎被动监听是虚幻引擎开启gRPC监听端口,监听任意外部程序通过gRPC提供的request功能发送到该端口的protobuf传输格式定义的数据;在收到数据后,虚幻引擎采用gRPC提供的reply功能对上述数据进行回复。/n
【技术特征摘要】
1.一种虚幻引擎与外部程序的数据通信方法,其特征在于,所述虚幻引擎与外部程序之间采用gRPC远程服务调用作为数据传输的通信方式,采用protobuf作为数据传输格式;虚幻引擎与外部程序的数据通信分为虚幻引擎主动请求和虚幻引擎被动监听两种形式;其中,
所述虚幻引擎主动请求是虚幻引擎将需要发送的消息封装为protobuf数据传输格式,采用gRPC提供的request功能,将数据发送给指定的外部程序,并收取该外部程序通过gRPC提供的reply功能对上述数据进行的回复;
所述虚幻引擎被动监听是虚幻引擎开启gRPC监听端口,监听任意外部程序通过gRPC提供的request功能发送到该端口的protobuf传输格式定义的数据;在收到数据后,虚幻引擎采用gRPC提供的reply功能对上述数据进行回复。
2.如权利要求1所述的的数据通信方法,其特征在于,所述虚幻引擎主动请求具体包括如下步骤:
(1)建立protobuf数据格式文件
建立protobuf数据格式文件,根据protobuf格式语法,定义数据传输格式,在该数据格式文件中定义gRPC远程服务调用的具体服务名称并指定该服务在request和reply功能中传递数据的传输格式;
(2)编译protobuf数据格式文件
使用protobuf工具protoc编译在步骤(1)中建立的protobuf数据格式文件,生成protobuf数据格式的C++头文件和源文件;将头文件和源文件拷贝至虚幻引擎项目中,供虚幻引擎使用步骤(1)中定义的protobuf数据格式和gRPC远程调用服务;
(3)创建“主动请求”的C++基类
在虚幻引擎项目中创建“主动请求”的C++基类,在此基类头文件中引用步骤(2)中生成的头文件,并在此基类中利用C++智能指针创建步骤(1)中定义的gRPC远程服务调用的通信凭证作为其类变量;
(4)创建每种“主动请求”的gRPC具体服务的C++类
在虚幻引擎项目中为每一种需要虚幻引擎“主动请求”的gRPC具体服务创建C++类,这些类继承步骤(3)中创建的“主动请求”的C++基类;在这些类中,定义消息发送的具体实现函数,使用基类中的通信凭证中包含的gRPC异步消息发送函数发送数据;其中,所发送数据具有由步骤(1)定义的protobuf数据格式;
(5)创建“主动请求”通信接口的C++类
在虚幻引擎项目中创建“主动请求”通信接口的C++类;在该类中,将步骤(4)中所有创建的虚幻引擎“主动请求”的gRPC具体服务的C++类实例化为通信接口类的类变量,同时设置一个字符串类型的类变量用以保存所需通信的外部程序的监听地址;在该类中提供通信接口的构造函数以及每项gRPC具体服务通信的接口函数;其中,通信接口构造函数参数为所需通信的外部程序的监听地址、gRPC通信配置;外部程序的监听地址传入步骤(3)基类中的通信凭证变量之中;gRPC通信配置为gRPC远程服务调用所需求的通用配置参数;每项gRPC具体服务通信的接口函数的参数为该通信所需发送的具体数据变量,该函数通过调用对应的通信接口类变量中的消息发送的具体实现函数发送数据,并返回外部程序对该gRPC请求的响应数据;
(6)创建每种“主动请求”的gRPC具体服务的异步任务类
在虚幻引擎项目中,为每一项“主动请求”的gRPC具体服务创建异步任务类,该类通过继承自虚幻引擎提供的异步任务基类实现任务异步执行的能力。在该类中,除了虚幻引擎中使用异步任务基类必须设置的默认变量和函数外,额外设置三个类变量:第一个额外的类变量为步骤(5)中创建的“主动请求”通信接口的C++类的类实例指针;第二个额外的类变量为所需发送的数据变量;第三个额外的变量为所接收的响应数据变量;上述额外设置的三个类变量的值,通过异步任务类的构造函数传入,在该异步任务类的任务执行函数中使用,使用方法为:将所需发送的数据变量以参数形式传入通信接口的C++类的类实例指针包含的对应本异步任务的gRPC具体服务的接口函数中,将接口的返回值保存至响应数据变量中;
(7)封装每种“主动请求”的gRPC具体服务的数据发送函数
在虚幻引擎项目中,为每一项“主动请求”的gRPC具体服务封装数据发送函数,并在该函数的声明前加上虚幻引擎提供的宏,将该函数设置为蓝图可调用;该数据发送函数利用异步任务类或自动删除的异步任务类在异步线程上执行步骤(6)创建的异步任务类;
(8)在C++或蓝图中调用数据发送函数
在虚幻引擎项目中需要利用“主动请求”进行通信时,通过C++或蓝图调用在步骤(7)封装的数据发送函数,实现引擎“主动请求”形式的通信。
3.如权利要求1所述的的数据通信方法,其特征在于,所述虚幻引擎被动监听具体包括如下步骤:
(1)建立protobuf数据格式文件
建立protobuf数据格式文件,根据protobuf格式语法,定义数据传输格式,在该数据格式文件中定义gRPC远程服务调用的具体服务名称并指定该服务在request和reply功能中传递数据的传输格式;
(2)编译p...
【专利技术属性】
技术研发人员:徐新海,朱成璋,刘逊韵,李豪,叶帅,杨伟龙,
申请(专利权)人:中国人民解放军军事科学院战争研究院,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。