Files
Main/Assets/Launcher/ExternalLibs/CmdBuffer/OpaqueBloom/OpaqueBloomScript.cs
2025-01-25 04:38:09 +08:00

107 lines
2.7 KiB
C#

using UnityEngine;
namespace Thousandto.Launcher.ExternalLibs
{
/// <summary>
/// 不透明物体的Bloom处理脚本
/// </summary>
[RequireComponent(typeof(Camera))]
public class OpaqueBloomScript : MonoBehaviour
{
[Range(1,10)]
public float Offset = 2f;
[Range(0,10)]
public float Strength = 2f;
[Range(0,2)]
public float Threshold = 0.9f;
[Range(0,2)]
public float Knee = 0.5f;
private OpaqueBloom _logic;
//是否激活
public bool _isActive = true;
private void Awake()
{
if (_logic == null)
{
_logic = new OpaqueBloom();
_logic.Enabled = _isActive;
}
}
private void Start()
{
OnPostEffectInit();
}
private void OnEnable()
{
if (_logic != null)
{
_logic.BindCamera(GetComponent<Camera>());
_logic.RefreshMat();
}
}
private void OnDisable()
{
if (_logic != null)
{
_logic.BindCamera(null);
}
}
private void OnDestroy()
{
if (_logic != null)
{
_logic.UnInitialize();
_logic = null;
}
}
private void OnValidate()
{
if (_logic != null)
{
_logic.SetOffsetAndStrength(new Vector2(Offset, Offset), Strength);
_logic.SeThreshold(Threshold, Knee);
}
}
private void OnPostEffectInit()
{
//如果没有初始化完毕,就直接初始化
if (_logic != null)
{
_logic.Enabled = _isActive;
_logic.Initialize();
_logic.SetOffsetAndStrength(new Vector2(Offset, Offset), Strength);
_logic.SeThreshold(Threshold, Knee);
_logic.BindCamera(GetComponent<Camera>());
Debug.Log("后处理初始化处理完毕,IsInited:"+_logic.IsInited);
}
}
private void OnPostEffectActive(int val)
{
var tmp = val > 0;
//根据激活状态来处理
if (_isActive != tmp)
{
_isActive = tmp;
if (_logic != null)
{
_logic.Enabled = _isActive;
_logic.BindCamera(_isActive ? GetComponent<Camera>() : null);
_logic.RefreshMat();
}
}
}
}
}