无法全屏
打包Windows程序,概率性出现无法全屏或分辨率不匹配等问题,使用电视机做显示器比较容易出现这些问题,看注册表就知道了;
修改注册表: HKEY_CURRENT_USER\Software\ [CompanyName] \ [ProductName]
键值:
key type value
Screenmanager Fullscreen mode_h3630240806 REG_DWORD 0:非全屏 /1:全屏
UnityGraphicsQuality_h1669003810 REG_DWORD 0-5:画质等级
UnitySelectMonitor_h17969598 REG_DWORD 1:显示器索引
Screenmanager Resolution Width_h182942802 REG_DWORD 1920:默认是十六进制表示,可以换成十进制
Screenmanager Resolution Height_h2627697771 REG_DWORD 1080:默认是十六进制表示,可以换成十进制
解决
- 设置
Screenmanager Fullscreen mode_h3630240806
为1 - 删除
Screenmanager Resolution Width_h182942802
和Screenmanager Resolution Height_h2627697771
减小出现问题的概率
unity里启动后,删除注册表
//注册表中屏幕相关Key
private readonly string regeditScreenFullscreenModeKey = "Screenmanager Fullscreen mode_h3630240806";
private readonly string regeditScreenResolutionHeightKey = "Screenmanager Resolution Height_h2627697771";
private readonly string regeditScreenResolutionUseNativeKey = "Screenmanager Resolution Use Native_h1405027254";
private readonly string regeditScreenResolutionWidthKey = "Screenmanager Resolution Width_h182942802";
//注册表当前工程项
private StringBuilder regeditPathNode = new StringBuilder();
/// <summary>
/// 初始化
/// </summary>
public void OnSingletonInit()
{
regeditPathNode = regeditPathNode.Append("Software\\").Append(Application.companyName).Append("\\").Append(Application.productName);
}
//清空注册表数据
if (Utils.IsJudgeNode(regeditPathNode.ToString()))
{
if (Utils.IsJudgeNodeKey(regeditPathNode.ToString(), regeditScreenFullscreenModeKey))
{
Utils.DeleteNodeKey(regeditPathNode.ToString(), regeditScreenFullscreenModeKey);
}
if (Utils.IsJudgeNodeKey(regeditPathNode.ToString(), regeditScreenResolutionHeightKey))
{
Utils.DeleteNodeKey(regeditPathNode.ToString(), regeditScreenResolutionHeightKey);
}
if (Utils.IsJudgeNodeKey(regeditPathNode.ToString(), regeditScreenResolutionUseNativeKey))
{
Utils.DeleteNodeKey(regeditPathNode.ToString(), regeditScreenResolutionUseNativeKey);
}
if (Utils.IsJudgeNodeKey(regeditPathNode.ToString(), regeditScreenResolutionWidthKey))
{
Utils.DeleteNodeKey(regeditPathNode.ToString(), regeditScreenResolutionWidthKey);
}
}
注册表类:
using Microsoft.Win32;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 工具类
/// </summary>
public class Utils
{
#region 公有方法
/// <summary>
/// 判断注册信息节点是否存在
/// </summary>
/// <param name="key">"SOFTWARE\\Microsoft"格式</param>
/// <returns></returns>
public static bool IsJudgeNode(string key)
{
return (Registry.CurrentUser.OpenSubKey(key) != null);
}
/// <summary>
/// 判断注册表节点内是否有某个KEY
/// </summary>
/// <param name="key">"SOFTWARE\\Microsoft"格式</param>
/// <param name="prop">传入属性的键值</param>
/// <returns></returns>
public static bool IsJudgeNodeKey(string key, string prop)
{
RegistryKey rsg = Registry.CurrentUser.OpenSubKey(key, true);
if (rsg != null)
{
var obj = rsg.GetValue(prop);
if (obj != null)
{
return true;
}
}
return false;
}
/// <summary>
/// 删除指定节点指定键值
/// </summary>
/// <param name="key"></param>
/// <param name="prop"></param>
public static void DeleteNodeKey(string key, string prop)
{
RegistryKey rKey = Registry.CurrentUser;
RegistryKey software = rKey.OpenSubKey(key, true);
//删除
software.DeleteValue(prop);
//完成读取和修改数据后,应关闭该键
software.Close();
}
#endregion
}
最后一次更新于2024-10-14