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

如何通过脚本访问Post Processing调整vignette效果参数

Unity 助推器触发时动态修改Vignette后处理参数实现

根据你项目使用的渲染管线,对应选择实现方案即可,以下方案都做了平滑过渡处理,不会出现效果硬切的违和感。


前置准备

  • 确认项目已经导入对应管线的后处理依赖包
  • 场景中配置好后处理Volume,提前在Volume的Profile配置里添加Vignette效果
  • 把需要动态修改的Vignette参数(强度、颜色等)前面的override勾选框打上,否则代码修改不会生效

方案1:URP/HDRP 管线(Volume模式)

  1. 脚本顶部引入对应命名空间
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
// 如果你用的是HDRP管线,把上面的Universal替换成HighDefinition即可
  1. 完整逻辑代码
public class BoostVignetteEffect : MonoBehaviour
{
    [Header("后处理引用")]
    public Volume postProcessVolume;
    private Vignette _vignette;

    [Header("效果参数")]
    public float boostIntensity = 0.65f;
    public float defaultIntensity = 0.15f;
    public float transitionSpeed = 4f;
    public Color boostVignetteColor = new(1f, 0.15f, 0.1f, 1f);

    void Start()
    {
        // 从配置中提取Vignette实例
        if (!postProcessVolume.profile.TryGet(out _vignette))
        {
            Debug.LogError("未在后处理配置中找到Vignette组件,请先添加!");
        }
    }

    void Update()
    {
        // 这里替换成你自己的助推器状态判断逻辑,比如读取车辆的加速布尔值
        bool isBoostActive = Input.GetKey(KeyCode.LeftShift);
        float targetIntensity = isBoostActive ? boostIntensity : defaultIntensity;
        
        // 平滑过渡强度
        _vignette.intensity.value = Mathf.Lerp(
            _vignette.intensity.value, 
            targetIntensity, 
            Time.deltaTime * transitionSpeed
        );

        // 按需开启:助推时把暗角改成带颜色的竞速风格,平时切回纯黑暗角
        Color targetColor = isBoostActive ? boostVignetteColor : Color.black;
        _vignette.color.value = Color.Lerp(
            _vignette.color.value, 
            targetColor, 
            Time.deltaTime * transitionSpeed
        );
    }
}

把这个脚本挂在场景任意物体上,把带全局后处理的Volume物体拖到postProcessVolume字段即可,参数可以直接在Inspector面板调整到你想要的效果。


方案2:Built-in 内置管线(Post Processing Stack v2)

如果是老项目用内置管线+官方PostProcessing v2插件,用下面的代码即可:

  1. 引入命名空间
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
  1. 完整逻辑代码
public class BoostVignetteEffect : MonoBehaviour
{
    public PostProcessVolume postProcessVolume;
    private Vignette _vignette;

    public float boostIntensity = 0.65f;
    public float defaultIntensity = 0.15f;
    public float transitionSpeed = 4f;

    void Start()
    {
        if (!postProcessVolume.profile.TryGetSettings(out _vignette))
        {
            Debug.LogError("未在后处理配置中找到Vignette组件,请先添加!");
        }
    }

    void Update()
    {
        // 替换成你自己的助推器判断逻辑
        bool isBoostActive = Input.GetKey(KeyCode.LeftShift);
        float targetIntensity = isBoostActive ? boostIntensity : defaultIntensity;
        
        _vignette.intensity.value = Mathf.Lerp(
            _vignette.intensity.value, 
            targetIntensity, 
            Time.deltaTime * transitionSpeed
        );
    }
}

常见踩坑

  • 如果代码运行报错说找不到Vignette,先检查Profile里是不是真的加了Vignette,对应参数的override是不是勾上了
  • 不要每帧重新GetComponent或者TryGetVignette,在Start里缓存一次就行,性能更好
  • 效果过渡一定要加Lerp,瞬间切换的暗角会非常突兀,过渡速度调到3-5之间视觉感受最自然

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:15:46