Unity中如何利用一个协程和www类实现简单的图片下载
来源:互联网 发布:怎样快速提升淘宝信誉 编辑:程序博客网 时间:2024/05/23 17:55
Unity中如何利用一个协程和www类实现简单的图片下载<18/10/2017>
原文地址:http://www.manew.com/thread-96238-1-1.html
今天讲解一下如何使用WWW类和协程完成简单的图片和视频下载播放功能。
一、WWW类
WWW是一个Unity开发中非常常用到的工具类,主要提供一般Http访问的功能,以及动态从网上下载图片、声音、视频、Unity资源等。
注意:iPhone支持http://, https:// 和 file://协议;ftp://协议的支持仅限于匿名下载。其他协议不被支持。
当在windows和Windows Store Apps使用文件协议来访问本地文件,需要使用file:///(带有三个斜线)。
WWW类的主要常用属性有:
www类加载图片的官方的示例代码如下:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public string url = "http://images.earthcam.com/ec_metros/ourcams/fridays.jpg";
IEnumerator Start() {
WWW www = new WWW(url);
yield return www;
renderer.material.mainTexture = www.texture;
}
}
二、协程
1、什么是协程?
协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代码。
Unity在每一帧都会去处理对象上的协程。Unity主要是在Update后去处理协程(检查协程的条件是否满足)。协程跟Update()其实一样的,都是Unity每帧都会去处理的函数。如果在一个对象的前期调用协程,协程会立即运行到第一个 yield return 语句处,如果是 yield return null ,就会在同一帧再次被唤醒。
2、协程的写法
Unity的协程系统是基于C#的一个简单而强大的接口 ,IEnumerator,它允许你为自己的集合类型编写枚举器。也就是一个 IEnumerator 返回值,一个
yield return null 的语句。
IEnumerator SayHi()
{
{
// 协程中必须有返回值yield return
yield return null;
}
yield return null;
}
//带参数的:
IEnumerator SayHello(string name){
print (name);
yield return null;
}
print (name);
yield return null;
}
3.*协程中的细节*
1.协程与普通方法一样,可以被多次调用,
2.协程一旦被开启之后,总是试图将方法中的代码执行完,之后停止。
3.在协程内,如果遇到yield return null ,0 , 1 ...;表示剩余代码将在下一帧继续执行,
4.在协程中遇到 yield return new WaitForSeconds (n); 代码;表示剩余代码将在 n 秒之后执行。
5. 在协程中如果遇到 yield return StartCoroutine (Son ()), 表示剩余代码将在子协程执行完成之后继续执行。子协程仍然满足协程基本规则。
6.在协程中如果遇到 yield return new WaitForFixedUpdate (), 表示剩余代码将在FixedUpdate 执行完毕之后继续向下执行。
7. 在协程中如果遇到 yield return new WaitForEndOfFrame (), 表示剩余代码将在ONGUI 执行完毕之后继续向下执行。
8.在协程中如果遇到 yield return WWW,表示剩余代码将在 www 下载文件之后继续向下执行。
9.在协程中如果遇到 yield return obj ,表示剩余代码将在obj 部位空的时候继续向下执行。
10.在协程中如果遇到 yield return new WaitForSeconds (n) ,会受到Time.timeScale 的影响。
11.协程方法,可以当做普通方法,在两个脚本之间自由调用。
12. 生命周期内的方法,也可以改造成协程方法。
1.协程与普通方法一样,可以被多次调用,
2.协程一旦被开启之后,总是试图将方法中的代码执行完,之后停止。
3.在协程内,如果遇到yield return null ,0 , 1 ...;表示剩余代码将在下一帧继续执行,
4.在协程中遇到 yield return new WaitForSeconds (n); 代码;表示剩余代码将在 n 秒之后执行。
5. 在协程中如果遇到 yield return StartCoroutine (Son ()), 表示剩余代码将在子协程执行完成之后继续执行。子协程仍然满足协程基本规则。
6.在协程中如果遇到 yield return new WaitForFixedUpdate (), 表示剩余代码将在FixedUpdate 执行完毕之后继续向下执行。
7. 在协程中如果遇到 yield return new WaitForEndOfFrame (), 表示剩余代码将在ONGUI 执行完毕之后继续向下执行。
8.在协程中如果遇到 yield return WWW,表示剩余代码将在 www 下载文件之后继续向下执行。
9.在协程中如果遇到 yield return obj ,表示剩余代码将在obj 部位空的时候继续向下执行。
10.在协程中如果遇到 yield return new WaitForSeconds (n) ,会受到Time.timeScale 的影响。
11.协程方法,可以当做普通方法,在两个脚本之间自由调用。
12. 生命周期内的方法,也可以改造成协程方法。
4、启动协程的写法。
//3.1 启动协程
StartCoroutine(SayHi());
//3.2 方法名开启
StartCoroutine("SayHi");
//3.3 启动带参数的协程
StartCoroutine(SayHello("hello"));
StartCoroutine ("SayHello","你好");
//关闭协程 ,注意只能通过字符串去关闭一个协程。
StopCoroutine("SayHi");
StartCoroutine(SayHi());
//3.2 方法名开启
StartCoroutine("SayHi");
//3.3 启动带参数的协程
StartCoroutine(SayHello("hello"));
StartCoroutine ("SayHello","你好");
//关闭协程 ,注意只能通过字符串去关闭一个协程。
StopCoroutine("SayHi");
代码示例:利用一个协程和www类实现简单的图片下载展示:
1.在unity中搭建好一个场景需要一个RawImage。
2.创建一个脚本,完成以下代码:
// 1) 定义一个RawImage用于展示图片
RawImage l_rawImage;
// 2) 图片的网址
string imgUrl;
void Start ()
{
// 代码获取我们的RawImage
l_rawImage =
RawImage l_rawImage;
// 2) 图片的网址
string imgUrl;
void Start ()
{
// 代码获取我们的RawImage
l_rawImage =
GameObject.Find("RawImage").GetComponent<RawImage> ();
// 网址赋值
imgUrl = "http://g.hiphotos.baidu.com/image/h%3D360/sign" +
"=07ad353ef403738dc14a0a24831ab073/08f790529822720eb2" +"5fa86479cb0a46f31fab9f.jpg";
// 开启下载图片的协程。
StartCoroutine (LoadImage ());
}
// 实现加载协程的方法
IEnumerator LoadImage()
{
// 网址赋值
imgUrl = "http://g.hiphotos.baidu.com/image/h%3D360/sign" +
"=07ad353ef403738dc14a0a24831ab073/08f790529822720eb2" +"5fa86479cb0a46f31fab9f.jpg";
// 开启下载图片的协程。
StartCoroutine (LoadImage ());
}
// 实现加载协程的方法
IEnumerator LoadImage()
{
// 根据连接下载
WWW www = new WWW (imgUrl);
// 等待WWW 代码执行完毕之后后面的代码才会执行。
yield return www;
// 将下载的textrue 在RawImage上展示
l_rawImage.texture = www.texture;
}
WWW www = new WWW (imgUrl);
// 等待WWW 代码执行完毕之后后面的代码才会执行。
yield return www;
// 将下载的textrue 在RawImage上展示
l_rawImage.texture = www.texture;
}
以上代码就能实现一个简单的图片下载和展示的功能了。
阅读全文
0 0
- Unity中如何利用一个协程和www类实现简单的图片下载
- 一个协程的使用示例(走走停停效果)
- python里怎么实现多个协程一起执行,只要完成一个就返回一个协程
- 利用Unity和高通实现简单的AR功能
- 利用 iframe 来实现打印和图片下载
- 利用AsyncTast实现图片下载
- python实现多个协程协作
- Unity如何使用WWW类和协程完成图片、视频下载播放(一)
- Unity如何使用WWW类和协程完成图片、视频下载播放(一)
- Unity中WWW的应用
- Unity中利用A*算法实现简单寻路
- Android中AsyncTask的简单用法及实现网络图片下载的实例
- Unity如何利用Mapbox在游戏中实现真实地图?
- Unity如何利用Mapbox在游戏中实现真实地图?
- 多个协程的调用顺序,以及Update和Start的关系
- 如何利用EnteLib Unity Interception Extension 和PIAB实现Transaction的Call Handler
- 简单的网络图片下载
- Unity中虚拟摇杆的简单实现
- 【MySQL】性能优化之 order by (一)
- PHP生成PDF完美支持中文,解决TCPDF乱码
- 【C++】C++函数返回数组
- FC协议与iSCIS协议详解
- 性能优化问题?
- Unity中如何利用一个协程和www类实现简单的图片下载
- Vagrant 导出自己的box
- TCP-IP协议详解
- c++学习笔记之数组及vector
- redis学习系列(三-5)--redis基础类型初探(有序集合对象)
- Java项目配置文件读取的两个方式
- JS函数节流防抖
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Linux下监视NVIDIA的GPU使用情况