[DB-AL] ennemi dans mario

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
yannou42800
Messages : 1
Inscription : 28 Jan 2019 18:53

[DB-AL] ennemi dans mario

Message par yannou42800 » 28 Jan 2019 18:58

Bonjour,
je débute sur unity et j'essais de créer un jeu 2D et la je suis bloqué car je doit créer un script pour que lorsque je saute sur l'ennemi il meurt pouvez-vous m'aider? Merci d'avance

Avatar de l’utilisateur
Sebela
Messages : 141
Inscription : 25 Juin 2014 21:39

Re: [DB-AL] ennemi dans mario

Message par Sebela » 29 Jan 2019 10:44

Bonjour Yannou,

Je te conseille de regarder du côté des Triggers. En gros tu peux positionner un BoxCollider qui couvre seulement la tête de ton ennemi et que tu set en mode trigger, puis tu peux utiliser la fonction :

Code : Tout sélectionner

void OnTriggerEnter(Collider other){ 
	if (other.gameObject.tag == "perso")
		Die();
}
Bon courage !

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: [DB-AL] ennemi dans mario

Message par EmileF » 29 Jan 2019 11:32

Bonjour,

Petit détail supplémentaire, puisque tu es en 2D, le BoxCollider sera surement un BoxCollider2D
et dans le code ce sera OnTriggerEnter2D.

Dans ton perso "perso" est le tag que tu dois lui affecter.

Die() est le code qui provoque les dommages à ton ennemi.

Salut
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Avatar de l’utilisateur
WilfreGD
Messages : 10
Inscription : 15 Jan 2019 17:13

Re: [DB-AL] ennemi dans mario

Message par WilfreGD » 07 Fév 2019 17:27

Tu peux aussi utiliser "OnCollisionEnter" pour détecter la collision sur l'ennemi de la même façon, mais tu pourras ainsi éviter d'utiliser BoxCollider comme un trigger et du coup ne pas perdre la collision solide avec l'ennemi.

Code : Tout sélectionner

void OnColliderEnter(Collision other){ 
	if (other.gameObject.tag == "perso")
	{
		if(other.transform.position.y > transform.position.y)
			Die();
		else
			//Tue le joueur
	}
}
Ici tu peux garder le même exemple mais cette fois ci en vérifiant que le joueur soit bien au dessus de l'ennemi.
Donc, si il y a collision entre le joueur et l'ennemi mais que le joueur est au dessus, l'ennemi meurt. Sinon, c'est le joueur qui meurt.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] ennemi dans mario

Message par boubouk50 » 07 Fév 2019 18:05

Il y a plusieurs façon de procéder, selon l'angle de vue (code / détection / collision / repère)
par exemple, tu pourrais encapsuler l'ennemi par 4 triggers: droite/gauche/dessus/dessous. Certains déclenchent la mort de l'ennemi, d'autres celle du joueur.
Tu pourrais aussi encapsuler le joueur par 4 triggers: droite/gauche/dessus/dessous. Certains déclenchent la mort du joueur, d'autres celle de l'ennemi. (je choisirais cette option)

La seconde à l'avantage de ne gérer que les colliders du joueur alors que l'ennemi n'en a qu'un. Cela rend plus simple la configuration. Qui plus est, si un ennemi se fait toucher par une boule de feu par exemple, on se fiche de savoir quel collider est touché. C'est au personnage ou à la-dite boule de feu de le savoir.
C'est un simple changement de repère. Au lieu de direle joueur a touché la tête de l'ennemi tu dirais les pieds du joueur ont touché l'ennemi. Tout de suite, ça simplifie le rapport. Seul le joueur est configuré spécialement au lieu de tous les ennemis. Et ça évite des tests en code:
Si les pieds touchent l'ennemi alors l'ennemi meurt sinon joueur meurt/rapetisse.
Si la boule de feu touche l'ennemi alors il meurt.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
WilfreGD
Messages : 10
Inscription : 15 Jan 2019 17:13

Re: [DB-AL] ennemi dans mario

Message par WilfreGD » 07 Fév 2019 20:39

boubouk50 a écrit :
07 Fév 2019 18:05
C'est un simple changement de repère.
Et de performances, entre un joueur qui vérifie si un ennemi est présent et 200 ennemis qui vérifient si un joueur est présent, le choix est vite fait. Ça change beaucoup de choses au jeu et a la fin le code est plus petit et plus simple a gérer. Les ennemis ne peuvent que se déplacer et mourir sans plus de complexité, le joueur peut s'occuper du reste. On réduit les références et les Update.

Répondre

Revenir vers « (C#) CSharp »