UWP锁、解屏后无法响应操作

时间:2023-03-09 07:30:07
UWP锁、解屏后无法响应操作

UWP的Unity项目,在PC上运行时,如果锁屏(手动或自动)再解锁,游戏画面和进度正常,但是无法进行鼠标、键盘或手柄的操作。这Bug在很多线上的Unity项目中存在。

原因:UWP App的系统事件触发有Bug。

在App的窗口被隐藏、切换到后台状况下,Window.Current.CoreWindow.Activated事件会被触发,参数中有bool值来表明当前主窗口是否是激活状态,只有激活状态的窗口才可以接受鼠标键盘灯信息;

经过测试,正常的切换和切回操作,该状态会成对(激活、非激活)触发,

同时成对触发的,还有Window.Current.CoreWindow.VisibilityChanged 事件

下图为触发时的log

UWP锁、解屏后无法响应操作,可以看出触发的顺序还有 2X2 =4个事件

但是在屏幕锁屏再解锁的操作过程中,只有VisibilityChanged成对触发,Activated事件并没能成对触发

下图为触发时的Log

UWP锁、解屏后无法响应操作,可以看出,缺失了一次Activated激活事件。

但并不意味着此时的主窗口是非激活状态的,因为当手动调用窗口的Acitve()方法时,并没有收到Activated事件,且此时,窗口上的原生UI是可以接受鼠标、键盘的输入的。

所以,仅仅是因为操作系统少发了一次系统事件,而这个事件会被Unity捕获,来判断窗口状态

Unity初始化的时候通过这句代码来获取所有的CoreWindow的事件并响应。

UWP锁、解屏后无法响应操作

解决办法:

因为VisibilityChanged事件可以被正常触发,所以在该事件中,通知Unity,我们的窗口已经是激活的了。

获取并处理VisibilityChanged事件

UWP锁、解屏后无法响应操作

UWP锁、解屏后无法响应操作

同过在HelloWorld和Crossy Road项目中测试,已经解决了这个问题。

sOUTHeR.