using Framework.Timer; using Unity.Mathematics; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public class VolumeEffectUtils : MonoBehaviour { public VolumeProfile volumeProfile; #region ChromaticAberration Utils private TimeHandler _aberrationHandler; private float _aberrationBaseIntensity; private float _aberrationTargetIntensity; public void SetAberration(float intensity , float time) { this._aberrationHandler?.Kill(); this._aberrationTargetIntensity = intensity; if (this.volumeProfile.TryGet(out ChromaticAberration aberration)) { this._aberrationBaseIntensity = aberration.intensity.value; aberration.active = this._aberrationBaseIntensity != 0 || this._aberrationTargetIntensity != 0; this._aberrationHandler = GameUpdateMgr.Instance.CreateTimer(time , UpdateAberration , f => { aberration.intensity.value = math.lerp(this._aberrationBaseIntensity , this._aberrationTargetIntensity , f); }); } } private void UpdateAberration() { if (this.volumeProfile.TryGet(out ChromaticAberration aberration)) { aberration.intensity.value = this._aberrationTargetIntensity; aberration.active = aberration.intensity.value != 0; } } #endregion }