【Unity每日一记】SceneManager场景资源动态加载


👨‍💻个人主页@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unity每日一记

⭐🅰️推荐文章⭐


【软件设计师高频考点暴击】

【Unityc#专题篇】之c#系统化大礼包】

【unity数据持久化】数据管理类_PlayerPrfs

【unity本站最全系列】unity常用API大全一篇文章足以


⭐⭐


文章目录


🎶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( "场景名") ;

csharp 复制代码
 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 场景加载的进度

csharp 复制代码
//-----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.协程异步加载

    优点:可以在加载过程中处理逻辑,比如进度条更新等

    缺点:写法较为麻烦,要通过协程

场景管理器

csharp 复制代码
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#专题篇】---核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!



相关推荐
雪芽蓝域zzs3 小时前
uniapp AES 加密解密
开发语言·uni-app·c#
WLJT1231231236 小时前
方寸之间见天地:新兴高端印章的当代破局与价值重构
unity·游戏引擎
weixin_456904278 小时前
C# 中的回调函数
java·前端·c#
软件黑马王子8 小时前
2025Unity中的核心数学工具(三)四元数(穿插Unity实战相关案例)
unity·游戏引擎
python_use9 小时前
SDL+WebGpu跨平台加速学习笔记
游戏引擎
千忧散10 小时前
Unity Socket学习笔记 (三)TCP&UDP
笔记·学习·unity·c#
君莫愁。13 小时前
【Unity】构建超实用的有限状态机管理类
unity·c#·游戏引擎·有限状态机
AA陈超15 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P05-01.创建游戏玩法标签
c++·游戏·ue5·游戏引擎·虚幻
EQ-雪梨蛋花汤17 小时前
【Unity笔记】Unity Lighting Settings 全解析:一文读懂烘焙光照的每个参数(VR项目Lighting优化)
笔记·unity·vr
WangMing_X17 小时前
《使用模块化分层来达到企业级项目要求》
开发语言·c#