异步加载和协程+Unity特殊文件夹

发布于:2025-02-13 ⋅ 阅读:(14) ⋅ 点赞:(0)

异步加载

        不会引起代码阻塞;

协程

协程:协程不是多线程,是假的“多线程”;

        应用场景:1.www 加载网络数据; 2.异步加载资源、场景;

一、协程声明函数:

WWW www;
AsyncOperation ASYNC;  //该两条声明为异步数据
IEnumerator PrintA(int x){
    Debug.Log("Print A---------1111:"+x);
    //StartCoroutine("PrintB");
    yield return new WaitForSeconds(1);
    yield return new WaitForEndOfFrame();  //运行到当前帧最后执行;
    yield return new WaitForFixedUpdate();   //0.02s
    yield return null;   //等一帧
    yield break;   //直接跳出协程
    yield return www;
    yield return ASYNC;
    Debug.Log("Print A---------2222");
}

二、启动协程函数 

        方法1:StartCoroutine("PrintA",4);

        方法2:StartCoroutine(Print(4));  //(不建议使用)

三、协程的启动与关闭

//StartCoroutine("PrintA",4);
//StopCoroutine("PrintA");    //能关闭协程

StartCoroutine(PrintA());
//StopCoroutine(PrintA()); //不能关闭协程,只能通过StopAllCoroutines关闭

//IEnumerator ie=PrintA();
//StartCoroutine(ie);
//StopCoroutine(ie);  //该方法能关闭协程


StopAllCoroutines(); //关闭所有已经开启的协程(实际开发时不建议使用)

四、协程是否失效

        当协程开启后,当前代码组件失活,不影响协程继续执行; 

        当协程开启后,当前代码组件销毁,协程就不继续执行;

        当协程开启后,当前代码组件所在游戏物体失活,协程就不继续执行;(和延迟函数不同)

                所以以后有协程的代码不能挂在经常失活或者激活的游戏物体上;

五、yield return

六、协程异步加载Resources资源 

ResourceRequest rr=null;
IEnumerator ResourcesLoad(string path){
    rr=Resources.LoadAsync(path);
    yield return rr;
}
Unity的特殊文件夹 

Resources:资源文件夹,可以通过路径直接用API Resources进行加载;

工程文件打包时,不在特殊文件夹时,跟其他文件都没有依赖关系时,此资源不会打进包;

但是Resources文件内,无论是否跟其他资源有依赖关系,都会打进包;

为了减小包体大小,Resources不能乱放资源。

Standard Assets:默认文件夹,此文件夹内资源会被优先编译。

Plugins:插件一般放这个文件夹,还有一些Android和ios平台区分的文件;

Editor:存放Unity工具类,这个文件夹内所有资源都不会打进包;

Application.persistentDataPath:固定数据路径

该系列专栏为网课课程笔记,仅用于学习参考。