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

如何在URP中让主相机忽略夜视相机的光源?

解决URP中夜视相机专属灯光的问题

为什么原内置管线脚本失效

URP采用统一的可脚本化渲染管线管理流程,MonoBehaviour的OnPreCull/OnPreRender等相机回调执行时机与内置管线差异极大,直接修改灯光启用状态无法在正确的渲染阶段生效,导致脚本失效。

简便解决方案:利用URP灯光剔除遮罩

这是无需代码的最优方案,直接通过URP的相机设置实现灯光的相机专属可见性:

  • 创建一个专属层,例如命名为NightVisionLight
  • 将你的夜视聚光灯的Layer设置为NightVisionLight
  • 选中主相机,在Inspector面板的Universal Additional Camera Data组件中,找到Light Culling Mask选项,取消勾选NightVisionLight层
  • 选中夜视相机,同样在Light Culling Mask中勾选NightVisionLight层

这样主相机将完全忽略该灯光,只有夜视相机才会渲染它的光照效果。

动态控制方案:RenderPipelineManager回调脚本

如果需要动态开启/关闭夜视灯光(比如按快捷键切换夜视),可以使用URP的全局渲染事件回调替代原脚本:

using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;

public class NightVisionLightController : MonoBehaviour
{
    [SerializeField] private Light nightVisionLight;
    [SerializeField] private Camera nightVisionCamera;

    private void OnEnable()
    {
        RenderPipelineManager.beginCameraRendering += ToggleLightOnCameraRender;
        RenderPipelineManager.endCameraRendering += ResetLightAfterRender;
    }

    private void OnDisable()
    {
        RenderPipelineManager.beginCameraRendering -= ToggleLightOnCameraRender;
        RenderPipelineManager.endCameraRendering -= ResetLightAfterRender;
    }

    private void ToggleLightOnCameraRender(ScriptableRenderContext context, Camera camera)
    {
        // 仅在渲染夜视相机时开启灯光
        nightVisionLight.enabled = camera == nightVisionCamera;
    }

    private void ResetLightAfterRender(ScriptableRenderContext context, Camera camera)
    {
        // 渲染完毕后关闭灯光,避免影响后续相机渲染
        if (camera == nightVisionCamera)
        {
            nightVisionLight.enabled = false;
        }
    }
}

将此脚本挂载到任意GameObject上,指定对应的夜视灯光和相机即可。

补充:为何层遮罩原方法无效

你之前尝试的主相机剔除遮罩忽略灯光层无效,是因为URP中相机的常规剔除遮罩仅控制物体的可见性,不影响灯光。灯光的可见性由相机的Light Culling Mask和灯光自身的Culling Mask共同控制,这是URP与内置管线的核心差异之一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:57:17