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

Godot 4.0如何让未被光源照亮的对象变透明而非黑色

解决方案

直接用自定义CanvasItem着色器配合Light Mask就能实现,不用调层级或全局透明度,步骤如下:

  • 给你的PointLight2D设置专属Light Mask:比如只勾选第5层(选个没被其他光源占用的层就行),同时把目标图层的所有对象的Light Mask也勾选第5层——这样这个光源只会照亮目标对象。
  • 给所有非目标图层的对象添加以下CanvasItem着色器:
shader_type canvas_item;

void fragment() {
    // 获取对应Light Mask层的光源影响(这里对应第5层,和PointLight2D的设置一致)
    vec4 light_influence = light_get_color(5);
    
    // 处于光源范围内时,把对象设为透明;范围外保持原样
    if (light_influence.r > 0.0) {
        COLOR.a = 0.0; // 可改成0.2这类值实现半透明
    } else {
        COLOR = texture(TEXTURE, UV) * COLOR;
    }
}

原理说明

  • light_get_color(层号)会返回当前像素受到对应Light Mask层光源的影响颜色,光源范围内返回非零值,范围外是(0,0,0,0)。
  • 非目标对象通过这个着色器判断:在光源覆盖区就变透明,不干扰目标对象的显示;光源外所有对象都保持默认照亮状态,完全匹配你的需求。
  • 全程不用调整Canvas Layer层级,也不用全局修改透明度,完美避开之前的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:12:15