1、为什么要制作场景切换模块
在游戏开发中很多时候可能需要进行场景切换
只要存在场景切换,我们往往需要在 切换场景时 和 切换场景结束后 进行一些操作
2、实现场景切换模块的主要思路
1.制作SceneMgr单例模式管理器 2.实现同步加载场景 的公共方法 3.实现异步加载场景 的公共方法 4.实现外部获取异步加载场景进度
具体实现
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
/// <summary>
/// 场景切换管理器 主要用于切换场景
/// </summary>
public class SceneMgr : BaseManager<SceneMgr>
{
private SceneMgr() { }
//同步切换场景的方法
public void LoadScene(string name, UnityAction callBack = null)
{
//切换场景
SceneManager.LoadScene(name);
//调用回调
callBack?.Invoke();
callBack = null;
}
//异步切换场景的方法
public void LoadSceneAsyn(string name, UnityAction callBack = null)
{
MonoMgr.Instance.StartCoroutine(ReallyLoadSceneAsyn(name, callBack));
}
private IEnumerator ReallyLoadSceneAsyn(string name, UnityAction callBack)
{
AsyncOperation ao = SceneManager.LoadSceneAsync(name);
//不停的在协同程序中每帧检测是否加载结束 如果加载结束就不会进这个循环每帧执行了
while (!ao.isDone)
{
//可以在这里利用事件中心 每一帧将进度发送给想要得到的地方
EventCenter.Instance.EventTrigger<float>(E_EventType.E_SceneLoadChange, ao.progress);
yield return 0;
}
//避免最后一帧直接结束了 没有同步1出去
EventCenter.Instance.EventTrigger<float>(E_EventType.E_SceneLoadChange, 1);
callBack?.Invoke();
callBack = null;
}
}
标签:场景,name,callBack,Unity,切换,模块,using,加载
From: https://blog.csdn.net/weixin_62613770/article/details/142063423