👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:unity每日一记
⭐🅰️推荐文章⭐⭐【软件设计师高频考点暴击】
⭐【Unityc#专题篇】之c#系统化大礼包】
⭐【unity数据持久化】数据管理类_PlayerPrfs
⭐【unity本站最全系列】unity常用API大全一篇文章足以
⭐⭐
文章目录 ⭐🅰️推荐文章⭐⭐⭐🎶SceneManager场景资源动态加载👨💻👍加载场景的方法👨💻👍SceneManasger的操作1.同步加载2.异步加载<font color=red>**总结**场景管理器 ⭐🅰️系统路线学习点击跳转⭐
🎶SceneManager场景资源动态加载
👨💻👍加载场景的方法
SceneManager.LoadScene() ; 场景同步加载SceneManager.LoadSceneSAsyn(); 场景异步加载SceneManage。GetActiveScene().name判断当前场景Application.LoadLevel():同步加载Application.LoadLevelAsync():异步加载Application.LoadLevelAddictive():同步附加式加载Application.LoadLevelAddictiveAsync():异步附加式加载
👨💻👍SceneManasger的操作
首先添加场景加载的命名空间Using UnityEngine.SceneManagement ; 而后把游戏场景都保存(拖拽)在 Buid setting 里面,相当于存储场景的目录
1.同步加载
SceneManager.Load( 序列号) ; SceneManager.Load( “场景名”) ;
void Start(){//SceneManager.LoadScene(1);//SceneManager.LoadScene("TriggerTest");}缺点:加载时造成画面卡帧,因为,在未加载完成前画面是停止的,所以是卡帧现象
2.异步加载
如果当前场景 对象过多或者下一个场景对象过多 这个过程会非常的耗时 会让玩家感受到卡顿 所以异步切换就是来解决该问题的
通常我们和协程一起使用:
SceneManager.LoadAsync(序列号)
SceneManager.LoadAsync(“场景名”)
StartCoroutine(协程迭代器方法() ); //调用协程
AsyncOperation 该类型翻译为异步操作 ,为下面获得异步场景的返回值 AsyncOperation ao= SceneManager.LoadSceneAsync(2);
ao.allowSceneActivation = true 激活场景
ao.progress 场景加载的进度
//-----1.通过事件回调函数 异步加载------AsyncOperation SS = SceneManager.LoadSceneAsync("XXXX");SS.completed += (a) =>{print("加载结束");};SS.completed += LoadOver;private void LoadOver(AsyncOperation ao){print("LoadOver");}//---------2.通过协程异步加载--------void Start(){ //由于场景加载后就不会执行加载后的逻辑了,如果要保存就使用 DontDestroyOnLoad(保留场景加载上个场景的东西)第一个异步方法不会出现该情况DontDestroyOnLoad(this.gameObject); StartCoroutine(LoadScene("XXXX"));}IEnumerator LoadScene(string name){ AsyncOperation SS= SceneManager.LoadSceneAsync(name); //根据游戏规则 自定义进度条变化的条件yield return SS;//1.场景加载结束 更新20%//2.动态加载怪物再更新20%//3.动态加载场景模型进度条顶满 //4.加载结束隐藏进度条} 总结场景异步加载 和 资源异步加载 一样
1.通过事件回调函数2.协程异步加载1.事件回调函数 优点:写法简单,逻辑清晰 缺点:只能加载完场景做一些事情 不能在加载过程中处理逻辑
2.协程异步加载 优点:可以在加载过程中处理逻辑,比如进度条更新等 缺点:写法较为麻烦,要通过协程
场景管理器 public class SceneControl{private static SceneControl instance = new SceneControl();public static SceneControl Instance => instance;private SceneControl() { }public void LoadScene(string name, UnityAction action){AsyncOperation SS = SceneControl.LoadSceneAsync(name);SS.completed += (Scene) =>{action();};}} ⭐🅰️系统路线学习点击跳转⭐⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、