【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月前
|
开发者 图形学 Java
揭秘Unity物理引擎核心技术:从刚体动力学到关节连接,全方位教你如何在虚拟世界中重现真实物理现象——含实战代码示例与详细解析
【8月更文挑战第31天】Unity物理引擎对于游戏开发至关重要,它能够模拟真实的物理效果,如刚体运动、碰撞检测及关节连接等。通过Rigidbody和Collider组件,开发者可以轻松实现物体间的互动与碰撞。本文通过具体代码示例介绍了如何使用Unity物理引擎实现物体运动、施加力、使用关节连接以及模拟弹簧效果等功能,帮助开发者提升游戏的真实感与沉浸感。
124 1
|
4月前
|
图形学
小功能⭐️Unity UnityEvent实现代码的选择
小功能⭐️Unity UnityEvent实现代码的选择
|
4月前
|
开发者 图形学 API
从零起步,深度揭秘:运用Unity引擎及网络编程技术,一步步搭建属于你的实时多人在线对战游戏平台——详尽指南与实战代码解析,带你轻松掌握网络化游戏开发的核心要领与最佳实践路径
【8月更文挑战第31天】构建实时多人对战平台是技术与创意的结合。本文使用成熟的Unity游戏开发引擎,从零开始指导读者搭建简单的实时对战平台。内容涵盖网络架构设计、Unity网络API应用及客户端与服务器通信。首先,创建新项目并选择适合多人游戏的模板,使用推荐的网络传输层。接着,定义基本玩法,如2D多人射击游戏,创建角色预制件并添加Rigidbody2D组件。然后,引入网络身份组件以同步对象状态。通过示例代码展示玩家控制逻辑,包括移动和发射子弹功能。最后,设置服务器端逻辑,处理客户端连接和断开。本文帮助读者掌握构建Unity多人对战平台的核心知识,为进一步开发打下基础。
158 0
|
4月前
|
开发者 图形学 C#
揭秘游戏沉浸感的秘密武器:深度解析Unity中的音频设计技巧,从背景音乐到动态音效,全面提升你的游戏氛围艺术——附实战代码示例与应用场景指导
【8月更文挑战第31天】音频设计在游戏开发中至关重要,不仅能增强沉浸感,还能传递信息,构建氛围。Unity作为跨平台游戏引擎,提供了丰富的音频处理功能,助力开发者轻松实现复杂音效。本文将探讨如何利用Unity的音频设计提升游戏氛围,并通过具体示例代码展示实现过程。例如,在恐怖游戏中,阴森的背景音乐和突然的脚步声能增加紧张感;在休闲游戏中,轻快的旋律则让玩家感到愉悦。
128 0
|
4月前
|
图形学 开发者
【Unity光照艺术手册】掌握这些技巧,让你的游戏场景瞬间提升档次:从基础光源到全局光照,打造24小时不间断的视觉盛宴——如何运用代码与烘焙创造逼真光影效果全解析
【8月更文挑战第31天】在Unity中,合理的光照与阴影设置对于打造逼真环境至关重要。本文介绍Unity支持的多种光源类型,如定向光、点光源、聚光灯等,并通过具体示例展示如何使用着色器和脚本控制光照强度,模拟不同时间段的光照变化。此外,还介绍了动态和静态阴影、全局光照及光照探针等高级功能,帮助开发者创造丰富多样的光影效果,提升游戏沉浸感。
107 0
|
4月前
|
开发者 图形学 UED
深度解析Unity游戏开发中的性能瓶颈与优化方案:从资源管理到代码执行,全方位提升你的游戏流畅度,让玩家体验飞跃性的顺滑——不止是技巧,更是艺术的追求
【8月更文挑战第31天】《Unity性能优化实战:让你的游戏流畅如飞》详细介绍了Unity游戏性能优化的关键技巧,涵盖资源管理、代码优化、场景管理和内存管理等方面。通过具体示例,如纹理打包、异步加载、协程使用及LOD技术,帮助开发者打造高效流畅的游戏体验。文中提供了实用代码片段,助力减少内存消耗、提升渲染效率,确保游戏运行丝滑顺畅。性能优化是一个持续过程,需不断测试调整以达最佳效果。
109 0
|
4月前
|
图形学
小功能⭐️Unity改变代码执行顺序
小功能⭐️Unity改变代码执行顺序
|
6月前
|
图形学
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
146 0
|
6月前
|
存储 图形学
【unity小技巧】unity事件系统创建通用的对象交互的功能
【unity小技巧】unity事件系统创建通用的对象交互的功能
73 0
|
6月前
|
图形学
【unity小技巧】unity3D寻路指示轨迹预测
【unity小技巧】unity3D寻路指示轨迹预测
92 0