参考视频:
https://www.youtube.com/watch?v=XUK4OkqtnBo
https://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拖进来。
学习产出:
加载界面大伙可以自行设计