using System.Collections.Generic; using Code.Scripts.Gameplay.Utils; using Cysharp.Threading.Tasks; using Framework; using PhxhSDK; using UnityEngine.Rendering.Universal; using Constants = Framework.Constants; namespace Gameplay.Skill { using Common; using UnityEngine; public class SkillScreenEffect { public Camera skillCamera; private List _cacheObjs; private List _cacheLayers; public bool isHide; public void Init() { skillCamera = CmpObjRef.instance.m_SkillCamera; skillCamera.gameObject.SetActive(false); _cacheObjs = new List(); _cacheLayers = new List(); } public void Restore() { if (skillCamera == null) return; if (skillCamera.gameObject == null) return; skillCamera.gameObject.SetActive(true); } public void Show() { isHide = false; // 通知UI黑屏 EventManager.Instance.Send(EventManager.EventName.INFIGHT_BLACK_SCREEN_START); var mainCamera = Camera.main; // 同步相机参数 if (mainCamera != null) { var transform = mainCamera.transform; var transform1 = skillCamera.transform; transform1.position = transform.position; transform1.rotation = transform.rotation; skillCamera.orthographic = mainCamera.orthographic; skillCamera.orthographicSize = mainCamera.orthographicSize; skillCamera.fieldOfView = mainCamera.fieldOfView; skillCamera.nearClipPlane = mainCamera.nearClipPlane; skillCamera.farClipPlane = mainCamera.farClipPlane; // 关闭主相机post效果 var urpDataMain = mainCamera.GetComponent(); urpDataMain.renderPostProcessing = false; } skillCamera.gameObject.SetActive(true); } public async void StartHide() { // 通知UI黑屏结束 EventManager.Instance.Send(EventManager.EventName.INFIGHT_BLACK_SCREEN_END); // 等待播放完成 await UniTask.Delay(250); skillCamera.gameObject.SetActive(false); // 开启主相机post效果 var mainCamera = Camera.main; if (mainCamera != null) { var urpDataMain = mainCamera.GetComponent(); urpDataMain.renderPostProcessing = true; } for (var i = 0; i < _cacheObjs.Count; ++i) { var cacheObj = _cacheObjs[i]; var cacheLayer = _cacheLayers[i]; cacheObj.SetLayerEx(cacheLayer); } _cacheObjs.Clear(); _cacheLayers.Clear(); isHide = true; } public void AttachObj(GameObject obj) { if (_cacheObjs.Contains(obj)) return; _cacheObjs.Add(obj); _cacheLayers.Add(obj.layer); obj.SetLayerEx(LayerDefine.Skill); } public void Dispose() { } } }