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