UE 像素流与 Web 协同开发

与Web交互主要涉及两个方面,一个是UE向Web发送消息,另一个就是Web端向UE程序发送消息,UE程序中需要启用像素流插件,Web端需要安装@epicgames-ps/lib-pixelstreamingfrontend-ue5.x依赖包。
在这里插入图片描述

创建Web端应用

Web端需要通过npm i @epicgames-ps/lib-pixelstreamingfrontend-ue5.x @epicgames-ps/lib-pixelstreamingfrontend-ui-ue5.2’安装对应版本的依赖npm包,然后就可以在代码中调用 UE Web 封装好的api来与UE程序进行交互了,更详细的API可以参考git上的文档,或者直接阅读Typescript类型定义文档。


// 导入需要的依赖
import { Config, PixelStreaming } from '@epicgames-ps/lib-pixelstreamingfrontend-ue5.3';
import { Application, UIOptions, PanelConfiguration, UIElementCreationMode } from '@epicgames-ps/lib-pixelstreamingfrontend-ui-ue5.3'

// 创建像素流
const config = new Config({
  useUrlParams: true,
  initialSettings: {
    ss: 'ws://192.168.1.58:8080', // 像素流的 WS 地址,默认端口是8080
    AutoConnect: true,
    AutoPlayVideo: true,
    MinQP: 30,
    XRControllerInput: false,
    GamepadInput: false,
    TouchInput: false,
    HoveringMouse: true,
  }
});
const stream = new PixelStreaming(config);

// 创建像素流播放界面
const application = new Application({
  stream: stream,
  onColorModeChanged: (isLightMode) => PixelStreamingApplicationStyles.setColorMode(isLightMode),
  settingsPanelConfig: { 
    isEnabled : false,
    visibilityButtonConfig : { creationMode : UIElementCreationMode.Disable }
  },
  fullScreenControlsConfig: {
    creationMode: UIElementCreationMode.UseCustomElement,
    customElement: document.getElementById('myCustomFullscreenButton')
  }
});

// 将 UI 添加到 Web 页面 DOM 节点上
document.getElementById('ue_container')?.appendChild(application.rootElement);

// 监听创建后播放流的事件,还有其它事件,可以阅读 *.d.ts 类型定义文件了解
stream.addEventListener('playStream', () => {
  getCurrentWaterLevel();
});

Web向UE发送消息

UE 像素流 Web API 提供了emitCommand、emitConsoleCommand、emitUIInteraction三个函数来向UE发送消息。

emitCommand

可以用 JSON 对象的形式向UE发送任意命令。

let descriptor = {
  ConsoleCommand: 'stat fps'// ConsoleCommand 是 UE 的保留的关键字
  Name:'asdad' // 自定义的消息
}
this.stream.emitCommand(descriptor);

emitConsoleCommand

可以向UE发送控制台命令。例如, stat fps 显示帧速率。

注意: 由于虚幻引擎控制台命令的强大功能,该 emitConsoleCommand 功能可能会带来安全风险,所以UE程序默认没有启用这个功能。如需启用,需要在UE程序的快捷方式里添加启动参数 -AllowPixelStreamingCommands ,或者使用“独立游戏”选项从虚幻编辑器启动它。

this.stream.emitConsoleCommand('stat fps');  // 显示帧速率

emitUIInteraction

将任意字符串或JSON对象发送到游戏。使用这个方法从 Web 发送消息到UE程序,在UE程序中可以接收并进行处理。

this.stream.emitUIInteraction("MyCustomCommand");
// 或
const descriptor = {
  LoadLevel: "/Game/Maps/Level_2",
  PlayerCharacter: {
    Name: "Shinobi",
    Skin: "Dynasty",
  },
};
this.stream.emitUIInteraction(descriptor);

UE接收Web的消息

当在Web端用emitUIInteraction 发送了消息之后,在UE程序中使用 Pixel Streaming Input > Bind Event to On Input Event 节点来绑定事件,每当有新的消息进来,就会执行该事件。这个事件上的Descriptor字符串里存放的就是Web端传过来的消息。
在这里插入图片描述
这个蓝图节点还具有处理读取JSON的功能,如果传过来的是JSON对象,则可以用 Pixel Streaming > Get Json String Value 节点来读取对应类型的字段值。取值的时候支持用 . 符号直接下钻获取,例如:class.student.name
在这里插入图片描述

UE向Web发送消息

UE程序可以向Web页面发送消息,Web端可以通过JavaScript来接收消息并作出相应的处理。使用 Pixel Streaming -> Send Pixel Streaming Response 节点向Web端发送消息。该节点可以传入一个字符串作为参数,字符串也可以是JSON内容,用以表明需要发送给Web端的事件内容。
在这里插入图片描述

Web接收UE的消息

Web端通过 addResponseEventListener 来监听UE程序传来的消息,用 removeResponseEventListener 来移除监听,这两个方法的第一个参数是字符串类型,只是用来做标识的,如果注册多个监听,每一个监听事件都会收到消息,因此为了避免重复执行建议只注册一个监听消息事件,在这个事件回调函数中自己写逻辑来处理不同的消息Data。
如果需要传递复杂消息,可以封装成一个JSON字符串,Web端收到之后使用 JSON.parse(data) 来解析。

this.stream.addResponseEventListener("handle_responses", (data)=>{
  console.log(`接收到了UE传来的消息:${data}`);
});

this.stream.removeResponseEventListener("handle_responses");

UE 冻结帧

在像素流推流的过程中,有时候并不需要一直实时推流,如果用户长期视角未动,可以使用“冻结帧”实现暂停的效果。暂停之后浏览器会显示暂停时候的画面,UE客户端也会停止实时渲染、像素流推送也会停止,此时可以节约 GPU和网络占用率
暂停的时候可以使用当前画面,或者指定一个纹理作为展厅画面。想要恢复每帧流送时,使用 Unfreeze Frame 节点可以手动恢复渲染和推流。
在这里插入图片描述
在这里插入图片描述

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
UE5是一款由虚幻引擎开发的游戏引擎,其具有强大的图像渲染能力和灵活的游戏交互功能。像素UE5中的一个重要特性,它可以提供更高质量的图像表现并提升用户的观赏体验。 像素可以理解为一种动态图像压缩技术,它将高分辨率的图像数据进行压缩和分割,然后通过网络传输给用户设备,并在本地解压和渲染。这样一来,用户可以在不占用过多带宽和存储空间的情况下,享受到高精度的图像表现。而且,像素还能根据用户设备的性能和带宽情况进行智能调整,确保在不同网络环境下都能保持良好的游戏体验。 在Web交互方面,UE5也提供了强大的支持。通过HTML5和WebGL技术,开发者可以将UE5游戏直接嵌入到网页中,用户只需打开浏览器就能享受到高质量的游戏内容,无需下载和安装任何额外的软件。同时,UE5还提供了丰富的Web交互接口,开发者可以通过JavaScript等前端技术与游戏引擎进行交互,实现诸如登录、社交分享、在线支付等功能。 总之,UE5像素Web交互为游戏开发者和用户带来了许多便利和优势。开发者可以将高质量的游戏内容快速发布到各个平台,而用户则可以随时随地享受到畅的游戏体验,无论是在PC、移动设备还是网页上。相信随着UE5的不断发展和完善,将会有越来越多的优秀游戏能够通过像素Web交互技术呈现给用户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一名技术极客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值