UWP的Unity项目,在PC上运行时,如果锁屏(手动或自动)再解锁,游戏画面和进度正常,但是无法进行鼠标、键盘或手柄的操作。这Bug在很多线上的Unity项目中存在。
原因:UWP App的系统事件触发有Bug。
在App的窗口被隐藏、切换到后台状况下,Window.Current.CoreWindow.Activated事件会被触发,参数中有bool值来表明当前主窗口是否是激活状态,只有激活状态的窗口才可以接受鼠标键盘灯信息;
经过测试,正常的切换和切回操作,该状态会成对(激活、非激活)触发,
同时成对触发的,还有Window.Current.CoreWindow.VisibilityChanged 事件
下图为触发时的log
,可以看出触发的顺序还有 2X2 =4个事件
但是在屏幕锁屏再解锁的操作过程中,只有VisibilityChanged成对触发,Activated事件并没能成对触发
下图为触发时的Log
,可以看出,缺失了一次Activated激活事件。
但并不意味着此时的主窗口是非激活状态的,因为当手动调用窗口的Acitve()方法时,并没有收到Activated事件,且此时,窗口上的原生UI是可以接受鼠标、键盘的输入的。
所以,仅仅是因为操作系统少发了一次系统事件,而这个事件会被Unity捕获,来判断窗口状态
Unity初始化的时候通过这句代码来获取所有的CoreWindow的事件并响应。
解决办法:
因为VisibilityChanged事件可以被正常触发,所以在该事件中,通知Unity,我们的窗口已经是激活的了。
获取并处理VisibilityChanged事件
同过在HelloWorld和Crossy Road项目中测试,已经解决了这个问题。
sOUTHeR.
时间: 2024-10-01 00:31:54