异步加载和协程+Unity特殊文件夹
异步加载
不会引起代码阻塞;
协程
协程:协程不是多线程,是假的“多线程”;
应用场景: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:固定数据路径
该系列专栏为网课课程笔记,仅用于学习参考。