2017-09-15 7 views
0

別の衝突が起こらない:十分な速さのオブジェクトを破壊し、弾丸が敵にだスクリプトの一部だ敵に当たった場合、私は検出を持って

void OnTriggerEnter (Collider other) 
{ 
    if (other.tag == "Bullet") { 
     Destroy (other); // or Destroy (other, 0); 
    } 
} 

弾丸が敵に当たったときに問題があり、その1回以上ヒットしたかのように(100から)0に低下します(Debug.logでも確認しました)。

弾丸を速く破壊して再びトリガーしないようにする方法はありますか?

また、この検出スクリプトを敵や弾に載せるべきですか?

+0

Destroy(other)ではなくDestroy(other.gameObject)を使用します。 otherは、実際のgameObject自体ではなく、単にコライダーの参照です。 – deepankar

+0

'TakeDamage'機能を投稿してください。また、 'Debug.Log'を使って' OnTriggerEnter'が何回呼び出されたかを調べます。 @deepankarそれは問題の可能性が高いので答えとして投稿してください – Programmer

+0

@Programmer 'TakeDamage'は本当に興味深いものではありません。私はその呼び出しを削除しても同じことが起こります。私はdebug.logを追加し、 'Destroy(other.gameObject) 'でも2回入力します。 – shinzou

答えて

3

Destroy(other)の代わりにDestroy(other.gameObject)を使用してください。 otherは、実際のgameObject自体ではなく、単にコライダーの参照です。

また、タグを==と比較する代わりに、良い例としては、other.CompareTag(String tagName)を使用してください。そのメモリを消費します。

+0

それでも2回入力します... – shinzou

+0

弾丸オブジェクトに2つのコライダーを付けましたか?または、敵に1発の弾丸しか当たっていないと確信していますか? InstanceIdを印刷して、それらが同じか違うかどうかを確認することができます。 – deepankar

+0

uniqueIDを取得するためにcollider.gameObject.GetInstanceID()を使用 – deepankar

関連する問題