- 最后登录
- 2021-9-15
- 注册时间
- 2011-7-15
- 阅读权限
- 100
- 积分
- 50625
- 纳金币
- 53202
- 精华
- 32
|
When writing game code, one often ends up needing to script a sequence of events. This could result in code like the following.
写游戏代码,往往最终需要代码为连续的事件.结果会像这样:
C#
JavaScript
using UnityEngine;using System.Collections;public class example : MonoBehaviour {private int state = 0;void Update() {if (state == 0) {state = 1;return;}if (state == 1) {state = 2;return;}}}
private var state = 0;function Update() {if (state == 0) {// do step 0 //做步骤0state = 1;return;}if (state == 1) {// do step 1 // 做步骤1state = 2;return;}// ...}
It is often more convenient to use the yield statement. The yield statement is a special kind of return, that ensures that the function will continue from the line after the yield statement next time it is called.
往往使用中断语句更为方便.中断语句是一个特殊的返回类型,它确保函数从中断语句的下一行继续执行.
C#
JavaScript
using UnityEngine;using System.Collections;public class example : MonoBehaviour {IEnumerator Awake() {while (***e) {yield return null;yield return null;}}}
while(***e) {// do step 0// 做步骤0yield; // wait for one frame // do step 1// 等待一帧// 做步骤1yield; // wait for one frame// 等待一帧// ...}
You can also pass special values to the yield statement to delay the***cution of the Update function until a certain event has occurred.
你也可以传递时间值到中断语句,Update函数会在中断时间结束后执行下一语句.
C#
JavaScript
using UnityEngine;using System.Collections;public class example : MonoBehaviour {IEnumerator Awake() {yield return new WaitForSeconds(5.0F);}}
// do somethingyield WaitForSeconds (5.0); // wait for 5 seconds等待5秒// do something more...
You can both stack and chain coroutines.
你能叠加和连接协同程序.
This example will***cute Do but continue after calling do immediately.
这个例子将执行Do,但是do函数之后的print指令会立刻执行.
C#
JavaScript
using UnityEngine;using System.Collections;public class example : MonoBehaviour {IEnumerator Do() {print("Do now");yield return new WaitForSeconds(2);print("Do 2 seconds later");}void Awake() {Do();print("This is printed immediately");}}
Do ();print ("This is printed immediately");function Do (){print("Do now");yield WaitForSeconds (2);print("Do 2 seconds later");}
This example will***cute Do and wait until it is finished before continuing its own***cution
这个例子将执行Do,并等待,直到Do完成再执行其他语句.
C#
JavaScript
using UnityEngine;using System.Collections;public class example : MonoBehaviour {IEnumerator Do() {print("Do now");yield return new WaitForSeconds(2);print("Do 2 seconds later");}IEnumerator Awake() {yield return StartCoroutine("Do");print("Also after 2 seconds");print("This is after the Do coroutine has finished***cution");}}
// chain the coroutine// 连接协同程序yield StartCoroutine("Do");print("Also after 2 seconds");print ("This is after the Do coroutine has finished***cution");function Do (){print("Do now");yield WaitForSeconds (2);print("Do 2 seconds later");}
Any event handler can also be a coroutine.
任何事件处理程序都可以是协同程序
Note that you can't use yield from within Update or FixedUpdate, but you can use StartCoroutine to start a function that can.
注意你不能在Update或FixedUpdate函数内使用中断,但是你能使用 StartCoroutine 开始一个函数.
查看 YieldIns***ction, WaitForSeconds, WaitForFixedUpdate, Coroutine and MonoBehaviour.StartCoroutine 可以获得更多使用中断的信息.
来源:unity3d圣典 更多分享尽在web3D纳金网http://www.narkii.com/
——————————————————————————
Subsections 章节
[脚本章节]Scripting Overview 脚本概述
[脚本章节]Overview: Script compilation 脚本编译(高级)
[脚本章节]Overview: Performance Optimization 性能优化
[脚本章节]Overview: The most important classes 重要的类
[脚本章节]Overview : Writing Scripts in C# 使用C#书写脚本
[脚本章节]Overview: Coroutines & Yield 协同程序 & 中断
[脚本章节]Overview: Instantiate 实例
[脚本章节]Overview: Member Variables & Global Variables 成员变量 & 全局变量
[脚本章节]Overview: Vectors 向量
[脚本章节]Overview: Accessing Other Game Objects 访问其他游戏物体
[脚本章节]Overview: Accessing Other Components 访问其他组件
[脚本章节]Overview: Keeping Track of Time 记录时间
[脚本章节]Overview: Common Operations 常用操作
|
|