Skip to content

URP透明窗口

基本说明

使用kirurobo/UniWindowController: Makes your Unity window transparent and allows you to drop files提供的透明黄口组件。

安装Package

  • A. 使用 Unity Package Manager (UPM)

  • 在 Unity 编辑器中打开 [Window] -> [Package Manager]

  • 点击 [+] 按钮,选择 [Add package from git URL...]
  • 输入以下链接并点击 [Add]https://github.com/kirurobo/UniWindowController.git#upm

  • B. 使用 UnityPackage

  • Release 页面 下载 .unitypackage 文件。
  • 将该资源导入到Unity 项目中。

使用

找到该Package的文件目录,按Kirurobo\Kirurobo\UniWindowController\Runtime查找UniWindowController预制体,并拖入场景层级(Hierarchy)中。

image-20260124185023596

此处也可以在场景中自行创建一个空对象,并挂载Uni Window Controller组件。

参数

Uni Window Controller组件提供了以下可自定义的属性:

点击展开参数说明
Property type Note
isTransparent bool 是否开启窗口透明
isTopmost bool 是否开启窗口置顶
isZoomed bool 是否最大化窗口,也可以用来获取当前窗口是否最大化
isHitTestEnabled bool 是否启用命中检测。
开启后,插件会自动检测鼠标下方是否有像素(alpha通道),如果是透明则穿透窗口。
isClickThrough bool 是否开启鼠标穿透,适用于非透明区域

URP的单独处理

默认情况下,urp的后处理(Posting)和透明窗口不兼容,Post相关Shader返回三通道的颜色,为了能在透明窗口上进行后处理,需要手动修改urp的默认Shader文件,以返回四通道的颜色。

定位当前项目使用的配置文件

展开Window>Package Manager选项卡,查看Universal RP的版本。

image-20251224141912894

打卡项目根目录,进入项目根目录\Library\PackageCache\,找到com.unity.render-pipelines.universal@版本号,将整个文件夹复制到项目根目录\Packages\下。

这一步的目的是拉取urp文件作为自定义配置文件。

修改配置文件

进入项目根目录\Packages\com.unity.render-pipelines.universal@14.0.11\Shaders\PostProcessing、,找到UberPost.shader进行修改。

打开文件,找到以下内容:

half4 FragUberPost(Varyings input) : SV_Target
        {  UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
            float2 uv = SCREEN_COORD_APPLY_SCALEBIAS(UnityStereoTransformScreenSpaceTex(input.texcoord));
            float2 uvDistorted = DistortUV(uv);

            half3 color = (0.0).xxx;   //在这之后添加内容
            ...
            return half4(color, 1.0);
        }

从这里可以看出,urp进行后处理时默认不对透明度进行处理,且直接返回alpha=1.0的颜色。因此,我们需要修改Shader,使它将输入的Alpha通道暂存,并在最后和rgb通道一并返回。

共有两个修改点:

1.找到half3 color = (0.0).xxx;,在下方增加以下内容,声明变量暂存输入的alpha通道并存入值;

half alpha = 0;
alpha = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uvDistorted).a;

2.找到return half4(color, 1.0),将1.0修改为先前声明的alpha,以打包返回。

 return half4(color, alpha);

保存文件,此后就能正常地使用urp进行后处理且保持透明窗口。

注意事项

需要注意,许多后处理的效果是针对全屏的,即便保留了透明度。

此外,复制过来的urp包中有大量无用且对增加版本控制难度的文件,以下目录下的内容可以完全删除:

  • Documentation~
  • Samples~
  • Tests