莱芜论坛24小时主题帖,搜索引擎优化的内容有哪些,图片加文字在线制作,晋城网络公司做网站的遇到一个新需求#xff0c;在exe执行初期把指定内容写入注册表#xff0c;Playerprefs固然可以写入#xff0c;但是小白不知道怎么利用Playerprefs写入DWORD类型的数据#xff0c;因此使用了Registry类
一. 对注册表中键的访问
注册表中共可分为五类 一般在操作时#…遇到一个新需求在exe执行初期把指定内容写入注册表Playerprefs固然可以写入但是小白不知道怎么利用Playerprefs写入DWORD类型的数据因此使用了Registry类
一. 对注册表中键的访问
注册表中共可分为五类 一般在操作时基本使用CurrentUser类
//使用Registry类要using win32的包using Microsoft.Win32;那么如何将数据写入注册表?? public static void SetRegistryKey(string valueName, uint value, RegistryValueKind valueKind){//提供对注册表中HKEY_CURRENT_USER键的访问RegistryKey key Registry.CurrentUser;//打开softwareRegistryKey software key.OpenSubKey(SOFTWARE, true);RegistryKey softKey software.OpenSubKey(第一层级, true);if (softKey null){softKey software.CreateSubKey(第一层级, true);}RegistryKey versionKey softKey.OpenSubKey(第二层级, true);if (versionKey null){versionKey softKey.CreateSubKey(第二层级, true);}Int32 tempInt 0; //预先定义一个有符号32位数//unchecked语句块内的转换不做溢出检查unchecked{tempInt (Int32)value; //强制转换成有符号32位数}//在项里创建值versionKey.SetValue(valueName, tempInt, valueKind);//最后要关掉versionKey.Close();}
//调用时SetRegistryKey(MARKER, 0xffffffff, RegistryValueKind.DWord);二. 遇到的问题
这里在写入时遇到两个问题
写入值为0xffffffff时会报错 原因为十六进制的ffffffff数值太大了若直接setValue必然会报错 所以上面代码中写到
Int32 tempInt 0; //预先定义一个有符号32位数
//unchecked语句块内的转换不做溢出检查
unchecked
{tempInt (Int32)value; //强制转换成有符号32位数
}
//在项里创建值
versionKey.SetValue(valueName, tempInt, valueKind);需要先将十六进制的大数通过Int32进行强转转成有符号的数值在注册表中会自动补位 2. 注册表内容的写入放在了Awake()方法中 当放在Awake()中时打出的包无论是否管理员方式运行均无法插入至注册表 后面放在了Start()中一下子就写入了 不知道是什么原因但是若有些相似的问题大家可以避免下 3. 如果win32包已经导入但是Registry类依然报错 可以在unity最上方菜单栏File-Build Settings-Player Settings-Other Settings-Api compatibility level改成.Net 4.X 我使用的是unity2018.4.32版本有点老了