`
aijun980204
  • 浏览: 98189 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Unity3D使用C#实现Coroutines & Yield

阅读更多

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等待函数介绍1

    在 Unity3D 中,Coroutines & Yield 的实现与 C# 和 Javascript 有所不同。在 C# 中,使用 yield 关键字可以实现等待函数,而在 Javascript 中,使用 yield 关键字也可以实现等待函数,但语法上有一些区别。 使用 ...

    cSharp-study.zip_UNITY c_c# 脚本开发_unity Csharp_unity c#学习

    4. **C#实现Coroutines&Yield**: 协程(Coroutines)是Unity中一种特殊的执行流程,可以实现非阻塞式的长时间运行任务。使用yield关键字可以暂停Coroutine并在特定条件满足时继续执行。常见的用途包括动画过渡、...

    Unity3D炮弹抛物线轨迹脚本1

    在Unity3D中,模拟炮弹的抛物线轨迹是一项常见的任务,尤其是在开发射击类游戏时。这个脚本,名为"ProjectileTest",是用于实现这一功能的一个实例。它通过计算角度和应用物理学原理来模拟炮弹的发射和飞行,使炮弹...

    Unity3d 中文脚本使用手册

    Unity3D中文脚本使用手册是一本针对Unity3D游戏引擎中脚本编程的指南。Unity3D是一种强大的游戏开发工具,广泛应用于跨平台游戏的开发中。它支持多种编程语言,其中C#是最常用的脚本语言。本手册详细介绍了Unity3D...

    Unity3D脚本中文教程Javascript版本

    本教程主要针对Unity3D的JavaScript版本,尽管目前Unity更推荐使用C#,但了解JavaScript的语法和概念对于理解C#也有很大帮助。 ### 第一章 脚本概览 1. **常用操作**:在Unity中,JavaScript脚本用于控制游戏对象...

    unity3d中文脚本

    在深入理解Unity3D中文脚本之前,我们需要了解Unity3D是一款广泛使用的跨平台游戏引擎,它支持多种编程语言,其中C#是使用最多的脚本语言。Unity3D中文脚本则是为了帮助中文用户更好地理解和使用Unity3D引擎而编写的...

    unity3d 常用代码库

    1. **C#编程基础**:Unity3D主要使用C#作为脚本语言。了解C#的基础语法,如变量、数据类型、控制流、类与对象、继承、多态等,是编写Unity代码的前提。 2. **MonoBehaviours**:Unity中的脚本都是基于MonoBehaviour...

    Unity3D脚本教程

    总的来说,Unity3D脚本教程将带你逐步探索C#在游戏开发中的应用,从基本的脚本创建到复杂的逻辑实现,再到优化和调试技巧,让你在游戏开发的道路上更加得心应手。通过学习这个教程,你将具备使用Unity3D开发互动体验...

    unity3d脚本.pdf

    在Unity3D开发过程中,脚本是实现逻辑和交互的关键组成部分。通过编写脚本,开发者可以控制游戏对象的行为,实现复杂的功能。 ##### 常用操作 Unity3D支持多种语言进行脚本编写,其中最常用的是C#。C#提供了丰富的...

    UNITY3D常用脚本

    这个压缩包中的“UNITY3D常用脚本”包含了一些JavaScript和C#语言编写的Unity3D脚本,这些脚本在实际项目中经常被用到,可以帮助开发者解决各种常见问题或加速开发流程。 Unity3D支持两种主要的编程语言:...

    Unity3D教程:脚本初级知识(四)2

    在Unity3D中,编写脚本是实现游戏逻辑和交互的关键部分,本教程主要涉及C#和Boo语言的脚本初级知识。 首先,所有行为脚本在Unity中都必须从`MonoBehaviour`类继承,这是为了确保脚本能与Unity的生命周期方法协同...

    Unity中文脚本参考

    Unity3D 是一款广泛应用于游戏开发的跨平台引擎,以其强大的图形渲染能力、丰富的资源管理和灵活的编程接口深受开发者喜爱。"Unity中文脚本参考" 是一份非常实用的学习资料,它详细介绍了Unity中的脚本编写,包括C#...

    Unity3D脚本中文教程.docx

    本教程主要围绕Unity3D中的脚本编写进行讲解,特别是针对JavaScript的使用,但同时也提到了C#和Boo语言的脚本编写。 1. **脚本概览** Unity3D中的脚本是通过附加到游戏物体上来实现功能的。这些脚本对象包含了一...

    UnityFx.Async:Unity3d的异步操作(承诺)

    UnityFx.Async ... 类是通用异步操作(也称为promise或future )的实现。 它在许多方面模仿 (例如,可以与async / await运算符一起使用,支持继续和同步上下文捕获),同时保持Unity / net35的兼容性。 对于

    unity中的数学基础知识

    Unity3D是一款强大的游戏开发引擎,它涉及到许多数学基础知识,特别是在3D图形和物理模拟方面。在游戏制作中,理解并掌握这些数学概念是至关重要的,因为它们是构建游戏世界和控制游戏对象行为的基础。 首先,我们...

    脱离Untiy自行实现的一个协程

    在Unity引擎中,协程(Coroutine)是一种强大的工具,它允许开发者执行异步操作而无需使用复杂的回调函数或线程管理。本项目旨在探讨如何在不依赖Unity的情况下,自行实现一个协程系统,以理解其背后的原理。我们将...

    unity-utils-wrapper

    4. **协程(Coroutines)**:C#的yield关键字使得在Unity中可以编写异步操作,如延迟执行、帧同步或动画效果。 5. **数学运算(Mathematics)**:Unity中的Vector3、Quaternion等结构体用于处理3D空间中的位置、...

Global site tag (gtag.js) - Google Analytics