UE Web Remote Control

前言

       最近在研究UE自启WEB服务和网页通信以此来通过网页与UE进行数据交互,这样最好的方式就是可以摒弃掉整个繁琐的通信连接流程如TCP UDP,但是找到的一些方法都不是很适用,尤其是WEBUI这个插件它只适合内嵌到UE本身才能完成交互,但是用WebSocket进行交互的话还需要额外创建一个服务让其网页与UE在交互的过程有一个桥梁,这就违背了我们的初衷,之前就了解到UE 有一个Remote Control它可以自启一个服务生成一个网页端来控制UE中提前预设好的一些功能,本着试试的态度看了一遍UE的WEB API发现能用但是很繁琐,想要简单一点的话还需要额外添加一个RemoteControlWebInterface插件让其进行交互,如果你只是对与官方的控制端网页想进行优化的话,那么接下来的过程很实用了,但是想自由的实际操作一些功能我还是建议自己开发一下,这也是我记录完操作过程后要进军的事情了,话不多说,接下来就是整个通信请求过程。

过程

插件准备
  • 在你创建好的UE工程中在Edit ->Plugins中找到RemoteControlAPI和RemoteControlWebInterface插件然后进行勾选启用后重启项目
  • 重启后可在Edit ->ProjectSettings->Plugins中找到Remote Control这显示的30010就是我们的WebAPI的服务端口
  • 随后我们先开启我们的WEB服务,有两种方式进行调用一种是直接在UE CMD运行窗口中一种是在蓝图中,我建议我们使用蓝图这样可以很方便的在我们工程中尽显使用了,这样我们在项目启动后开启我们的WEB服务,点键盘1的时候关闭服务和项目
    WebControl.StartServer
    WebControl.StopServer
    WebControl.EnableServerOnStartup
RemoteControl
  • 我们先在UE中创建一个Actor,然后随便的创建两个自定义事件,后面做一个不一样的打印
  • 在UEContent文件夹下我们创建一个自己的文件夹然后鼠标右键选择Miscellaneous在后面选择RemoteControlPreset对其进行创建,名称根据自己的想法添加就行。
  • 双击我们刚才创建RemoteControlPreset,点击Expose下拉在ActorFunction中找到我们刚才创建的蓝图找到那两个自定义事件,每次只能添加一个所以还需要再操作一次
  • 添加好我们的两个自定义事件后,为了方便自己能记住每个事件的具体作用我们可以进行重命名,修改完保存一下运行项目即可,接下来我们就模拟下网页的实际请求。
HTTP WEB API
  • 现在已经将我们的WEB服务启动了,接下来我建议准备一个HTTP协议测试工具如Postman可以很方便的进行测试,首先第一个api我们先看下Remote中都有哪些请求,这是一个GET请求,可以直接网页中打开,其中的Path就是api地址,Verb是我们请求类型,Description是这个api一个详细的介绍,大家根据自己的需求详细的看下里面解释的还是很清晰的。
    http://localhost:30010/remote/info
  • 在获取到所有的api的前提下,我们现在获取我们创建的RemoteControlPreset,remote/presets是获取我们工程下preset列表,有几个获取几个,获取到我们的preset后解析Json然后将我们的名称存下来,因为我们接下来要通过找到刚才添加的两个自定义事件。
    http://localhost:30010/remote/presets
  • /remote/preset/:preset是获取我们的preset下所有内容的接口,这样我们就可以获取到我们的刚才创建的preset下的两个自定义事件了。里面数据目前我们的只用到DisplayName,剩下的Path这些数据细节开发会用到
    http://localhost:30010/remote/preset/Demo
  • 现在我们对测试一这个自定义事件进行测试触发,我们需要再preset后面添加一个function,因为所有的事件和函数都继承与UFunction,只不过具体类型的二进制命令不一致,这块内容大家可以了解下迭代器和反射系统,这不细说,我们进行调用,这里的调用是PUT了而且需要再请求过程时添加请求体。
    HTTP请求链接
    http://localhost:30010/remote/preset/Demo/function/测试一请求体(Raw-->Json)
    {"Parameters": {"InText": "Hello, World"},"GenerateTransaction": true
    }
  • 这样呢就完成我们的对其Remote WEB API简单的使用,也可以根据自己的需求设计合适的前端UI了,对于修改和添加的一些内容请大家看下官方的api介绍
  • UE 官方remote-control-apiicon-default.png?t=N7T8https://docs.unrealengine.com/5.3/en-US/remote-control-api-http-reference-for-unreal-engine/
  • UE 官方HTTP APIicon-default.png?t=N7T8https://docs.unrealengine.com/5.3/en-US/remote-control-preset-api-http-reference-for-unreal-engine/

