using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
public class BlackViewTransition : MonoBehaviour
{
public Transform canvasOld;
public Transform canvasNew;
public MyMessage beforeOpenMsg;//在幕布拉开前执行的方法
public MyMessage afterOpenMsg;//在幕布拉开前执行的方法
[ContextMenu("Play")]
public void Play()
{
GameObject blackGO = null;
if (canvasOld) {
blackGO = CreateBlack(canvasOld.transform);
}
else {
blackGO = CreateBlack(this.transform);
}
blackGO.AddComponent<DestroyByTime>().time = 1;
blackGO.GetOrAddComponent<CanvasGroup>().alpha = 0;
blackGO.GetOrAddComponent<CanvasGroup>().DOFade(1, 0.5f).OnComplete(() => {
blackGO.GetOrAddComponent<CanvasGroup>().DOFade(0, 0.5f);
//Destroy(blackGO, 0.5f);
Step2();
});
Invoke("AfterMsg",1);
}
public void Play(UnityAction centerAction,UnityAction finAction) {
Play();
MySuperInvoke.Run(0.5f,()=> {
centerAction.Invoke();
});
MySuperInvoke.Run(1f, () => {
finAction.Invoke();
});
}
void Step2()
{
beforeOpenMsg.SendMessage();
//GameObject blackGO = CreateBlack(canvasNew.transform);
if (canvasOld) {
canvasOld.gameObject.SetActive(false);
canvasOld.GetOrAddComponent<CanvasGroup>().alpha = 0;
canvasOld.GetOrAddComponent<CanvasGroup>().blocksRaycasts = false;
ParticleSystem[] particleSystems = canvasOld.GetComponentsInChildren<ParticleSystem>();
foreach (ParticleSystem item in particleSystems)
{
item.Stop();
}
}
if (canvasNew) {
canvasNew.gameObject.SetActive(true);
canvasNew.GetOrAddComponent<CanvasGroup>().alpha = 1;
canvasNew.GetOrAddComponent<CanvasGroup>().blocksRaycasts = true;
}
}
void AfterMsg() {
if (afterOpenMsg != null) {
afterOpenMsg.SendMessage();
}
}
GameObject CreateBlack(Transform parent)
{
GameObject blackGO = new GameObject("blackGO");
blackGO.transform.parent = parent.GetComponentInParent<Canvas>().transform;
blackGO.transform.localScale = Vector3.one;
blackGO.transform.localPosition = Vector3.zero;
MyUGUI.ToFullScreen(blackGO);
blackGO.AddComponent<Image>().color = new Color(0, 0, 0, 1);
return blackGO;
}
public static BlackViewTransition GetActiveBlackView() {
BlackViewTransition go = GameObject.FindObjectOfType<BlackViewTransition>();
if (go != null) {
return go;
}
GameObject singleton = new GameObject("BlackView");
return singleton.AddComponent<BlackViewTransition>();
}
public void Clear() {
canvasOld = null;
canvasNew = null;
beforeOpenMsg = new MyMessage();
afterOpenMsg = new MyMessage();
}
}
unity 不切换场景黑屏淡入淡出过渡
最新推荐文章于 2024-01-28 20:10:12 发布