新增后处理效果
效果
代码更改后处理
using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public class ChangePostProcessing : MonoBehaviour { [SerializeField] private Volume volume; private void Update() { if (Input.GetKeyDown(KeyCode.T)) { // 尝试从 Volume 的 profile 中获取 Bloom 效果。 if (volume.profile.TryGet(out Bloom bloom)) { // 如果获取成功,设置 Bloom 效果的强度为 10。 bloom.intensity.value = 10f; } } if (Input.GetKeyDown(KeyCode.Y)) { // 尝试从 Volume 的 profile 中获取 ColorAdjustments 效果。 if (volume.profile.TryGet(out ColorAdjustments colorAdjustments)) { // 如果获取成功,设置饱和度为 -100(变成黑白效果)。 colorAdjustments.saturation.value = -100f; } } } }
效果
曲线控制后处理效果平滑变化
using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public class ChangePostProcessingAnimationCurve : MonoBehaviour { // 在 Inspector 面板中可以设置的 Volume 对象,用于操作后期处理效果。 [SerializeField] private Volume volume; // 在 Inspector 面板中可以设置的 AnimationCurve 对象,用于控制 Bloom 强度的变化曲线。 [SerializeField] private AnimationCurve bloomIntensityAnimationCurve; // 在 Inspector 面板中可以设置的 AnimationCurve 对象,用于控制饱和度的变化曲线。 [SerializeField] private AnimationCurve saturationAnimationCurve; // 记录上一次 T 键按下的时间。 private float bloomIntensityLastTime; // 记录上一次 Y 键按下的时间。 private float saturationLastTime; // 用于存储从 Volume 中获取的 Bloom 效果。 private Bloom bloom; // 用于存储从 Volume 中获取的 ColorAdjustments 效果。 private ColorAdjustments colorAdjustments; // 在脚本开始时运行一次,用于初始化变量。 private void Awake() { // 尝试从 Volume 的 profile 中获取 Bloom 效果。 volume.profile.TryGet(out bloom); // 尝试从 Volume 的 profile 中获取 ColorAdjustments 效果。 volume.profile.TryGet(out colorAdjustments); } private void Update() { if (Input.GetKeyDown(KeyCode.T)) { // 记录当前时间为上一次 T 键按下的时间。 bloomIntensityLastTime = Time.realtimeSinceStartup; } if (Input.GetKeyDown(KeyCode.Y)) { // 记录当前时间为上一次 Y 键按下的时间。 saturationLastTime = Time.realtimeSinceStartup; } // 动态调整 Bloom 强度。 if (bloom != null) { // 计算当前时间点相对于上一次 T 键按下时间的偏移量。 float bloomIntensity = bloomIntensityAnimationCurve.Evaluate(Time.realtimeSinceStartup - bloomIntensityLastTime); // 设置 Bloom 效果的强度。 bloom.intensity.value = bloomIntensity; } // 动态调整饱和度。 if (colorAdjustments != null) { // 计算当前时间点相对于上一次 Y 键按下时间的偏移量。 float saturation = saturationAnimationCurve.Evaluate(Time.realtimeSinceStartup - saturationLastTime); // 设置 ColorAdjustments 效果的饱和度。 colorAdjustments.saturation.value = saturation; } } }
配置
参考
https://www.youtube.com/watch?v=51iJqn5Px1k