1

敵を刺すことができるゲームを作ろうとしています。敵は約 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 exception のエラーが発生します。それができる間、私は引き金に入ることができます。

基本的に私の質問は次のとおりです。このエラーを修正して 50 フレームの遅延を与える方法はありますか (残りはすべてStopBleeding動作します)。

または、ラグドールがアクティブになる前に簡単な遅延を入れる方法はありますか?

前もって感謝します

4

3 に答える 3

0

刺すと、敵のオブジェクトを検索できますが、敵を死に至らしめる代わりに、変数に保存することができます。出血が終わった後、あなたは敵を調べる必要はなく、救われた敵の死を引き起こすことができます。

別のヒント:フレームの長さが異なる可能性があるため、フレームをカウントしないでください。Time.deltaTimeから2秒に達するまでの時間を合計してから、死をトリガーします。

お役に立てば幸いです。

于 2011-05-27T19:46:36.287 に答える
0

Since you're asking specifically about Unity JS and not C#, you'll use the yield keyword.

 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

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 に答える