首页 > 解决方案 > 在unity3d中检测Windows夜灯模式是否

问题描述

我一直在寻找一种方法来使用 c# 在 unity3d 中检测窗口夜灯模式是否打开,但一直无法找到可以在统一中工作的方法。我在这里找到了一个类似问题的帖子,但是这不适用于统一,并且当我尝试统一使用它时给了我这个错误。见这里。我尝试为 System.Environment.UserName 切换注册表。这产生了另一个新错误。请参阅此处的错误 2。如果有人知道如何解决这个问题,如果你能提供帮助,我会很高兴。这是统一拒绝的代码示例:

private static bool IsNightLightEnabled()
{
    const string BlueLightReductionStateKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\DefaultAccount\Current\default$windows.data.bluelightreduction.bluelightreductionstate\windows.data.bluelightreduction.bluelightreductionstate";
    using (var key = Environment.UserName.OpenSubKey(BlueLightReductionStateKey))
    {
//this doesn't matter
    }
}

private static bool IsNightLightEnabled()
{
    const string BlueLightReductionStateKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\DefaultAccount\Current\default$windows.data.bluelightreduction.bluelightreductionstate\windows.data.bluelightreduction.bluelightreductionstate";
    using (var key = Registry.OpenSubKey(BlueLightReductionStateKey))
    {
//this doesn't matter
    }
}

要获取我遇到的错误,请将这些粘贴到 ac# 脚本中并放入统一项目资产中。

标签: c#unity3d

解决方案


看起来我不需要对 .NET 框架库项目做任何特殊的事情。找到答案很困难,但我设法将其归结为我的统一偏好。

要解决此问题,您只需打开一个统一项目,转到编辑 > 项目设置 > 播放器。接下来选择 PC 的设置,然后转到其他设置 > 配置 > API 级别兼容性,然后选择 .NET 4.x

这将允许您使用 Unity 项目中的大多数 .NET 4.5 方法功能,包括注册表及其所有方法和字段。


推荐阅读