using System.Collections.Generic; using Code.Scripts.Gameplay.Utils; using Cysharp.Threading.Tasks; using Framework; using Gameplay.Unit; 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; private List _cacheUnits; public List cacheUnits { get { return _cacheUnits; } } public bool isHide; public SkillRotateCamera rotateCamera; public void Init() { skillCamera = CmpObjRef.instance.m_SkillCamera; skillCamera.gameObject.SetActive(false); _cacheObjs = new List(); _cacheLayers = new List(); _cacheUnits = new List(); rotateCamera = new SkillRotateCamera(); } 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); _SyncCameraParams(); skillCamera.gameObject.SetActive(true); if (GameSettingManager.Instance.SettingData.enableSkillRotateCamera) { _ShowRotateCamera(); } } private void _SyncCameraParams() { var mainCamera = CameraManager.Instance.MainCamera; if (mainCamera == null) return; // 同步相机参数 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; } private async void _ShowRotateCamera() { rotateCamera.Show(); var rotateTime = TableManager.Instance.Tables.GlobalConfig.SkillCameraRotateTime; await UniTask.WaitForSeconds(rotateTime); rotateCamera.Hide(); } 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(); _cacheUnits.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 DeAttachObj(GameObject obj) { if (!_cacheObjs.Contains(obj)) return; var index = _cacheObjs.IndexOf(obj); var cacheLayer = _cacheLayers[index]; obj.SetLayerEx(cacheLayer); _cacheObjs.Remove(obj); _cacheLayers.RemoveAt(index); } public void AttachUnit(GameUnit unit) { if (_cacheUnits.Contains(unit)) return; _cacheUnits.Add(unit); AttachObj(unit.Node.GameObject); EventManager.Instance.Send(EventManager.EventName.INFIGHT_SKILL_ACTON_UNIT, unit); } public void DeAttachUnit(GameUnit unit) { if (!_cacheUnits.Contains(unit)) return; _cacheUnits.Remove(unit); DeAttachObj(unit.Node.GameObject); } public void LogicUpdate() { if (skillCamera.gameObject.activeInHierarchy) { // 同步相机参数 _SyncCameraParams(); } } public void Dispose() { } } }