using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; namespace Qjjxk.Blur { [ExecuteAlways] public class MonitorDimension : MonoBehaviour { public RenderTexture captureRT; public CameraEvent cameraEvent; private List _blurList; private CommandBuffer _cmdBuffer; private Camera _mainCamera; private void Awake() { _mainCamera = Camera.main!; captureRT = new RenderTexture(_mainCamera.pixelWidth, _mainCamera.pixelHeight, 0) { name = "CaptureRT" }; _cmdBuffer = new CommandBuffer { name = "Capture" }; _cmdBuffer.Blit(BuiltinRenderTextureType.CurrentActive, captureRT); cameraEvent = Application.isEditor ? CameraEvent.BeforeImageEffects : CameraEvent.AfterEverything; _mainCamera!.AddCommandBuffer(cameraEvent, _cmdBuffer); } public void Register(BlurRawImage blurRawImage, bool isReg = true) { _blurList ??= new List(); if (isReg) { _blurList.TryAdd(blurRawImage); } else { _blurList.Remove(blurRawImage); if (_blurList.Count != 0) return; this.Destroy(); } } private void OnRectTransformDimensionsChange() { if (!gameObject.scene.isLoaded || _blurList == null || _blurList.Count == 0) return; captureRT.Resize(_mainCamera.pixelWidth, _mainCamera.pixelHeight); foreach (var blurRawImage in _blurList) { blurRawImage.SetWindowSize(); } } } }