现在的位置: 首页 > 综合 > 正文

Unity3D 客户端版程序全屏和窗口化的一个坑

2013年02月23日 ⁄ 综合 ⁄ 共 1043字 ⁄ 字号 评论关闭

相关类, UnityEngine.Screen

1、做实验的时候,使用的是Input.GetKey ,写在Update里,所以随后的很多帧都执行了切换逻辑
UnityEngine.Screen.fullScreen 在设置之后,不会立即变更,需要写额外的等待逻辑,确保切换完成

2、如果用户屏幕使用显卡工具进行旋转(我就将显示器竖起来使用,向左旋转了90°),全屏的时候还好,在这之后如果再恢复为窗口化或者使用Alt+Tab切回屏幕,或者进入3D屏保之类这种会导致设备丢失的事件,Unity就会在设备重建的时候出现使显卡驱动崩溃,甚至蓝屏的现象( 我都遇到过了)。暂时还不知道怎么检查屏幕是进行过旋转的,不过就算查出来了,也无法解决,只能给出提示。如果出现这个现象,只能用户自己克服了。

3、窗口化时,分辨率设置如果 Screen.width/height 超过了 Screen.currentResolution 的设定,设置就会失败。
如果ProjectSettings里将分辨率设置超过了目标机器屏幕分辨率,客户端启动后,会自动“裁剪”窗口大小(不是缩放画面哦,会被裁掉一部分游戏画面,而且尺寸也不是规则的)。但是如果满足 Screen.wh < Screen.currentResolution.wh ,就可以设置成功,并且会自动将游戏画面缩放以配合窗口大小调整。
所以应该根据宽高和纵横比计算一个合适尺寸,这点针对笔记本用户尤为重要。

(2013/9/3)4、Screen.Resolutions 里是屏幕可以设置的分辨率集合,但不是全部:视 Screen.currentResolution 为0,则Screen.Resolutions[n] 就是 1、2、3、4,所有小于current的Resolution就不被unity所列举了,不过一般也用不上Screen.Resolutions里的数据。

(2013/9/5)5、在800*600的显示器分辨率下,启动客户端版程序,从窗口切换到全屏后,自动调整为1280,720了,也就是 Screen.fullScreen = true之后, Screen.currentResolution.wh = 1280,720 ,我敢肯定在别的分辨率下也有类似的问题。正因为这一点,Screen.fullScreen 就没任何意义了,因为会扰乱切换回来之后的分辨率设置(参考坑#1)。建议完全使用 Screen.SetResolution 接口来设置,无论是分辨率还是全屏,确保不会出现意想不到的事情。

抱歉!评论已关闭.