2016-08-04 4 views
0

私のメソッドOnCollisionEnterに問題がありますが、なぜ正しく動作しないのか分かりません。ここでUnity3DでOnCollisionEnterを使用する方法がわからない

は私のコードは次のとおりです。

void OnCollisionEnter(Collision col){ 

    if (col.gameObject.name == "Bullet" && !bulletEnter) 
    { 
     Debug.Log(enemyLives); 
     enemyLives = enemyLives - 1; 

     if (enemyLives == 0) 
     { 
      Destroy(gameObject); 
      //Modificamos el GameManager e incrementamos el dinero que poseemos tras la muerte de Enemy. 
      GameManager.Manager.currentGold(enemyGold); 
     } 

     bulletEnter = true; 


    } 
    else if (col.gameObject.name == "OtherBullet" && !bulletEnter) { 
     enemyLives = enemyLives - 2; 
     if (enemyLives == 0) 
     { 
      Destroy(this.gameObject); 
      GameManager.Manager.currentGold(enemyGold); 
     } 

     bulletEnter = true; 

    } 
} 

//Cuando sale la colision lo ponemos a false, esto lo realizamos para que unicamente exista un choque con los coliders. 
void OnCollisionExit(Collision col) 
{ 
    bulletEnter = false; 
} 

あなたがそこに見ることができるように、弾丸はトリガーをアクティブにする必要がありますが、それは動作していない敵に達したとき、私はかどうかをチェックするために、「DEBUG.LOG」を使用していますそれはメソッドの中に入りますが、メソッドには入りません。

ここでは、私の検査官の画像も追加します。

enter image description here

+0

質問に投稿したこのスクリプトの名前はどこにあり、どこに添付されていますか? – Programmer

+0

名前がEnemy.csで、その名が "Enemy"というPrefabに添付されています。 – fiticida

+0

Debug.Log( "test");を 'if'文の外側で' OnCollisionEnter'の中に入れ、ログがあれば教えてください。 – Programmer

答えて

1

私はこのためのシンプルなシーンを作成し、すぐにあなたの問題を発見しました。チェックボックスをオフにしてくださいはEnemy GameObjectのBox Colliderにあります。 OnCollisionEnterが期待通りに呼び出されるはずです。

あなたのコードには、いくつかの他の改良:

.USE CompareTag代わりに名前によって、それをチェックします。 if (col.gameObject.name == "Bullet" && !bulletEnter)if (col.transform.CompareTag("Bullet") && !bulletEnter)に変更するだけです。

.Alsoは、あなたがに衝突したものが弾丸とさせていただきますので、これは良いロジックではありません

void OnCollisionExit(Collision col) 
{ 
    bulletEnter = false; 
} 

を持っていました。 bulletEnterfalseに設定する前に、OnCollisionEnterの機能のようにBulletかどうかを確認してください。これにより、今後他の問題が発生する可能性は低くなります。

+0

希望する動作に応じて、コードを「OnTriggerEnter」に変更します。 –

+0

ありがとう!それはうまく動作します! – fiticida

+0

@GunnarB。うん、彼はそれをすることができた。彼は何をしているかによって異なります。 – Programmer

関連する問題