Coroutines & Yield是Unity
3D编程中重要的概念,它可以实现将一段程序
延迟执行或者将其各个部分分布在一个时间段内连续执行,但是在Javascript与C#中实现Coroutines & Yield,在语法上却有一些区别:
yield不可单独使用
需要与return配合使用,例如:
1 yield return 0; //等0帧
2 yield return 1; //等1帧
3 yield return WaitForSeconds(3.0); //等待3秒
所有使用yield的函数必须将返回值类型设置
为IEnumerator类型,例如:
1 IEnumerator DoSomeThingInDelay() {...}
最后,也是在”Using C#”这个章节中没有讲到的关键一点是,所有IEnumerator类型函数必须使用”StartCoroutine”这个函数触发,不能单独使用,例如:
1 StartCoroutine(DoSomeThingInDelay());
最后附上学习
Coroutines & Yield时所做的小例子
,脚本
的作用是不断随机改变材质
的颜色,演示
demo使用”V字仇杀队”中的面具。
01 using UnityEngine;
02 using System.Collections;
03
04 public class RandomColor : MonoBehaviour {
05
06 public float delayInSecond = 1;
07 public Material targetMaterial;
08
09 // Use this for initialization
10 void Start () {
11 StartCoroutine(AutoChangeColor());
12 }
13
14 // Update is called once per frame
15 void Update () {
16 }
17
18 IEnumerator AutoChangeColor()
19 {
20 yield return 0; //确保Time.deltaTime为0
21
22 Color colorNew = GenerateRandomColor();
23 Color colorNow = targetMaterial.GetColor("_Color");
24 float timeEclapsed = 0;
25 for (timeEclapsed = 0; timeEclapsed < delayInSecond; timeEclapsed += Time.deltaTime)
26 {
27 float progress = timeEclapsed / delayInSecond;
28 Color colorTween = new Color(
29 (colorNew.r - colorNow.r) * progress + colorNow.r,
30 (colorNew.g - colorNow.g) * progress + colorNow.g,
31 (colorNew.b - colorNow.b) * progress + colorNow.b
32 );
33 targetMaterial.SetColor("_Color", colorTween);
34 yield return 1;
35 }
36
37 StartCoroutine(AutoChangeColor());
38 }
39
40 Color GenerateRandomColor(){
41 Color color = new Color();
42 color.r = Random.value;
43 color.g = Random.value;
44 color.b = Random.value;
45
46 return color;
47 }
48 }
Unity3D使用C#实现Coroutines & Yield
最新推荐文章于 2023-04-17 11:36:44 发布
本文介绍Unity3D中Coroutines&Yield的概念及用法,包括如何利用yield关键字暂停执行、改变材质颜色的示例代码,并讲解了使用IEnumerator类型函数与StartCoroutine函数的要点。
1395

被折叠的 条评论
为什么被折叠?



