查看: 2005|回复: 60

[脚本] Unity3D等待函数介绍

[复制链接]

33

主题

13

听众

204

积分

Rank: 2

升级   1.33%

发表于 2012-12-15 19:54 |显示全部楼层
共享资源获取更多积分!share your resources get more credits!
Coroutines & Yield是Unity3D编程中重要的概念,它可以实现将一段程序延迟执行或者将其各个部分分布在一个时间段内连续执行,但是在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字仇杀队”中的******。
[code=csharp]
using UnityEngine;

using System.Collections;



public class RandomColor : MonoBehaviour {



public float delayInSecond = 1;

public Material targetMaterial;

  

// Use this for initialization

  void Start () {

  StartCoroutine(AutoChangeColor());

  }



  // Update is called once per frame

  void Update () {

}



  IEnumerator AutoChangeColor()

  {

  yield return 0; //确保Time.deltaTime为0



Color colorNew = GenerateRandomColor();

  Color colorNow = targetMaterial.GetColor("_Color");

float timeEclapsed = 0;

  for (timeEclapsed = 0; timeEclapsed < delayInSecond; timeEclapsed += Time.deltaTime)

{

float progress = timeEclapsed / delayInSecond;

  Color colorTween = new Color(

  (colorNew.r - colorNow.r) * progress + colorNow.r,

(colorNew.g - colorNow.g) * progress + colorNow.g,

  (colorNew.b - colorNow.b) * progress + colorNow.b

  );

targetMaterial.SetColor("_Color", colorTween);

yield return 1;

}

  

StartCoroutine(AutoChangeColor());

}

  

Color GenerateRandomColor(){

  Color color = new Color();

color.r = Random.value;

  color.g = Random.value;

  color.b = Random.value;

   

  return color;
  }

}

[/code]
楼主热帖
为什么那么多人叫苍老师 难道他不是日本来祸害中国的妖孽吗 保钓那么激情 为什么不把苍**赶出中国

0

主题

13

听众

201

积分

Rank: 2

升级   0.33%

发表于 2017-2-8 20:04 |显示全部楼层
很不错
回复

使用道具 举报

0

主题

10

听众

206

积分

Rank: 2

升级   2%

发表于 2017-2-8 19:54 |显示全部楼层
好帖就是要顶
回复

使用道具 举报

2

主题

10

听众

202

积分

Rank: 2

升级   0.67%

发表于 2017-2-8 19:40 |显示全部楼层
难得一见的好帖
回复

使用道具 举报

0

主题

10

听众

203

积分

Rank: 2

升级   1%

发表于 2017-2-8 19:26 |显示全部楼层
很好哦
回复

使用道具 举报

0

主题

10

听众

203

积分

Rank: 2

升级   1%

发表于 2017-2-8 19:55 |显示全部楼层
LZ真是人才
回复

使用道具 举报

0

主题

10

听众

200

积分

Rank: 2

升级   0%

发表于 2017-2-12 07:58 |显示全部楼层
很不错
回复

使用道具 举报

0

主题

10

听众

204

积分

Rank: 2

升级   1.33%

发表于 2017-2-12 07:41 |显示全部楼层
好帖就是要顶
回复

使用道具 举报

0

主题

10

听众

201

积分

Rank: 2

升级   0.33%

发表于 2017-2-12 07:24 |显示全部楼层
真心顶
回复

使用道具 举报

0

主题

10

听众

208

积分

Rank: 2

升级   2.67%

发表于 2017-2-12 07:34 |显示全部楼层
很好哦
回复

使用道具 举报

温馨提示:求助请到“Unity技术讨论”版块中发帖,便于集中解决!
您需要登录后才可以回帖 登录 | 立即注册

懒人模式:

关闭

站长推荐 上一条 /1 下一条

Unity3D游戏开发联盟(资源共享平台) -Unity3D,Unreal ( 苏ICP备12051100号 )   

GMT+8, 2019-12-8 12:57 , Processed in 0.115757 second(s), 42 queries .