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 中,Coroutines & Yield 的实现与 C# 和 Javascript 有所不同。在 C# 中,使用 yield 关键字可以实现等待函数,而在 Javascript 中,使用 yield 关键字也可以实现等待函数,但语法上有一些区别。 使用 ...
4. **C#实现Coroutines&Yield**: 协程(Coroutines)是Unity中一种特殊的执行流程,可以实现非阻塞式的长时间运行任务。使用yield关键字可以暂停Coroutine并在特定条件满足时继续执行。常见的用途包括动画过渡、...
在Unity3D中,模拟炮弹的抛物线轨迹是一项常见的任务,尤其是在开发射击类游戏时。这个脚本,名为"ProjectileTest",是用于实现这一功能的一个实例。它通过计算角度和应用物理学原理来模拟炮弹的发射和飞行,使炮弹...
Unity3D中文脚本使用手册是一本针对Unity3D游戏引擎中脚本编程的指南。Unity3D是一种强大的游戏开发工具,广泛应用于跨平台游戏的开发中。它支持多种编程语言,其中C#是最常用的脚本语言。本手册详细介绍了Unity3D...
本教程主要针对Unity3D的JavaScript版本,尽管目前Unity更推荐使用C#,但了解JavaScript的语法和概念对于理解C#也有很大帮助。 ### 第一章 脚本概览 1. **常用操作**:在Unity中,JavaScript脚本用于控制游戏对象...
在深入理解Unity3D中文脚本之前,我们需要了解Unity3D是一款广泛使用的跨平台游戏引擎,它支持多种编程语言,其中C#是使用最多的脚本语言。Unity3D中文脚本则是为了帮助中文用户更好地理解和使用Unity3D引擎而编写的...
1. **C#编程基础**:Unity3D主要使用C#作为脚本语言。了解C#的基础语法,如变量、数据类型、控制流、类与对象、继承、多态等,是编写Unity代码的前提。 2. **MonoBehaviours**:Unity中的脚本都是基于MonoBehaviour...
总的来说,Unity3D脚本教程将带你逐步探索C#在游戏开发中的应用,从基本的脚本创建到复杂的逻辑实现,再到优化和调试技巧,让你在游戏开发的道路上更加得心应手。通过学习这个教程,你将具备使用Unity3D开发互动体验...
在Unity3D开发过程中,脚本是实现逻辑和交互的关键组成部分。通过编写脚本,开发者可以控制游戏对象的行为,实现复杂的功能。 ##### 常用操作 Unity3D支持多种语言进行脚本编写,其中最常用的是C#。C#提供了丰富的...
这个压缩包中的“UNITY3D常用脚本”包含了一些JavaScript和C#语言编写的Unity3D脚本,这些脚本在实际项目中经常被用到,可以帮助开发者解决各种常见问题或加速开发流程。 Unity3D支持两种主要的编程语言:...
在Unity3D中,编写脚本是实现游戏逻辑和交互的关键部分,本教程主要涉及C#和Boo语言的脚本初级知识。 首先,所有行为脚本在Unity中都必须从`MonoBehaviour`类继承,这是为了确保脚本能与Unity的生命周期方法协同...
Unity3D 是一款广泛应用于游戏开发的跨平台引擎,以其强大的图形渲染能力、丰富的资源管理和灵活的编程接口深受开发者喜爱。"Unity中文脚本参考" 是一份非常实用的学习资料,它详细介绍了Unity中的脚本编写,包括C#...
本教程主要围绕Unity3D中的脚本编写进行讲解,特别是针对JavaScript的使用,但同时也提到了C#和Boo语言的脚本编写。 1. **脚本概览** Unity3D中的脚本是通过附加到游戏物体上来实现功能的。这些脚本对象包含了一...
UnityFx.Async ... 类是通用异步操作(也称为promise或future )的实现。 它在许多方面模仿 (例如,可以与async / await运算符一起使用,支持继续和同步上下文捕获),同时保持Unity / net35的兼容性。 对于
Unity3D是一款强大的游戏开发引擎,它涉及到许多数学基础知识,特别是在3D图形和物理模拟方面。在游戏制作中,理解并掌握这些数学概念是至关重要的,因为它们是构建游戏世界和控制游戏对象行为的基础。 首先,我们...
在Unity引擎中,协程(Coroutine)是一种强大的工具,它允许开发者执行异步操作而无需使用复杂的回调函数或线程管理。本项目旨在探讨如何在不依赖Unity的情况下,自行实现一个协程系统,以理解其背后的原理。我们将...
4. **协程(Coroutines)**:C#的yield关键字使得在Unity中可以编写异步操作,如延迟执行、帧同步或动画效果。 5. **数学运算(Mathematics)**:Unity中的Vector3、Quaternion等结构体用于处理3D空间中的位置、...