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;
}

现在,当我的刀进入敌人的碰撞中时,敌人立即倒在地上。我试着把:

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

在更新函数中if(StopBleeding > 50)

如果我这样做,我会收到 Null reverance 异常的错误,因为脚本可以找到敌人。虽然它可以在触发器中输入。

基本上我的问题是:有没有办法解决这个错误,让它延迟 50 帧(其余的都在StopBleeding工作中)?

或者有什么办法可以在布娃娃被激活之前简单地延迟一下?

提前致谢

4

3 回答 3

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();
}
于 2011-04-20T23:25:27.550 回答
0

由于您专门询问 Unity JS 而不是 C#,因此您将使用 yield 关键字。

 print("foo");
 yield WaitForSeconds (5.0); // waits for 5 seconds before executing the rest of the code
 print("bar");
于 2011-04-20T23:30:56.577 回答
0

在刺伤时,您可以查找敌人对象,但将其保存在变量中,而不是让敌人死亡。流血结束后,您不必查找敌人,并且可以触发已保存的敌人的死亡。

另一个提示:不要计算帧,因为帧的长度可能不同。将 Time.deltaTime 的时间加起来,直到达到 2 秒,然后触发死亡。

希望有帮助。

于 2011-05-27T19:46:36.287 回答