using UnityEngine; namespace Thousandto.Launcher.ExternalLibs { /// /// 不透明物体的Bloom处理脚本 /// [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()); _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()); 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() : null); _logic.RefreshMat(); } } } } }