You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 11下Unity透明窗口异常:黑色完全透明问题求助

桌面透明消息应用在Windows 11下的透明度异常问题

我正在开发一款可覆盖桌面的透明消息应用,基于Unity开发,但判断问题出在Windows 11而非Unity。升级到Windows 11后出现以下异常:

在Unity编辑器中设置的全屏透明窗口,构建后变成了由颜色的“白度”决定透明度——黑色完全透明,白色完全不透明。测试多个不同来源的项目,结果一致。

我对Windows API不熟悉,不确定这是Windows 11的新限制还是遗漏了某些设置,求解决思路。

相关代码

private const int GWL_EXSTYLE = -20;
private const long WS_EX_LAYERED = 0x00080000L;
private const long WS_EX_TRANSPARENT = 0x00000020L;
private const uint LWA_COLORKEY = 0x00000001;
private const uint LWA_ALPHA = 0x00000002;
private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);

public void Start()
{
#if !UNITY_EDITOR
            m_HWnd = GetActiveWindow();
            var margins = new MARGINS() {cxLeftWidth = -1};
            DwmExtendFrameIntoClientArea(m_HWnd, ref margins);
            
            SetLayeredWindowAttributes(m_HWnd, 0, 0, LWA_ALPHA);
            
            SetWindowPos(m_HWnd, HWND_TOPMOST, 0, 0, 0, 0, 0);
#endif
            Application.runInBackground = true;
}

public void Update()
{
     m_ClickThroughProvider.Update(this.gameObject);
            
     SetClickThrough(m_ClickThroughProvider.GetClickThrough());
}

private void SetClickThrough(bool shouldClickThrough)
{
#if !UNITY_EDITOR
     if (shouldClickThrough)
         SetWindowLongPtrA(m_HWnd, GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TRANSPARENT);
     else
         SetWindowLongPtrA(m_HWnd, GWL_EXSTYLE, WS_EX_LAYERED);

#endif
}

效果对比

  • 预期效果(Unity编辑器内):窗口正常透明,UI元素按设计显示透明度
  • 实际效果(构建后):UI元素的透明度由自身颜色亮度决定,黑色完全透明,白色完全不透明

内容的提问来源于stack exchange,提问作者Gwitninm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:05:30