导致切换电脑之后应用程序分辨率变了的原因:

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.通过程序来删除:

具体代码参照我的另一片文章:

首先在你应用程序最开始的地方判断你所对应的包名是否存在,如果存在则删除。