NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Skill/Effect/SkillScreenEffect.cs

146 lines
4.4 KiB
C#
Raw Normal View History

2023-08-22 19:08:45 +08:00
using System.Collections.Generic;
2023-10-19 15:00:19 +08:00
using Code.Scripts.Gameplay.Utils;
using Cysharp.Threading.Tasks;
using Framework;
2024-07-11 18:32:10 +08:00
using Gameplay.Unit;
using PhxhSDK;
using UnityEngine.Rendering.Universal;
using Constants = Framework.Constants;
2023-08-22 19:08:45 +08:00
namespace Gameplay.Skill
{
using Common;
using UnityEngine;
public class SkillScreenEffect
{
public Camera skillCamera;
private List<GameObject> _cacheObjs;
private List<int> _cacheLayers;
2024-07-11 18:32:10 +08:00
private List<GameUnit> _cacheUnits;
public List<GameUnit> cacheUnits
{
get
{
return _cacheUnits;
}
}
public bool isHide;
public SkillRotateCamera rotateCamera;
public void Init()
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
skillCamera = CmpObjRef.instance.m_SkillCamera;
2023-08-22 19:08:45 +08:00
skillCamera.gameObject.SetActive(false);
_cacheObjs = new List<GameObject>();
_cacheLayers = new List<int>();
2024-07-11 18:32:10 +08:00
_cacheUnits = new List<GameUnit>();
rotateCamera = new SkillRotateCamera();
2023-08-22 19:08:45 +08:00
}
public void Restore()
{
2023-10-19 15:00:19 +08:00
if (skillCamera == null) return;
if (skillCamera.gameObject == null) return;
2023-08-22 19:08:45 +08:00
skillCamera.gameObject.SetActive(true);
}
public void Show()
{
isHide = false;
// 通知UI黑屏
EventManager.Instance.Send(EventManager.EventName.INFIGHT_BLACK_SCREEN_START);
2023-08-22 19:08:45 +08:00
var mainCamera = Camera.main;
// 同步相机参数
if (mainCamera != null)
{
var transform = mainCamera.transform;
var transform1 = skillCamera.transform;
transform1.position = transform.position;
transform1.rotation = transform.rotation;
2024-03-04 12:40:20 +08:00
skillCamera.orthographic = mainCamera.orthographic;
2023-08-22 19:08:45 +08:00
skillCamera.orthographicSize = mainCamera.orthographicSize;
2024-03-04 12:40:20 +08:00
skillCamera.fieldOfView = mainCamera.fieldOfView;
2023-08-22 19:08:45 +08:00
skillCamera.nearClipPlane = mainCamera.nearClipPlane;
skillCamera.farClipPlane = mainCamera.farClipPlane;
// // 关闭主相机post效果
// var urpDataMain = mainCamera.GetComponent<UniversalAdditionalCameraData>();
// urpDataMain.renderPostProcessing = false;
2023-08-22 19:08:45 +08:00
}
skillCamera.gameObject.SetActive(true);
if (GameSettingManager.Instance.SettingData.enableSkillRotateCamera)
{
_ShowRotateCamera();
}
}
private async void _ShowRotateCamera()
{
rotateCamera.Show();
var rotateTime = TableManager.Instance.Tables.GlobalConfig.SkillCameraRotateTime;
await UniTask.WaitForSeconds(rotateTime);
rotateCamera.Hide();
2023-08-22 19:08:45 +08:00
}
public async void StartHide()
2023-08-22 19:08:45 +08:00
{
// 通知UI黑屏结束
EventManager.Instance.Send(EventManager.EventName.INFIGHT_BLACK_SCREEN_END);
// 等待播放完成
await UniTask.Delay(250);
2023-08-22 19:08:45 +08:00
skillCamera.gameObject.SetActive(false);
// // 开启主相机post效果
// var mainCamera = Camera.main;
// if (mainCamera != null)
// {
// var urpDataMain = mainCamera.GetComponent<UniversalAdditionalCameraData>();
// urpDataMain.renderPostProcessing = true;
// }
2023-08-22 19:08:45 +08:00
for (var i = 0; i < _cacheObjs.Count; ++i)
{
var cacheObj = _cacheObjs[i];
var cacheLayer = _cacheLayers[i];
cacheObj.SetLayerEx(cacheLayer);
}
_cacheObjs.Clear();
_cacheLayers.Clear();
2024-07-11 18:32:10 +08:00
_cacheUnits.Clear();
isHide = true;
2023-08-22 19:08:45 +08:00
}
public void AttachObj(GameObject obj)
{
if (_cacheObjs.Contains(obj)) return;
2023-08-22 19:08:45 +08:00
_cacheObjs.Add(obj);
_cacheLayers.Add(obj.layer);
obj.SetLayerEx(LayerDefine.Skill);
}
2024-07-11 18:32:10 +08:00
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);
2024-07-11 18:32:10 +08:00
}
public void Dispose()
{
}
2023-08-22 19:08:45 +08:00
}
}