2011-04-20 66 views
1

我试图制作一个游戏,在那里你可以刺伤敌人,敌人挣扎大约一秒钟后就会死亡。 (布娃娃);如何在查找游戏对象之前添加延迟

我认为最好只显示我的剧本,你知道我的意思:

在触发器输入脚本:

if(other.tag == "enemy"){ 
    other.transform.parent.gameObject.name = ("enemy" + currentEnemy); 
    print(other.name); 
    gameObject.Find("enemy" + currentEnemy).GetComponent("RagdollOrNot").MakeKinematicFalse(); 
    BloodParticle.emit = true; 
    Stabbed = true; 
    Character.GetComponent("MouseLook").enabled = false; 
    Character.GetComponent("CharacterMotor").enabled = false; 

} 

,并在更新功能:

if(Stabbed == true){ 
    StopBleeding ++; 
} 

if(StopBleeding > 50){ 
    Stabbed = false; 
    StopBleeding = 0; 
    currentEnemy ++; 
    Character.GetComponent("MouseLook").enabled = true; 
    Character.GetComponent("CharacterMotor").enabled = true; 
    BloodParticle.emit = false; 
} 

现在,当我的刀进入敌人的碰撞,敌人imediatly下降到地板上。 我试着把:

gameObject.Find("enemy" + currentEnemy).GetComponent("RagdollOrNot").MakeKinematicFalse(); 

在更新功能if(StopBleeding > 50)

如果我这样做,我会得到一个null reverance异常的错误,因为脚本cand找到了敌人。虽然它可以让我的触发器进入。

基本上我的问题是:有没有办法解决这个错误给它一个50帧的延迟(所有在StopBleeding作品)?

或者有没有什么方法可以在Ragdoll启动前进行简单的延迟?

在此先感谢

回答

0

可以使用StartCoroutine( “DelayDeath”);其中DelayDeath是方法的名称。见下文。

if(other.tag == "enemy"){ 
    other.transform.parent.gameObject.name = ("enemy" + currentEnemy); 
    print(other.name); 
    StartCoroutine("DelayDeath"); 
    BloodParticle.emit = true; 
    Stabbed = true; 
    Character.GetComponent("MouseLook").enabled = false; 
    Character.GetComponent("CharacterMotor").enabled = false; 

} 

private IEnumerator DelayDeath() 
{ 
    //this will return...and one second later re-enter and finish the method 
    yield return new WaitForSeconds(1.0f); 
    gameObject.Find("enemy" + currentEnemy).GetComponent("RagdollOrNot").MakeKinematicFalse(); 
} 
+0

请注意,这是C#语法。 Unity JS语法完全不需要使用Coroutines。查找Unity JS的“yield”关键字。 – scriptocalypse 2011-04-20 23:28:38

0

由于您要具体了解Unity JS而不是C#,因此您将使用yield关键字。

print("foo"); 
yield WaitForSeconds (5.0); // waits for 5 seconds before executing the rest of the code 
print("bar"); 
0

在刺伤时,您可以查看敌方物体,但将其保存在变量中而不是发出死亡的敌人。出血结束后,你不必查找敌人,并可以在保存的人身上触发死亡。

另一个提示:不要将帧计数为帧可能具有不同的长度。从Time.deltaTime加起来,直到达到让我们说2秒,然后触发死亡。

希望有所帮助。