【unity每日一记】资源和场景加载图文详解


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

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

本文由 秩沅 原创

‍ 收录于专栏unity每日一记

️推荐文章


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

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

⭐【unity本站最全系列】unity常用API大全一篇文章足以
在这里插入图片描述


Unity中资源和场景加载


文章目录

    • ️推荐文章
    • Unity中资源和场景加载
    • (==A==) 资源加载(Resource)
      • ‍5种资源加载的方式,Resource加载介绍
      • ‍Resource资源加载操作
    • (==B==) 场景(Scene)加载
      • ‍加载场景的方法
      • ‍SceneManasger的操作
        • 1.同步加载
        • 2.异步加载
    • ️系统路线学习点击跳转



A 资源加载(Resource)


‍5种资源加载的方式,Resource加载介绍


  • Resources(只能加载Resources目录中的资源)
  • AssetBundle(只能加载AB资源,当前设备允许访问的路径都可以)
  • WWW(可以加载任意处资源,包括项目外资源(如远程服务器))
  • AssetDatabase(只能加载Assets目录下的资源,但只能用于Editor)
  • UnityWebRequest(可以加载任意处资源,是WWW的升级版本)

资源加载适用于需要加载资源较多的 情况就不用一个一个的拖拽进去


‍Resource资源加载操作


加载资源前首先需要在project面板中创建Resource名字的文件夹,为固定文件夹用于资源加载

以加载AudioClip类型的资源为例:

  • 根目录加载 Resource.Load< AudioClip>(“voice”);
  • 子目录加载 Resource.Load ( @ " 子目录名/ voice") ;
  • 另一种形式:
    Object xx = Resource.Load(“voice”);
    AudioClip yy as xx ; // 显性类型转换 ,前提是二者兼容
  • 加载同类型所有资源的方法:
    ①根目录加载: AudioClip [] xx = Resource.AllLoad(" “) ;
    ②子目录加载:AudioClip [] yy = Resource.AllLoad(” 子目录名");

关键字:@ ,as

  • 卸载AB包的方法: Resource. UnLoadAsset
void Start()
    {

        Object obj= Resources.Load("sound");
        //AudioClip ac = obj as AudioClip;
        AudioClip ac = (AudioClip)obj;
        AudioSource.PlayClipAtPoint(ac, transform.position);
        
        //Resources.LoadAll("Prefabs");
        AudioClip[] audioClips= Resources.LoadAll<AudioClip>("");
        foreach (var item in audioClips)
        {
            Debug.Log(item);
        }

        //Resources.UnloadAsset
    }
  • C#中的回收机制是系统自动回收的,有多种回收机制,不像其他语言需要手动回收

B 场景(Scene)加载


‍加载场景的方法


  • SceneManager.LoadScene() ; 场景同步加载
  • SceneManager.LoadSceneSAsyn(); 场景异步加载
  • Application.LoadLevel():同步加载
  • Application.LoadLevelAsync():异步加载
  • Application.LoadLevelAddictive():同步附加式加载
  • Application.LoadLevelAddictiveAsync():异步附加式加载

‍SceneManasger的操作


首先添加场景加载的命名空间Using UnityEngine.SceneManagement ;
而后把游戏场景都保存(拖拽)在 Buid setting 里面,相当于存储场景的目录

【unity每日一记】资源和场景加载图文详解_第1张图片


1.同步加载


SceneManager.Load( 序列号) ;
SceneManager.Load( “场景名”) ;

 void Start()
    {
        //SceneManager.LoadScene(1);
        //SceneManager.LoadScene("TriggerTest");
    }


缺点:加载时造成画面卡帧,原因为,在未加载完成前画面是停止的,所以是卡帧现象


2.异步加载


异步加载与协程配套使用,协程也属于异步加载中的一部分
【 优点:不影响主进程的加载】

SceneManager.LoadAsync(序列号)
SceneManager.LoadAsync(“场景名”)

但是通常我们和协程一起使用:

StartCoroutine(协程迭代器方法() ); //调用协程

AsyncOperation 解析:、

  • AsyncOperation 该类型翻译为异步操作 ,为下面获得异步场景的返回值
    AsyncOperation ao= SceneManager.LoadSceneAsync(2);

  • ao.allowSceneActivation = true 激活场景

  • ao.progress 场景加载的进度


    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space)) //按下空格调用协程
        {
            StartCoroutine(LoadNextAsyncScene());
        }
        
        if (Input.anyKeyDown&&ao.progress>=0.9f) //当场景进程加载超过百分之90 激活场景
        {
            ao.allowSceneActivation = true;
        }
    }

    IEnumerator LoadNextAsyncScene()
    {
        AsyncOperation  ao= SceneManager.LoadSceneAsync(2);
        ao.allowSceneActivation = false;
        while (ao.progress<0.9f)
        {
            //当前场景加载进度小于0.9
            //当前场景挂起,一直加载,直到加载基本完成
            yield return null;
        }
        Debug.Log("按下任意键继续游戏");
    }

️系统路线学习点击跳转


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


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


在这里插入图片描述


你可能感兴趣的:(#,Unity每日一记,unity,c#,游戏引擎)