CapersProject/Assets/02.Scripts/PostProcessingManager.cs
Nam Tae Gun 5b360d2799 PostProcessingManager 추가
+ 플레이어가 죽었을 때, grayscale을 이용한 이펙트 추가
+ ItemLootInfoUi rectTransform 참조 오류 수정
+ MoveTitleScene() 실행될 때, grayscale 비활성화
+ 기존의 Vignette기능 카메라매니저 -> 포스트프로세싱매니저
+ JumpSlam null 오류들 수정
2024-06-10 03:19:32 +09:00

107 lines
3.2 KiB
C#

using System.Collections;
using BlueWater.Utility;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace BlueWater
{
public enum RendererFeatureName
{
None = 0,
GrayscaleRenderPassFeature
}
public class PostProcessingManager : Singleton<PostProcessingManager>
{
private UniversalRenderPipelineAsset _currentRenderPipeline;
private ScriptableRendererData _currentRenderData;
private Volume _currentVolume;
private Coroutine _lowHpVignetteCoroutine;
protected override void OnAwake()
{
Initialize();
}
protected override void OnApplicationQuit()
{
ToggleRendererFeature(RendererFeatureName.GrayscaleRenderPassFeature, false);
}
private void Initialize()
{
_currentRenderPipeline = (UniversalRenderPipelineAsset)GraphicsSettings.currentRenderPipeline;
_currentRenderData = _currentRenderPipeline.rendererDataList[0];
_currentVolume = GetComponent<Volume>();
}
public void ToggleRendererFeature(RendererFeatureName featureName, bool value)
{
foreach (var element in _currentRenderData.rendererFeatures)
{
if (!string.Equals(element.name, featureName.ToString())) continue;
element.SetActive(value);
return;
}
Debug.Log($"{featureName}과 일치하는 기능이 없습니다.");
}
public void ToggleEffect<T>(bool value) where T : VolumeComponent
{
if (!_currentVolume) return;
var effect = GetEffect<T>();
if (!effect)
{
print(typeof(T) + "효과가 없습니다.");
return;
}
effect.active = value;
}
private T GetEffect<T>() where T : VolumeComponent
{
if (!_currentVolume) return null;
_currentVolume.profile.TryGet(out T effect);
return effect;
}
public void LowHpVignette()
{
Utils.StartUniqueCoroutine(this, ref _lowHpVignetteCoroutine, LowHpVignetteCoroutine());
}
public void DefaultHpVignette()
{
Utils.EndUniqueCoroutine(this, ref _lowHpVignetteCoroutine);
ToggleEffect<Vignette>(false);
}
private IEnumerator LowHpVignetteCoroutine()
{
var startValue = 0.2f;
var endValue = 0.3f;
var time = 0f;
var vignette = GetEffect<Vignette>();
vignette.intensity.value = startValue;
vignette.active = true;
while (true)
{
time += Time.deltaTime * 2f;
vignette.intensity.value = Mathf.Lerp(startValue, endValue, time);
if (time >= 1f)
{
(startValue, endValue) = (endValue, startValue);
time = 0f;
}
yield return null;
}
}
}
}