前言
今天遇到一个很神奇的事情,有一个虚幻引擎项目,用像素流无法控制鼠标,但是画面可以出来。但是同样的版本的项目,就是好的。我所使用的UE版本为UE5.1
问题排查
1、打开虚幻引擎源码 C:\Program Files\Epic Games\UE_5.1\Engine\Plugins\Media\PixelStreaming
2、找到鼠标移动的函数
![43270935d8648f9203f3daea116cb0f4.png](https://i-blog.csdnimg.cn/blog_migrate/7d3dfef48633bea4b54646c68dd32131.png)
3、开启日志 在启动程序中增加参数,这样就可以输出坐标信息
-LogCmds="LogPixelStreamingInputHandler Verbose"
查看日志,发现所有的坐标都为0
LogPixelStreamingInputHandler: Verbose: MOUSE_MOVE: Pos = (1080, 171); Delta = (0, 0)
找一个可以控制的像素流工程,发现坐标是有值的。
![8f601db343b59a20abb5ae2cb1b9bb18.png](https://i-blog.csdnimg.cn/blog_migrate/8b56907bcc2d0dc1ea8e891216c112bb.png)
源码查看
发现进入了一个ConvertFromNormalizedScreenLocation的函数,进行了坐标转换,把前端像素流发过来的坐标转换UE的坐标。
最后发现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
![9783197366c78284ebcd50bb905d47a4.png](https://i-blog.csdnimg.cn/blog_migrate/9be9844b47634ede2c78b7d297aed49f.png)
![a461a6c5b9960107999d90c20baf0720.png](https://i-blog.csdnimg.cn/blog_migrate/b75d1558ef40f9a21fa2e17fbf1b5aca.png)
修改源码为5.2修复的代码,编译之后 可以使用。
问题原因
最后排查,居然是由于设置了开机动画导致的在像素流插件启动的时候,没有获取到TargetWindow对象。关闭开机动画之后,可以正常使用UE5.1进行像素流的鼠标控制。
我的知识星球
请关注公众号g0415shenw 加入知识星球。
星球地址 https://t.zsxq.com/15EvfoA7n
星球有本人经验心得全部总结 涵盖音视频,gb28181、虚幻引擎、其他编程工具等等。另外还可以在星球提问,我会尽力答复,等于给您多了一个引路人。