【unity小技巧】unity通过代码进行更改后处理效果

简介: 【unity小技巧】unity通过代码进行更改后处理效果

新增后处理效果

效果

代码更改后处理

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

目录
相关文章
|
4天前
|
图形学 开发者
【Unity小技巧】unity移动物体的探究——使用8个不同方法
【Unity小技巧】unity移动物体的探究——使用8个不同方法
11 1
|
4天前
|
图形学
【unity小技巧】实现投掷物品,比如长矛,刀具,手榴弹和其他物体
【unity小技巧】实现投掷物品,比如长矛,刀具,手榴弹和其他物体
6 1
|
4天前
|
图形学
【unity小技巧】实现FPS武器的瞄准放大效果(UGUI实现反向遮罩,全屏遮挡,局部镂空效果)
【unity小技巧】实现FPS武器的瞄准放大效果(UGUI实现反向遮罩,全屏遮挡,局部镂空效果)
8 1
|
4天前
|
图形学
【unity小技巧】unity3d创建和实现破碎打破物品,万物可破碎
【unity小技巧】unity3d创建和实现破碎打破物品,万物可破碎
4 0
【unity小技巧】unity3d创建和实现破碎打破物品,万物可破碎
|
4天前
|
图形学
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
5 0
|
4天前
|
存储 图形学
【unity小技巧】unity事件系统创建通用的对象交互的功能
【unity小技巧】unity事件系统创建通用的对象交互的功能
7 0
|
4天前
|
图形学
【unity小技巧】unity3D寻路指示轨迹预测
【unity小技巧】unity3D寻路指示轨迹预测
10 0
|
4天前
|
图形学
【unity小技巧】unity读excel配置表操作,excel转txt文本,并读取txt文本内容,实例说明
【unity小技巧】unity读excel配置表操作,excel转txt文本,并读取txt文本内容,实例说明
8 0
|
4天前
|
编解码 算法 图形学
【unity小技巧】减少Unity中的构建打包大小
【unity小技巧】减少Unity中的构建打包大小
5 0
|
4天前
|
图形学
【unity小技巧】Unity人物衣服布料系统的探究 —— Cloth组件
【unity小技巧】Unity人物衣服布料系统的探究 —— Cloth组件
6 0

相关实验场景

更多