- 最后登录
- 2017-4-1
- 注册时间
- 2011-7-26
- 阅读权限
- 90
- 积分
- 24690
- 纳金币
- 24658
- 精华
- 6
|
概览:实例化
实例化,复制一个物体。包含所有附加的脚本和整个层次。它以你期望的方式保持引用。到外部物体引用的克隆层次将保持完好,在克隆层次上到物体的引用映射到克隆物体。
实例化是难以置信的快和非常有用的。因为最大化地使用它是必要的。
例如, 这里是一个小的脚本,当附加到一个带有碰撞器的刚体上时将销毁它自己并实例化一个爆炸物体。
var explosion : Transform;
// 当碰撞发生时销毁我们自己
// 并生成给一个爆炸预设
function OnCollisionEnter (){
Destroy (gameObject);
var theClonedExplosion : Transform;
theClonedExplosion = Instantiate(explosion, transform.position, transform.rotation);
}
实例化通常与预设一起使用
概览:Coroutines & Yield
在编写游戏代码的时候,常常需要处理一系列事件。这可能导致像下面的代码。
private var state = 0;
function Update()
{
if (state == 0) {
// 做步骤0
state = 1;
return;
}
if (state == 1) {
// 做步骤1
state = 2;
return;
}
// …
}
更方便的是使用yield语句。yield语句是一个特殊类型的返回,这个确保在下次调用时该函数继续从该yield语句之后执行。
while(***e) {
// 做步骤0
yield; //等待一帧
// 做步骤1
yield; //等待一帧
// ...
}
你也可以传递特定值给yield语句来延迟Update函数的执行,直到一个特定的事件发生。
// 做一些事情
yield WaitForSeconds(5.0); //等待5秒
//做更多事情…
可以叠加和连接coroutines。
这个例子执行Do,在调用之后立即继续。
Do ();
print ("This is printed immediately");
function Do ()
{
print("Do now");
yield WaitForSeconds (2);
print("Do 2 seconds later");
}
这个例子将执行Do并等待直到它完成,才继续执行自己。
//链接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");
}
任何事件处理句柄都可以是一个coroutine
注意你不能在Update或FixedUpdate内使用yield,但是你可以使用StartCoroutine来开始一个函数。
参考YieldIns***ction, WaitForSeconds, WaitForFixedUpdate, Coroutine and MonoBehaviour.StartCoroutine获取更多使用yield的信息。
|
|