++1.1、什么是协程?
++++1、Unity的协程系统是基于C#的一个简单而强大的接口。
++++2、简单讲,协程就是可以把一个方法拆分成多次执行的一种接口。
++++简单示例:
IEnumerator ShowTime(){
Debug.Log(“First Frame”); //第一帧执行
yield return 0; //等待下一帧
Debug.Log(“Second Frame”); //第二帧执行
yield return 0; //等待下一帧
Debug.Log(“Third Frame”); //第三帧执行
}
++1.2、如何开启协程?
StartCoroutine(ShowTime()); //通过传入方法开启协程
StartCoroutine(“ShowTime”); //通过传入字符串类型的方式名称开启协程
++1.3、如何停止协程?
StartCoroutine(“ShowTime”);
StopCoroutine(“ShowTime”); //停止协程
++++注意: StopCoroutine只能停止以字符串方式开启的协程。
++1.4、Yield
++++1、当你“yield”一个方法时,你相当于说,“现在停止这个方法,然后在下一帧中从这里继续开始!”
++++2、用0或者null来yield的意思是告诉协程等待下一帧,直到继续执行为止。
++1.5、模拟Update
//在Update调用后,每帧调用一次
IEnumerator MyUpdate(){
//死循环
while(true){
Debug.Log(“MyUpdate”);
//方法在这个地方挂起,等下一帧来了,方法从这个位置继续往下执行
yield return 0;
}
}
++1.6、yield之后还可以加一些其他有意思的东西
++++yield return new WaitForSeconds(2f);
++++yield return StartCoroutine(otherIEnumerator());
....
++1.7、制作定时器
//时间间隔
float timeInterval =2;
IEnumerator Timer(){
while(true){
yield return new WaitForSeconds(timeInterval);
Debug.Log(“延迟两秒”);
}
}
++1.8、协程注意事项
++++1、在程序中调用StopCoroutine()方法只能终止以字符串形式启动(开始)的协程。
++++2、多个协程可以同时运行,它们会根据各自的启动顺序来更新。
++++3、协程可以嵌套任意多层。
++++4、协程不是多线程(尽管它们看上去是这样的),它们运行在同一线程中,跟普通的脚本一样。
++++5、IEnumerator类型的方法不能带ref或者out型的参数,但可以带被传递的引用。
++1.9、协程,线程的区别
++++1、线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度。
++++2、协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。
++++3、协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力。
++1.10、协程优缺点
++++1、优点
--1、跨平台
--2、跨体系架构
--3、无需线程上下文切换的开销
--4、无需原子操作锁定及同步的开销
--5、方便切换控制流,简化编程模型
--6、高并发+高扩展性+低成本: 一个CPU支持上万的协程都不是问题,所以很适合用于高并发处理。
++++2、缺点
--1、无法利用多核资源: 协程的本质是个单线程,它不能同时将单个CPU的多个核用上,协程需要和进程配合才能运行在多CPU上。当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。
--2、进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序:这一点和事件驱动一样,可以使用异步IO操作来解决。
++2.1、WWW类
++++1、可以简单的访问web页面。
++++2、这是一个小工具模块检索url的内容。
++++3、你开始在后台下载通过调用WWW(url),返回一个新的WWW对象。
++++4、你可以检查isDone属性来查看是否已经下载完成,或者yield自动等待下载物体,直到它被下载完成(不会影响游戏的其余部分)。
++2.2、WWW基本使用
public class ExampleClass : MonoBehaviour{
public string url =“http://...../lovezuanzuan.jpg”;
IEnumerator Start(){
WWW www = new WWW(url);
yield return www;
renderer.material.mainTexture= www.texture;
}
}
++2.3、WWW常用属性
++++texture :下载到的图片
++++audioClip :下载到的音频
++++movie : 下载到的视频
++++bytes : 下载到的比特数组
++++text : 下载到的Web文字
++++isDone : 下载是否完毕
++++progress : 当前下载进度
++++url : 下载地址
++2.4、下载网络资源
//url资源地址
IEnumerator Download(string url){
WWW www =new WWW(url); //www保存了下载的资源
yield return www;
}
++2.5、获取下载后的文本
IEnumerator DownloadText(string url){
WWW task = new WWW(url);
yield return task;
string text = task.text; //下载的文本
transform.Find(“Text”).GetComponent<Text>().text= text;
StartCoroutine(Save(task)); //保存
}
++2.6、获取下载后的音频
WWW Task; //下载音频
IEnumerator DownloadAudio(string url){
Task = new WWW(url);
while(Task.isDone == false){
Debug.Log(Task.progress);
yield return 0;
}
Debug.Log(“完成!” + Task.bytesDownloaded); //下载文件的大小
}
string path = Application.dataPath+ “/Resources/” +“1.mp3”;
File.WriteAllBytes(path,Task.bytes);
while(File.Exists(path) == false){
yield return 0;
}
AssetDatabase.Refresh();
aud.clip = Resource.Load<AudioClip>(“1”); //通过Resources读取音频
aud.Play();
#立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++立钻哥哥推荐的拓展学习链接(Link_Url):
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++++Unity引擎基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向组件开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平台开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI综合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity动画系统基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity动画系统进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation导航系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity数据存储:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite数据库:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW类和协程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity网络:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委托:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#数据类型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默认的快捷键:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++游戏相关缩写:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++设计模式简单整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++UML类图:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++Unity知识点0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
--_--VRunSoft : lovezuanzuan--_--