前言

今天遇到一个很神奇的事情,有一个虚幻引擎项目,用像素流无法控制鼠标,但是画面可以出来。但是同样的版本的项目,就是好的。我所使用的UE版本为UE5.1

问题排查

1、打开虚幻引擎源码 C:\Program Files\Epic Games\UE_5.1\Engine\Plugins\Media\PixelStreaming

2、找到鼠标移动的函数



虚幻引擎UE5.1像素流无法控制鼠标_ue5

3、开启日志 在启动程序中增加参数,这样就可以输出坐标信息

-LogCmds="LogPixelStreamingInputHandler Verbose"

查看日志,发现所有的坐标都为0

LogPixelStreamingInputHandler: Verbose: MOUSE_MOVE: Pos = (1080, 171); Delta = (0, 0)

找一个可以控制的像素流工程,发现坐标是有值的。



虚幻引擎UE5.1像素流无法控制鼠标_计算机外设_02

源码查看

发现进入了一个ConvertFromNormalizedScreenLocation的函数,进行了坐标转换,把前端像素流发过来的坐标转换UE的坐标。

虚幻引擎UE5.1像素流无法控制鼠标_虚幻_03

最后发现TargetWindow不存在导致。

之后在虚幻引擎官方论坛,发现了同样的问题 https://forums.unrealengine.com/t/workaround-for-fpixelstreamingmodule-startupmodule-setting-invalid-targetwidow-on-streamer/736507

在UE5.2版本中已经修复

https://github.com/EpicGames/UnrealEngine/commit/9f448608c4fdc43f45e14bab2884e2a888914ab8



虚幻引擎UE5.1像素流无法控制鼠标_虚幻引擎_04

虚幻引擎UE5.1像素流无法控制鼠标_ue5_05

修改源码为5.2修复的代码,编译之后 可以使用。

问题原因

最后排查,居然是由于设置了开机动画导致的在像素流插件启动的时候,没有获取到TargetWindow对象。关闭开机动画之后,可以正常使用UE5.1进行像素流的鼠标控制。

虚幻引擎UE5.1像素流无法控制鼠标_计算机外设_06