我正试图在你可以刺伤敌人的地方制造一个游戏,敌人挣扎了大约一秒钟然后就死了。 (布娃娃);
我认为最好只显示我的脚本,你知道我的意思:
在on触发器中输入脚本:
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引用异常的错误,因为脚本找不到敌人。虽然它可以在触发器中输入。
基本上我的问题是:有没有办法解决这个错误,给它一个50帧延迟(所有其余的在StopBleeding
工作)?
或者,在Ragdoll被激活之前,我有什么方法可以简单地延迟一下吗?
提前致谢
你可以使用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();
}
由于您要专门询问Unity JS而不是C#,因此您将使用yield关键字。
print("foo");
yield WaitForSeconds (5.0); // waits for 5 seconds before executing the rest of the code
print("bar");
在刺伤时你可以查看敌人的物体但是将其保存在一个变量中而不是让敌人死亡。出血结束后,你不必抬头看敌人就可以在被救的人身上引发死亡。
另一个提示:不要计算帧数,因为帧可能具有不同的长度。从Time.deltaTime加起来,直到你达到让我们说2秒,然后触发死亡。
希望有所帮助。