导致切换电脑之后应用程序分辨率变了的原因:
unity打包的程序会在注册表记录你打包程序之后的默认设置;
当Unity3d 打包Windows Standalone 不显示分辨率选择框时,画质相关系统设定存储在注册表里的如下位置
HKEY_CURRENT_USER\Software\ [CompanyName] \ [ProductName]
CompanyName 是打包里的公司名
ProductName 是打包里的产品名
没有此Key的话右键新建加上就好了
Key(注册表里对应的选项<键>) | Type(注册表里对应的值的类型) | Value(注册表里对应的值<键的值>) |
Screenmanager Is Fullscreen mode_h3981298716 | DWORD | 0 非全屏 | 1 全屏 |
Screenmanager Resolution Height_h2627697771 | DWORD | 具体Height 如 1080 |
Screenmanager Resolution Width_h182942802 | DWORD | 具体Width 如 1920 |
UnitySelectMonitor_h17969598 | DWORD | 屏幕ID 1 | 2 | 3 |
UnityGraphicsQuality_h1669003810 | DWORD | 画质设定 Fast 0~5 Fantasic |
DWORD:在windows的注册表中,二进制的值是没有长度限制的,可以是任意字节长。但是在注册表编辑中,二进制会以十六进制的方式显示出来。DWORD值就是一个32位(双字节长)长度的数值,所以在注册表中系统以十六进制的方式显示DWORD值,64位系统当中还多一个DWORD(64位)的值。在系统中二进制和DWORD值的图标是一样的,不过二进制值是两位两位的显示,DWORD值的前面则标有标志性的0x,表示十六进制。所以后面的值显示可能不是普通数字,但是懂程序应该都能看懂。
那么问题就来了,如果你打包了很多次的unity的包,而且包名相同的话就会出现分辨率错乱的问题,导致这个的原因就是相同包名的unity程序在注册表中只能注册一个项,所以不管你打包多少相同包名的unity程序他在对应的注册表中都是一个设置。
解决办法:
一:使用不同的unity报名打包。
二:第一个办法最简单直接,但是一般情况不能适用,因为基本公司项目包名都是统一的所以解决办法:
1.找到注册表中对应的应用程序的包的设置→删除→再打包→解决。(这个方法是非常蠢的办法)
2.通过程序来删除:
具体代码参照我的另一片文章:
首先在你应用程序最开始的地方判断你所对应的包名是否存在,如果存在则删除。