Unity协程

1、什么是协程:

协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代码。

Unity在每一帧都会去处理对象上的协程。Unity主要是在Update后去处理协程(检查协程的条件是否满足)。协程跟Update()其实一样的,都是Unity每帧都会去处理的函数。如果在一个对象的前期调用协程,协程会立即运行到第一个 yield return 语句处,如果是 yield return null ,就会在下一帧再次被唤醒。

2、协程中的一些细节:

协程与普通方法一样,可以被多次调用, 
协程一旦被开启之后,总是试图将方法中的代码执行完,之后停止。
在协程内,如果遇到yield return null ,0 , 1 ...;表示剩余代码将在下一帧继续执行,
在协程中遇到 yield return new WaitForSeconds (n);代码;表示剩余代码将在 n秒之后执行。 
在协程中如果遇到 yield return StartCoroutine (Son ()), 表示剩余代码将在子协程执行完成之后继续执行。子协程仍然满足协程基本规则。
在协程中如果遇到 yield return new WaitForFixedUpdate (), 表示剩余代码将在FixedUpdate执行完毕之后继续向下执行。
在协程中如果遇到 yield return new WaitForEndOfFrame (), 表示剩余代码将在ONGUI执行完毕之后继续向下执行。
在协程中如果遇到 yield return WWW,表示剩余代码将在 www下载文件之后继续向下执行。
在协程中如果遇到  yield return obj ,表示剩余代码将在obj部位空的时候继续向下执行。
在协程中如果遇到  yield return new WaitForSeconds (n) ,会受到Time.timeScale的影响。
协程方法,可以当做普通方法,在两个脚本之间自由调用。 
生命周期内的方法,也可以改造成协程方法。

3、示例:

首先在Unity中创建一个RawImage,然后新建一个脚本,挂在Canvas(为了下面好查找Rawimage);


然后编写代码(记得要引用UnityEngine.UI):

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class test_1 : MonoBehaviour {

	private RawImage image;
	private string imgUrl; 

	// Use this for initialization
	void Start () {
		image = transform.Find ("myImage").GetComponent<RawImage> ();//获取RawImage
		imgUrl = "https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=1284368079,2050663862&fm=117&gp=0.jpg";
		StartCoroutine (LoadMyImage());
	}

	IEnumerator LoadMyImage(){
		WWW www = new WWW (imgUrl);
		yield return www;
		image.texture = www.texture;
	}
}
最后的效果图:


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

末零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值