J'ai assigné un projectile à mon ennemi qui tire sur le joueur, et ce projectile a un collider2d que j'ai marqué comme déclencheur. Et il ne semble pas reconnaître mon joueur collisionneur. Le projectile traverse mon lecteur.
void OnTriggerEnter2d (Collider2D other)
{
Player _player = other.GetComponent<Player>();
if (_player != null)
_player.ChangeHealth(1);
Destroy(gameObject);
}
Composants de mon lecteur:
3 Réponses :
Sans voir votre code, je ferai l'hypothèse que votre objet 'player' n'a pas de Rigidbody2D attaché.
Je vous suggère fortement de lire les documents sur les collisionneurs et leur interaction avec chacun autre mais comme un très bref résumé; Pour que des collisions se produisent entre deux objets, au moins l'un d'entre eux doit avoir un Rigidbody ou Rigidbody2D attaché à eux.
Attachez un composant Rigidbody2D à votre lecteur (vous voudrez peut-être le marquer comme cinématique pour que les collisions n'affectent pas sa position / rotation, etc.) et il devrait alors fonctionner comme prévu. p>
J'ai déjà un composant Rigidbody2D attaché à mon lecteur et il est marqué comme cinématique. J'ai ajouté une capture d'écran des composants de mon lecteur dans ma question.
Je vois, pouvez-vous confirmer que vous avez mis le OnTriggerEnter2d sur un script qui se trouve sur la puce GameObject ? À l'avenir, veuillez essayer de nous donner autant d'informations que possible afin que nous n'ayons pas besoin d'en demander davantage.
Je changerais votre code dans OnTriggerEnter2D en ceci:
void OnTriggerEnter2D (Collider2D other)
{
// In your scene you have just two objects, so not really required now
// may be interesting for you when you have more objects there
if(other.gameObject.CompareTag("Player"))
{
//Here add .gameObject to refer the GameObject which contains the collider2D
Player _player = other.gameObject.GetComponent<Player>();
if (_player != null)
_player.ChangeHealth(1);
Destroy(gameObject);
}
}
En plus de cela. Vous avez ajouté une image des composants dans GameObject Player. Ajoutez la même chose pour la puce, ou au moins vérifiez ces deux choses:
Il y a une petite faute de frappe dans le nom de votre méthode. Le "d" dans "2d" doit être en majuscule.
onTriggerEnter2d ---> onTriggerEnter2D
void OnTriggerEnter2D (Collider2D other)
{
Player _player = other.GetComponent<Player>();
if (_player != null)
_player.ChangeHealth(1);
Destroy(gameObject);
}
p>
Essayez d'écrire un message de débogage dans OnTriggerEnter2d (Collider2D autre) pour vous assurer que cela n'est jamais déclenché