找回密码
 立即注册
查看: 5500|回复: 60

[脚本] Unity3D等待函数介绍

[复制链接]
发表于 2012-12-15 19:54 | 显示全部楼层 |阅读模式
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]
发表于 2017-2-8 20:04 | 显示全部楼层
很不错
发表于 2017-2-8 19:54 | 显示全部楼层
好帖就是要顶
发表于 2017-2-8 19:40 | 显示全部楼层
难得一见的好帖
发表于 2017-2-8 19:26 | 显示全部楼层
很好哦
发表于 2017-2-8 19:55 | 显示全部楼层
LZ真是人才
发表于 2017-2-12 07:58 | 显示全部楼层
很不错
发表于 2017-2-12 07:41 | 显示全部楼层
好帖就是要顶
发表于 2017-2-12 07:24 | 显示全部楼层
真心顶
发表于 2017-2-12 07:34 | 显示全部楼层
很好哦
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-4-28 22:35 , Processed in 0.406297 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表