最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
unity 发布程序窗口化怎么设置
之前我也遇到过如何设置Unity发布程序窗口化的问题,现在将具体的使用方法和相关要点分享出来。因为其中存在一些容易出错的地方,处理不当可能会影响项目进程,下面是我的详细总结。
1. 切换逻辑执行问题
在实验过程中,使用Input.GetKey并将其写在Update函数里,这会导致后续很多帧都执行切换逻辑。需要注意的是,UnityEngine.Screen.fullScreen在设置之后,不会立即变更,必须编写额外的等待逻辑,以确保切换操作完成。
2. 屏幕旋转导致的显卡驱动崩溃问题
如果用户使用显卡工具对屏幕进行旋转(例如将显示器竖起来,向左旋转90°),全屏模式下可能不会出现问题,但当恢复为窗口化、使用Alt + Tab切回屏幕或者进入3D屏保等导致设备丢失的事件发生时,Unity在设备重建时可能会使显卡驱动崩溃,甚至出现蓝屏现象(我本人就遇到过)。目前暂时不清楚如何检查屏幕是否进行过旋转,即便能够检测出来,也无法解决该问题,只能给出提示。若出现此现象,只能由用户自行解决。
3. 窗口化分辨率设置问题
窗口化时,分辨率设置存在一定规则。如果Screen.width或Screen.height超过了Screen.currentResolution的设定,设置将会失败。若在ProjectSettings里将分辨率设置超过了目标机器屏幕分辨率,客户端启动后,会自动“裁剪”窗口大小(并非缩放画面,会裁掉一部分游戏画面,且尺寸不规则)。而当满足Screen.width < Screen.currentResolution.width且Screen.height < Screen.currentResolution.height时,设置可以成功,并且游戏画面会自动缩放以适配窗口大小。因此,应该根据宽高和纵横比计算一个合适的尺寸,这对于笔记本用户尤为重要。
4. Screen.Resolutions数据问题
Screen.Resolutions存储的是屏幕可以设置的分辨率集合,但并非全部。若将Screen.currentResolution视为0,那么Screen.Resolutions[n]对应的是1、2、3、4等,所有小于current的分辨率不会被Unity列举出来。不过,在实际应用中,一般很少会用到Screen.Resolutions里的数据。
5. 全屏切换分辨率问题
在800 600的显示器分辨率下,启动客户端版程序,从窗口切换到全屏后,分辨率会自动调整为1280 720,即Screen.fullScreen = true之后,Screen.currentResolution.width和Screen.currentResolution.height变为1280和720。可以推测在其他分辨率下也会有类似问题。由于这一情况,使用Screen.fullScreen会扰乱切换回来之后的分辨率设置(参考问题1)。建议完全使用Screen.SetResolution接口来设置分辨率和全屏状态,以避免出现意想不到的问题。