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
相关产品推荐
相关产品推荐

