最近在写做一个项目,一个关于unity3d的神奇的项目。对√,非常神奇。然后用到了一个类 www ,该类用来加载外部图片或文件的。很好很强大。
不过在unity内部中有一个“很棒的”限定,引用www类函数类型必须为 IEnumerator 类型的。嗯?这是什么,不会问百度,度娘告诉我们,IEnumerator<T> 是所有泛型枚举数的基接口,很好很强大,然而继续翻看百度我们发现,这东西不是unity中的,是c#中一个接口,迭代器知道吗,就是这个东西。
引用一下其他牛人的解释 http://blog.csdn.net/byondocean/article/details/6871881 会发现,foreach的底层其实就是用迭代器实现的。
很好很强大,然而这跟我们用www类又有什么关系呢。还是 too young too simple,unity中www调用函数类型必须为IEnumerator,于是我们就用呗。
然后,就发现了yield return这个坑,这是啥!!!what!!!哦,这是迭代器的返回类型,也就是说如果你用了IEnumerator这东西,每次的返回值都要用yield return!
好,我们改,于是将所有的return改完之后,脚本写完了。3 2 1 GO~
。。。接下来,就出现了让我纠结了2天的问题。IEnumerator函数要用StartCoroutine调用!要用StartCoroutine调用!要用StartCoroutine调用!重要的事情说三遍。
来接下来我们看看StartCoroutine这是个啥东西,看中文翻译 协同 。嗯,很容易让我们想到线程什么的,大概意思也是那个样子的,但这个是编译器级别的,而线程是操作系统级别的,嗯,不是一个档次的,当然他们的作用是一样的。 StartCoroutine这个东西详情请见 http://www.cnblogs.com/xpvincent/archive/2013/07/13/3188257.html
于是,通过3天的艰苦奋斗,我知道了
要引用www类加载外部资源,先定义IEnumerator类型的函数,并且函数中用yield return返回值,函数写好之后,调用要用StartCoroutine(函数名)调用。
以上。