【Unity2D】制作人物关卡加载界面(+阴影淡化)

参考视频: 

https://www.youtube.com/watch?v=XUK4OkqtnBoicon-default.png?t=N7T8https://www.youtube.com/watch?v=XUK4OkqtnBo

学习目标:

每个游戏都会有它独一无二的加载界面,因此教大伙如何制作人物关卡加载界面(+阴影淡化)


学习内容:

首先我们创建另一个Canvas名字就叫NextCanvas和第一个Canvas区别,并把它的SortingOrder调为0

然后再给它一个Button作为点击事件再给Button一个子对象Text

我们在创建一个空对象LoadingManager并把第一个Canvas作为子对象,创建一个叫LoadingManager的脚本

内容如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class LoadingManager : MonoBehaviour
{
    //创建脚本的单例
    public static LoadingManager instance;

    public GameObject loadingPanel;
    public GameObject loadingWheel;
    //渐变阴影
    public Image Fade;
    public float FadeTime;
    //要加载的目标场景
    private string targetScene;
    public float WheelSpeed;
    //最小加载时间
    public float minLoadTime;
    //判断是否加载中
    private bool isLoading;
    private void Awake()
    {
        if(instance != null)
        {
            instance = this;
            //加载下一个场景不要删除
            DontDestroyOnLoad(instance);
        }
        loadingPanel.SetActive(false);
        Fade.gameObject.SetActive(false);
    }
    public void LoadingScene(string sceneName)
    {
        targetScene = sceneName;
        StartCoroutine(LoadSceneRoutine());
    }
    

    IEnumerator LoadSceneRoutine()
    {
        isLoading = true;

        Fade.gameObject.SetActive(true);
        Fade.canvasRenderer.SetAlpha(0);

        while (!GetFade(1))
            yield return null;

        loadingPanel.SetActive(true);
        StartCoroutine(SpinWheelRoutine());

        while (!GetFade(0))
            yield return null;

        AsyncOperation operation = SceneManager.LoadSceneAsync(targetScene);
        float elapsedLoadTime = 0f;

        while (!operation.isDone)
        {
            elapsedLoadTime += Time.deltaTime;
            yield return null;
        }
        while(elapsedLoadTime < minLoadTime)
        {
            elapsedLoadTime += Time.deltaTime;
            yield return null;
        }

        while (!GetFade(1))
            yield return null;

        loadingPanel.SetActive(false);

        while (!GetFade(0))
            yield return null;

        isLoading = false;
    }
    private bool GetFade(float target)
    {
        Fade.CrossFadeAlpha(target, FadeTime, true);

        if (Mathf.Abs(Fade.canvasRenderer.GetAlpha() - target) <= 0.05f)
        {
            Fade.canvasRenderer.SetAlpha(target);
            return true;
        }

        return false;
    }
    IEnumerator SpinWheelRoutine()
    {
        while (isLoading)
        {
            loadingWheel.transform.Rotate(0, 0, -WheelSpeed);
            yield return null;
        }
    }
}

接着我们创建一个名字叫Fade的全黑Image

开始是非激活状态。

我们让它是点击事件,回到NextButton来,添加点击事件,并且在框内输入下一关的场景名Text

我们给这个门添加我上一期讲过的TriggerAnimation,把NextButton拖进来。

学习产出:

加载界面大伙可以自行设计

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值