UE4 PixelStreaming与UE4之间的通讯笔记

JS向UE4发送事件

app.js文件提供了两个JavaScript函数,您可以在HTML播放器页面中调用它们,以允许用户将事件和命令从浏览器发送到Unreal Engine应用程序:

  • emitCommand 可以向游戏发送预设的命令列表,以更改分辨率,执行控制台命令或降低编码器的比特率。请参阅下面的使用emitCommand函数。

  • emitUIInteraction 将任意字符串或JavaScript对象发送到游戏。使用此功能可以从玩家UI发送自己的自定义命令,您可以在游戏逻辑中进行响应以在应用程序中产生所需的任何效果。请参阅下面的使用emitUIInteraction函数。

使用emitCommand函数

调用该emitCommand 函数时,必须向其传递一个JavaScript对象。该对象必须包含与以下字符串之一匹配的键:

  • ConsoleCommand-使用此键在远程虚幻引擎应用程序上执行控制台命令。该键的值应该是一个字符串,其中包含要运行的命令以及所需的任何参数。例如:

  • let descriptor = {
        ConsoleCommand: 'stat fps'
    }
    emitCommand(descriptor);

     

  • Resolution-使用此键重置虚幻引擎应用程序的渲染分辨率。该键的值应该是包含WidthHeight属性的对象。例如:

  • let descriptor = {
        Resolution: {
            Width: 1024,
            Height: 768
        }
    }
    emitCommand(descriptor);

     

  • Encoder-使用此键将命令发送到编码器以控制媒体流的质量。当前,它支持一个命令:BitrateReduction。此值指定应将测量的可用带宽的百分比分配给视频编码器的比特率。将此值设置得太高可能会导致网络拥塞和数据包丢失,进而导致增加的延迟和客户端上的视频失真。默认情况下,此值设置为50%。如果发现部署中的延迟和视频失真问题,则可以尝试进一步降低该值。例如:

  • let descriptor = {
        Encoder: {
            BitrateReduction: 20
        }
    }
    emitCommand(descriptor);

     

使用emitUIInteraction函数

调用该emitUIInteraction 函数时,可以向其传递单个字符串或JavaScript对象。例如:

emitUIInteraction("MyCustomCommand");

或者

let descriptor = {
    LoadLevel: "/Game/Maps/Level_2"
    PlayerCharacter: {
        Name: "Shinbi"
        Skin: "Dynasty"
    }
}
emitUIInteraction(descriptor);

UE4接收并解析JS发送的蓝图:

UE4 PixelStreaming与UE4之间的通讯笔记_第1张图片

您需要绑定一次此事件,通常是在游戏开始时。每当连接到您的虚幻引擎应用程序实例的任何播放器HTML页面调用该emitUIInteraction函数时,无论传递到的输入如何,都会自动调用您的自定义事件emitUIInteraction

您分配的自定义事件(例如,上图中的UI Interaction节点)具有一个名为Descriptor的输出,您可以使用该输出检索该emitUIInteraction 函数发送给您的Unreal Engine应用程序的字符串。您可以使用该值来确定每次emitUIInteraction 调用游戏代码时需要如何响应。

例如,以下蓝图测试以查看给定的输入是否emitUIInteraction 包含字符串“ MyCustomCommand”,并调用自定义函数来处理事件:

UE4 PixelStreaming与UE4之间的通讯笔记_第2张图片

Get Json String Value节点中,Filed Name参数可以获取对象中的对象值;

UE4 PixelStreaming与UE4之间的通讯笔记_第3张图片

UE4向JS发送事件

蓝图

UE4 PixelStreaming与UE4之间的通讯笔记_第4张图片

JS中增加方法:

function myHandleResponseFunction(data) {
    console.warn("Response received!");
    switch (data) {
        case "MyCustomEvent":
            ... // handle one type of event
        case "AnotherEvent":
            ... // handle another event
    }
}

通过调用addResponseEventListener 提供的函数来注册您的侦听器函数app.js。您为该函数传递事件侦听器和函数的唯一名称。例如:

addResponseEventListener("handle_responses", myHandleResponseFunction);

如果您需要删除事件监听器,请调用removeResponseEventListener 并传递相同的名称。例如:

removeResponseEventListener("handle_responses");

如果要传递更复杂的数据,可以将传递给“ 发送像素流响应”节点的字符串格式化为JSON。例如:

UE4 PixelStreaming与UE4之间的通讯笔记_第5张图片

然后,在JavaScript事件处理程序函数中,使用  JSON.parse(data)将该字符串解码回JavaScript对象。

 

你可能感兴趣的:(UE4)