加载关卡
1.LevelSelectPlayer
添加参数
private bool levelLoading; //是否正加载场景
Update()中的判断,加入条件,加载场景不能移动
//防止胡乱移动 加载场景时不能移动
if (Vector3.Distance(transform.position, currentPoint.transform.position) < 0.1f && !levelLoading)
判断之后加入跳转关卡信息
//跳转关卡
if (currentPoint.isLevel)
{
if(Input.GetButtonDown("Jump"))
{
levelLoading = true;
//...
}
}
2.MapPoint
加入参数,表示待加载的关卡
public string levelToLoad; //待加载的关卡
在关卡节点,分别设置levelToLoad的值,指定对应的加载的场景名
3.新建空节点LSManager
节点用来管理关卡选择
再新建c#脚本LSManager.cs,绑定至节点上
引入头文件
using UnityEngine.SceneManagement;
添加参数,获取当前Player
public LevelSelectPlayer thePlayer;
添加跳转场景代码
public void LoadLevel()
{
StartCoroutine(LoadLevelCo());
}
public IEnumerator LoadLevelCo()
{
yield return new WaitForSeconds(1f);
SceneManager.LoadScene(thePlayer.currentPoint.levelToLoad);
}
将Player拖到对应的thePlayer
4.完善LevelSelectPlayer跳转场景
添加参数,指向LSManager
public LSManager theManager; //关卡选择管理
将LSManager节点拖到对应的theManager上
完善加载场景代码
//跳转关卡
if (currentPoint.isLevel && currentPoint.levelToLoad != "")
{
if(Input.GetButtonDown("Jump"))
{
levelLoading = true;
//加载场景
theManager.LoadLevel();
}
}
5.加入淡入淡出效果
添加UI->Canvas组件到场景
在Canvas下,新建Panel,设置属性
新建关卡选择UI管理脚本LSUIController,添加组件到Canvas下绑定
添加头文件UI的引用
using UnityEngine.UI;
添加淡入淡出代码(与UIController相似)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LSUIController : MonoBehaviour
{
public static LSUIController sInstance;
//淡入淡出
public Image fadeScreen;
public float fadeSpeed;
private bool shouldFadeToBlack;
private bool shouldFadeFromBlack;
private void Awake()
{
sInstance = this;
}
// Start is called before the first frame update
void Start()
{
//开始时添加淡入效果
FadeFromBlack();
}
// Update is called once per frame
void Update()
{
if (shouldFadeToBlack)
{
fadeScreen.color = new Color(fadeScreen.color.r, fadeScreen.color.g, fadeScreen.color.b, Mathf.MoveTowards(fadeScreen.color.a, 1f, fadeSpeed * Time.deltaTime));
if (fadeScreen.color.a == 1f)
{
shouldFadeToBlack = false;
}
}
if (shouldFadeFromBlack)
{
fadeScreen.color = new Color(fadeScreen.color.r, fadeScreen.color.g, fadeScreen.color.b, Mathf.MoveTowards(fadeScreen.color.a, 0f, fadeSpeed * Time.deltaTime));
if (fadeScreen.color.a == 0f)
{
shouldFadeFromBlack = false;
}
}
}
public void FadeToBlack()
{
shouldFadeToBlack = true;
shouldFadeFromBlack = false;
}
public void FadeFromBlack()
{
shouldFadeFromBlack = true;
shouldFadeToBlack = false;
}
}
修改Panel为FadeScreen,拖入到对应的FadeScreen,并设置FadeSpeed值
最后,修改LSManager中加载场景,加入淡入
public IEnumerator LoadLevelCo()
{
LSUIController.sInstance.FadeToBlack();
yield return new WaitForSeconds(1f / LSUIController.sInstance.fadeSpeed + 0.25f);
SceneManager.LoadScene(thePlayer.currentPoint.levelToLoad);
}