[RESOLU] [MY-AL] Problème avec Destroy sur enfants

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
Avatar de l’utilisateur
freepl
Messages : 884
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

[RESOLU] [MY-AL] Problème avec Destroy sur enfants

Message par freepl » 21 Nov 2019 09:11

Bonjour

J'ai un empty ( Elizabeth pieton2), parent d'un personnage( corps elizabeth) , de 2 cameras et d'une sphère.

empty Elizabeth pieton2 tag PIETON
enfant corps elizabeth tag PIETON
enfants les 2 caméras et la sphère untagged.

Quand l'empty touche un objet avec ce script

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class TimerDestruction : MonoBehaviour {
	/* timer  pour que le personnage arrive , attende quelque secondes puis disparaisse 
	 * utilisé pour le pmr qui se déplace
	 * arrive à sa zone d'atente du bus
	 * animation d'attente lancée
	 * puis à l'arrivée du bus disparait
	 * */


	public IEnumerator OnTriggerEnter (Collider other) {  

		 // destruction du vl
		yield return new WaitForSeconds(5); // attente 5sec puis destruction du personnage
		if (other.transform.FindChild("Camera   PRINCIPALE")) {
			other.transform.FindChild("Camera   PRINCIPALE").GetComponent<CameraScript>().enabled = true;
			GameObject.Find ("GestionCamera").GetComponent<GestionSelectionVl>().retroviseur.SetActive (false);
			GameObject.Find ("GestionCamera").GetComponent<GestionSelectionVl>().vl = null;
			other.transform.FindChild("Camera   PRINCIPALE").SetParent(GameObject.Find ("GestionCamera").transform);
			
		}
			Destroy(other.gameObject);
		
	}
}


tout devrait disparaître.
Mais il reste quand même les 2 caméras ainsi que la sphère.
J'ai essayé de trouver sur le guide des exemple de destroy mais le site précise qu'il n'y a pas d'exemple pour Destroy en C#.
D'où vient mon erreur ?
Merci
Dernière édition par freepl le 21 Nov 2019 10:31, édité 1 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5175
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Problème avec Destroy sur enfants

Message par boubouk50 » 21 Nov 2019 09:37

Je ne sais pas où tu cherches ni comment tu le cherches, mais en tapant: Unity + Destroy + children, tu tombes directement sur cette page: https://answers.unity.com/questions/611 ... bject.html.
Allez, pour le fun, je l'ai tapé en français: Unity + Destroy + enfant: https://upln.fr/detruire-un-gameobject-avec-unity3d/
D'après le second lien, il est précisé que les enfants sont également détruits lors du Destroy du parent.
Moi, ce qui me turlupine, c'est l'utilisation d'un IEnumerator pour la fonction OnTriggerEnter (). Et pourquoi t'embêtes-tu à faire des modifications à cette hiérarchie d'objets si c'est pour la détruire ensuite?
La fonction Destroy () intègre un timer pour repousser la destruction.

Code : Tout sélectionner

private void OnTriggerEnter (Collider other) {  
	 // destruction du vl dans 5 secondes
	Destroy(other.gameObject, 5f);
}
Par contre, je considère que le other est forcément l'empty d'Elisabeth, sinon il faut le tester d'abord.
"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
Alesk
Messages : 2214
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Problème avec Destroy sur enfants

Message par Alesk » 21 Nov 2019 10:02

Détruire des enfants, c'est mal ! :nonon:

Avatar de l’utilisateur
freepl
Messages : 884
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: Problème avec Destroy sur enfants

Message par freepl » 21 Nov 2019 10:04

Résolu en mettant le capsule collider directement sur l'empty et non le perso

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5175
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Problème avec Destroy sur enfants

Message par boubouk50 » 21 Nov 2019 10:31

Alesk a écrit :
21 Nov 2019 10:02
Détruire des enfants, c'est mal ! :nonon:
Les envoyer à l'église, c'est mieux! Wait... :?

Le code détruit l'objet other 5 secondes après la collision. Mais je ne sais pas qui est other. Il pourrait être autre chose que le Empty Elizabeth. Si c'est une possibilité, il faut donc tester other pour déterminer qui il est, pour ne pas détruire autre chose.

Par curiosité, sur quel objet est appliqué ce script? Le collider est bien sur l'objet parent et pas sur un enfant?
"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
freepl
Messages : 884
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: [RESOLU] [MY-AL] Problème avec Destroy sur enfants

Message par freepl » 21 Nov 2019 11:06

Oups!

J'avais le post ouvert en double quand je l'ai noté résolu :roll:
Le capsule collider était sur le corps en enfant.
Je l'ai mis sur l'empty et cela fonctionne.
Merci aussi pour le délai sur le Destroy :)

Répondre

Revenir vers « (C#) CSharp »