WWW类和协程

WWW类和协程


#1、协程的使用

++1.1、什么是协程?

++++1Unity的协程系统是基于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.4Yield

++++1、当你“yield”一个方法时,你相当于说,“现在停止这个方法,然后在下一帧中从这里继续开始!”

++++2、用0或者nullyield的意思是告诉协程等待下一帧,直到继续执行为止。


++1.5、模拟Update

//Update调用后,每帧调用一次

IEnumerator MyUpdate(){

    //死循环

    while(true){

        Debug.Log(MyUpdate);

        //方法在这个地方挂起,等下一帧来了,方法从这个位置继续往下执行

        yield return 0;

    }

}


++1.6yield之后还可以加一些其他有意思的东西

++++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、协程不是多线程(尽管它们看上去是这样的),它们运行在同一线程中,跟普通的脚本一样。

++++5IEnumerator类型的方法不能带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操作来解决。


#2WWW类的使用

++2.1WWW

++++1、可以简单的访问web页面。

++++2、这是一个小工具模块检索url的内容。

++++3、你开始在后台下载通过调用WWW(url),返回一个新的WWW对象。

++++4、你可以检查isDone属性来查看是否已经下载完成,或者yield自动等待下载物体,直到它被下载完成(不会影响游戏的其余部分)。


++2.2WWW基本使用

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.3WWW常用属性

++++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知识点0001https://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--_--

你可能感兴趣的:(WWW类和协程)