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

Unity 2023+版本Lighting窗口Workflow Settings标签缺失,如何自动更新环境光?

Unity 2023+ 环境光自动更新解决方案(替代缺失的Workflow Settings标签)

一、找到替代的自动更新选项

Unity 2023及以上版本将原Workflow Settings标签的功能整合到了Lighting窗口的Scene标签页中,你可以这样开启自动更新:

  • 打开Lighting窗口:Window > Rendering > Lighting
  • 切换到「Scene」标签
  • 在「Environment Lighting」区域,勾选Auto Generate选项

    这个选项就是2022版本中控制自动更新环境光的开关,勾选后Unity会在灯光/环境参数变化时自动重新计算GI

二、运行时动态更新的最优方案

如果你的场景需要实时动态调整(比如昼夜循环),仅靠Auto Generate在运行时可能不够灵活,相比定时协程调用DynamicGI.UpdateEnvironment(),更优的方式是仅在参数变化时触发更新,避免不必要的性能消耗:

1. 监听灯光参数变化

针对方向光、点光等的角度、颜色、强度变化,直接在参数修改时触发更新:

using UnityEngine;

public class DynamicLightUpdater : MonoBehaviour
{
    [SerializeField] private Light directionalLight;
    private Quaternion lastRotation;
    private Color lastColor;
    private float lastIntensity;

    void Update()
    {
        bool hasChanged = false;

        // 检测方向光角度变化
        if (directionalLight.transform.rotation != lastRotation)
        {
            lastRotation = directionalLight.transform.rotation;
            hasChanged = true;
        }

        // 检测颜色变化
        if (directionalLight.color != lastColor)
        {
            lastColor = directionalLight.color;
            hasChanged = true;
        }

        // 检测强度变化
        if (Mathf.Abs(directionalLight.intensity - lastIntensity) > 0.01f)
        {
            lastIntensity = directionalLight.intensity;
            hasChanged = true;
        }

        if (hasChanged)
        {
            DynamicGI.UpdateEnvironment();
        }
    }
}

2. 使用事件驱动更新

如果你的灯光参数是通过专门的控制器脚本修改,可通过事件订阅的方式解耦:

// 灯光控制器脚本
using UnityEngine;
using UnityEngine.Events;

public class LightParameterController : MonoBehaviour
{
    [SerializeField] private Light targetLight;
    public UnityEvent OnLightChanged;

    public void UpdateLightColor(Color newColor)
    {
        if (targetLight.color != newColor)
        {
            targetLight.color = newColor;
            OnLightChanged?.Invoke();
        }
    }

    public void UpdateLightIntensity(float newIntensity)
    {
        if (Mathf.Abs(targetLight.intensity - newIntensity) > 0.01f)
        {
            targetLight.intensity = newIntensity;
            OnLightChanged?.Invoke();
        }
    }
}
// 环境GI更新脚本
using UnityEngine;

public class EnvironmentGIUpdater : MonoBehaviour
{
    [SerializeField] private LightParameterController lightController;

    void OnEnable()
    {
        lightController.OnLightChanged += RefreshEnvironmentGI;
    }

    void OnDisable()
    {
        lightController.OnLightChanged -= RefreshEnvironmentGI;
    }

    private void RefreshEnvironmentGI()
    {
        DynamicGI.UpdateEnvironment();
    }
}

三、补充说明

  • 编辑器中,勾选Auto Generate后,Unity会自动处理灯光变化时的GI更新,无需手动写代码;
  • 运行时如果使用Realtime Dynamic Global Illumination(Scene标签页中设置),Unity会自动处理部分动态GI更新,但环境光的渐变(如天空盒切换、方向光角度连续变化)仍需手动触发DynamicGI.UpdateEnvironment();
  • 避免频繁调用DynamicGI.UpdateEnvironment(),该方法会消耗一定性能,事件驱动的方式能最大程度减少不必要的调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:51:17