admin管理员组

文章数量:1642463

UE4ObjecDeliver插件

UE4中网络通信除了传统的session外,还可以借助ObjectDelivery插件,该插件适用网络通信中的数据传输功能,可传输的数据主要有JSON,string,bytes字节流。

操作方法

以传输string为例子
首先调用createObjectDeliverManager生成一个ObjectDeliverManager类的引用,

这个类可以理解成用来管理连接的管理者,当客户端与服务器端产生连接或者断开连接的时候这个类都会感知到,因此可以看到他可以绑定的事件如下:

接着调用createUtf8StringDeliveryBox创建一个BoxObjectRefrence类的引用:

这个类我们可以根据它的类名理解为一个盒子,一个用于装数据的盒子,客户端,服务端可以通过它来读取传输过来的数据,因而可以看到它可以绑定的事件有:


整体来看:

我们给deliver绑定了连接的事件,连接成功的时候打印一个字符串,给BOX绑定了一个接受的事件,在这个绑定的事件拉出添加自定义事件会自动添加传入参数,是一个string还有一个Object类,如果是JSON的话参数就会变成JSON,。
对于客户端和服务端的连接,如果是服务端开启连接,可以通过调用deliver的start函数,Protocol是指连接的传输协议,图中的是TCP协议,并且有填入的端口,packetRule是指传输的数据包的数据格式,deliveryBox就是我们之前创建的BOX。

传输协议还有PacketRule参数除了图中的外还有如下:


都是插件封装好的了。具体的解释可以参考插件的说明文档,这里不做赘述。
而客户端想要连接服务端,也是调用start函数:

只是协议用另一个结点。
发送的逻辑主要调用Box的send结点:

最终运行的效果如下:

如果是传输JSON的数据格式,里面封装了几个结点:

我这就举例DynamicObjectDeliveryBoxUsingJson和ObjectDeliveryBoxUsingJson的区别。关于传输JSON,插件主要支持通过object方式传输JSON数据。即自己建一个Object类,然后通过在里面填写变量的方式代表JSON数据格式。例如:

新建一个object对象类命名为smapleObject,然后在里面添加两个字符串变量。
然后想发送的时候通过构造一个object对象当成数据

接收的时候可以对其解码:

DecodeJson结点是插件Varest里面的函数。
我们看看最终的效果:

上图是DynamicObjectDeliveryBoxUsingJson的效果

上图是ObjectDeliveryBoxUsingJson的效果。


通过对比效果和结点,可以发现DynamicObjectDeliveryBoxUsingJson会对JSON的数据自动进行一层封装,将数据放入Body里面,然后Type会传入你的Object对象名,而ObjectDeliveryBoxUsingJson在创建的时候制定了对象的类,在传输过程中只会对对象里面的数据进行JSON封装。大家可以根据需要自行选择。

本文标签: UE4ObjectDeliver