unity 不切换场景黑屏淡入淡出过渡

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();

    }

}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值