结束语

      这种使用方法 对于一些介绍类型项目还是比较实用的,可以通过Pad或者手机就可以直接控制,但是对于一些定制化内容,我建议还是研究下底层内容自己深入开发一下UE web服务因为Remote是官方提供的一个使用模版,肯定还是有一些限制的自由度不够,希望上面的内容对大家有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/229890.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哪里可了解低代码数据可视化开发平台?

如果想要提升办公协作效率,可以用什么样的平台助力实现这一目标?其实,随着市场竞争的日益加剧,低代码技术平台的应用价值也逐渐凸显出来,其可视化、易操作、灵活便利等优势特点,是很多中大型企业倾向于使用…

ThinkPHP的方法接收json数据问题

第一次接触到前后端分离开发,需要在后端接收前端ajax提交的json数据,开发基于ThinkPHP3.2.3框架。于是一开始习惯性的直接用I()方法接收到前端发送的json数据,然后用json_decode()解析发现结果为空!但是打印出还未解析的值却打印得…

【数据挖掘】国科大刘莹老师数据挖掘课程作业 —— 第二次作业

Written Part 1. 给定包含属性{Height, Hair, Eye}和两个类别{C1, C2}的数据集。构建基于信息增益(info gain)的决策树。 HeightHairEyeClass1TallBlondBrownC12TallDarkBlueC13TallDarkBrownC14ShortDark…

phpstudy安装redis

Redis 是一个开源的高性能键值存储数据库,广泛用于缓存、消息队列、会话管理和实时数据分析等应用场景。 使用 PHP Redis 扩展,你可以在 PHP 代码中使用一系列的函数来连接到 Redis 服务器,并执行各种操作,如设置和获取键值对、操…

【axios】TypeScript实战,结合源码,从0到1教你封装一个axios - 基础封装篇

目录 前言版本环境变量配置引入的类型1、AxiosIntance: axios实例类型2、InternalAxiosRequestConfig: 高版本下AxiosRequestConfig的拓展类型3、AxiosRequestConfig: 请求体配置参数类型4、AxiosError: 错误对象类型5、AxiosResponse: 完整原始响应体类型 目标效果开始封装骨架…

Python爬虫404错误:解决方案总结

在进行网络爬虫开发的过程中,经常会遇到HTTP 404错误,即“Not Found”错误。这种错误通常表示所请求的资源不存在。对于爬虫开发者来说,处理这类错误是至关重要的,因为它们可能会导致爬虫无法正常工作。本文将探讨Python爬虫遇到4…

年终好价节有什么必买的数码好物?值得入手的数码好物推荐

大家是不是都没听说过好价节?直白点说就是原来的双十二购物狂欢节,只不过换一个说法,不过今年毕竟是第一年换个说法,所以淘宝年终好价节优惠还是值得我们期待的!作为年前的最后一波大促,一起来看看有哪些好…

《opencv实用探索·四》Mat图像数据类型转换和归一化显示

一种数据类型转为另一种数据类型,不改变图像大小,但每个像素值可能会变 src.convertTo(dst, type, scale, shift);Scale和shitf默认为0(这两个参数也相当于对比度和亮度) 现在有个8位图像,把8位转成32位 可以看到像素…

Kafka 分布式消息系统

文章目录 消息中间件对比Kafka概述kafka安装和配置kafka入门生产者发送消息消费者接收消息 Kafka高可用设计集群备份机制(Replication)备份机制(Replication)-同步方式 kafka生产者详解同步发送异步发送参数详解(ack)参数详解(retries)参数详解-消息压缩 kafka消费者…

数字时代的表演艺术:TikTok如何重新定义舞台

在数字时代的潮流中,TikTok崭露头角,重新定义了表演艺术的舞台。这款短视频应用不仅改变了用户与内容的互动方式,也为艺术家和创作者提供了全新的表达平台。本文将深入探讨TikTok如何在数字时代重新定义舞台,以及它对表演艺术的深…

c++_继承

🏷如被何实现一个不能被继承的类(或是继承无意义的类) 将构造函数定义成私有的就行了,即:私有化父类的构造函数 c 11 新增关键字final 修饰父类直接不能被继承 class A final {........ }🏷继承与有元 有…

【springboot】idea项目启动端口被占用

问题 idea本地启动springboot项目端口老是被占用 解决 关闭被占用的端口进程 步骤: 1. winR打开程序框 2. 查出被占用端口的进程id netstat -ano | finderstr 端口号 例如 netstat -ano | finderstr 81013.杀死进程 taskkill /pid 进程id -t -f 例如 taskkill /pid 2…