質問: Enemyタグを持つもの同士の接触で困っています。 Enemyはプレファブにして、別のスクリプトから Instantiate(Enemy, new Vector3(0.0f, 0.0f, 0.0f), Quaternion.identity); クローンとして呼び出しています。 下のコードではHitが2回呼ばれます。1度だけ呼ぶ方法はないでしょうか? よろしくお願いいたします。 ``` private void OnCollisionEnter2D(Collision2D col) { if(col.gameObject.CompareTag("Enemy")) { Debug.Log("hit"); //2回 "hit" 判定します。 Destroy(gameObject); //2体同時に消えます。 } } ```
回答: 「敵AがBとヒットした」「敵BがAとヒットした」という理由で2回呼ばれています 現在のソースでは、「敵AがBとヒットした」という処理として、 Destory(gameObject)で、敵Aのみを消滅させ、敵Bはまだ消滅していません 2回呼ばれるおかげで、敵Bも消滅する処理になっていると思います どうしても、1回しか呼んでほしくないなら、どっちかの処理のみで実行されるようにするといいと思います ``` private void OnCollisionEnter2D(Collision2D col) { if(col.gameObject.CompareTag("Enemy") && gameObject.GetInstanceID() < col.gameObject.GetInstanceID()) { Debug.Log("hit"); } } ```