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

Unity中通过脚本实现2D触发器控制Chromatic Aberration渐变效果问询

Unity 2D恐怖游戏:碰撞触发色差渐变效果实现指南

先做必要的项目设置

  1. 打开Package Manager(Window > Package Manager),搜索并安装Post Processing包
  2. 在场景中创建全局后期处理体积:右键 > Effects > Post Process Volume,勾选Inspector里的Is Global
  3. 选中这个Volume,在Profile栏点击Add Effect,选择Chromatic Aberration,初始将Intensity设为0
  4. 给主相机添加Post Process Layer组件,Layer选择Everything(或你游戏对应的层)
  5. 玩家对象必须添加Rigidbody2D(设置为Kinematic也可)和Collider2D(不要勾选Is Trigger);触发区域的对象添加Collider2D并勾选Is Trigger

修正后的可用脚本

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class ChromaticTrigger : MonoBehaviour
{
    [Header("触发设置")]
    public Collider2D playerCollider; // 拖入玩家的Collider2D
    [Header("后期处理设置")]
    public PostProcessVolume postProcessVolume;
    public float maxIntensity = 0.5f; // 色差最大强度
    public float lerpSpeed = 3f; // 渐变速度

    private ChromaticAberration _chromaticAberration;

    private void Awake()
    {
        // 从后期处理体积中自动获取色差组件
        postProcessVolume.profile.TryGetSettings(out _chromaticAberration);
    }

    private void OnTriggerEnter2D(Collider2D other)
    {
        // 仅玩家进入触发区时启动渐变
        if (other == playerCollider)
        {
            StartCoroutine(LerpIntensity(maxIntensity));
        }
    }

    private void OnTriggerExit2D(Collider2D other)
    {
        if (other == playerCollider)
        {
            StartCoroutine(LerpIntensity(0f));
        }
    }

    // 用协程实现平滑渐变,避免Update循环冗余判断
    private IEnumerator LerpIntensity(float targetIntensity)
    {
        float currentIntensity = _chromaticAberration.intensity.value;
        float elapsedTime = 0f;

        while (elapsedTime < 1f)
        {
            elapsedTime += Time.deltaTime * lerpSpeed;
            _chromaticAberration.intensity.value = Mathf.Lerp(currentIntensity, targetIntensity, elapsedTime);
            yield return null;
        }

        // 确保最终值精准到位
        _chromaticAberration.intensity.value = targetIntensity;
    }
}

脚本使用步骤

  1. 将脚本拖到触发区域的GameObject上(即带Is Trigger属性的碰撞体对象)
  2. 在Inspector面板中:
    • 拖入玩家对象的Collider2D到Player Collider字段
    • 拖入场景中的PostProcessVolume到Post Process Volume字段
    • 调整Max Intensity(建议0.3-0.8,数值越大色差越强烈)
    • 调整Lerp Speed(建议2-5,数值越大渐变速度越快)

关键修正说明

  • 修复触发逻辑:原脚本判断逻辑颠倒,现在改为检测进入触发区的是玩家,符合需求
  • 自动获取组件:通过TryGetSettings从Volume配置中自动获取色差组件,无需手动拖拽,降低新手操作失误率
  • 协程优化渐变:相比Update循环Lerp,协程更高效且能精准控制渐变过程
  • 可视化参数:将最大强度、渐变速度设为可调节变量,方便快速调试恐怖氛围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:52:49