Unity协程

xiaoxiao2021-02-28  125

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; } } 最后的效果图:

转载请注明原文地址: https://www.6miu.com/read-23953.html

最新回复(0)