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

133 lines
4.2 KiB
C#

using System.Collections.Generic;
using Code.Scripts.Gameplay.Utils;
using Cysharp.Threading.Tasks;
using PhxhSDK;
using UnityEngine.Rendering.Universal;
using Constants = Framework.Constants;
namespace Gameplay.Skill
{
using Common;
using UnityEngine;
public class SkillScreenEffect
{
public Camera skillCamera;
public GameObject skillBg;
private List<GameObject> _cacheObjs;
private List<int> _cacheLayers;
private Animator _rawAnim;
public Animator rawAnim => _rawAnim;
public bool isHide;
public async UniTask Init()
{
skillCamera = CmpObjRef.instance.m_SkillCamera;
skillCamera.gameObject.SetActive(false);
_cacheObjs = new List<GameObject>();
_cacheLayers = new List<int>();
var uiCameraTrans = UIRoot.Instance.UICamera.transform;
if (uiCameraTrans.childCount == 0)
{
// 还没有, 需要创建
var prefab = await AssetManager.Instance.LoadAssetAsync<GameObject>(Constants.SKILL_FULLSCRREN_BG);
var go = Object.Instantiate(prefab, uiCameraTrans);
go.transform.localPosition = Vector3.zero;
go.transform.localRotation = Quaternion.identity;
skillBg = go;
}
else
{
skillBg = UIRoot.Instance.UICamera.transform.GetChild(0).gameObject;
}
skillBg.SetActive(false);
_rawAnim = skillBg.GetComponentInChildren<Animator>();
_rawAnim.Play("None");
}
public void Restore()
{
if (skillCamera == null) return;
if (skillCamera.gameObject == null) return;
skillCamera.gameObject.SetActive(true);
}
public void Show()
{
isHide = false;
skillBg.SetActive(true);
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<UniversalAdditionalCameraData>();
urpDataMain.renderPostProcessing = false;
}
skillCamera.gameObject.SetActive(true);
_rawAnim.Play("In");
}
public async void StartHide()
{
_rawAnim.Play("Out");
// 等待播放完成
await UniTask.Delay(250);
skillCamera.gameObject.SetActive(false);
skillBg.SetActive(false);
// 开启主相机post效果
var mainCamera = Camera.main;
if (mainCamera != null)
{
var urpDataMain = mainCamera.GetComponent<UniversalAdditionalCameraData>();
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()
{
AssetManager.Instance.Unload(Constants.SKILL_FULLSCRREN_BG);
}
}
}