[DB-AL], supprimer un gameobject instancié

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
Crazygle
Messages : 9
Inscription : 11 Déc 2016 21:02

[DB-AL], supprimer un gameobject instancié

Message par Crazygle » 08 Fév 2017 12:05

Bonjour à tous,

Dans ma scène, j'ai des gameobject avec une texture de chiffres comme 1, 2, 3... et quand j appuie sur la touche du clavier "keypad1", j'ai le gameobject avec une texture 1 qui se fait cloner par une fonction instantiate à la position d 'un autre gameobject que je peux déplacer. Maintenant, si j'appuie sur une touche du clavier, je voudrais pouvoir supprimer tous les gameobject qui ont une texture de chiffres et qui sont également à la position de mon autre gameobject que je peux déplacer.
voici mon code :

Code : Tout sélectionner

 if (Input.GetKeyDown (KeyCode.Keypad1)) {
			clone =	Instantiate (un, transform.position, transform.rotation) as GameObject;
			}
			
merci d 'avance !

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

Re: [DB-AL], supprimer un gameobject instancié

Message par boubouk50 » 08 Fév 2017 12:36

Salut Crazygle,

Encore une fois, ta demande est limite. Tu nous donnes le code qui fonctionne pour l'instanciation, mais rien de ce que tu as cherché pour la destruction.
La condition pour le touche de clavier tu la connais (elle est dans ton code), la destruction d'un GameObject, tu sais faire aussi (dans ton précédent post). Il ne te manque que savoir quels objets supprimer au final? Accéder à une position, tu sais faire, comparer deux positions peut-être pas mais c'est enfantin, et faire une condition tu sais faire.
Donc, remue toi un peu les méninges pour pondre un premier script (même s'il ne fonctionne pas) et ensuite, je t'aiderai pour ton script.

Pour l'instant, c'est la vraie aide que je peux te fournir, on ne va pas à chaque fois faire les scripts pour toi. (Ce qui a été le cas sur tes 2 autres demandes)
"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

Crazygle
Messages : 9
Inscription : 11 Déc 2016 21:02

Re: [DB-AL], supprimer un gameobject instancié

Message par Crazygle » 08 Fév 2017 22:51

Re,

Tout d'abord, merci pour ta réponse :-D .
Et ensuite, j 'ai donc essayé de faire ce script :

Code : Tout sélectionner

if (Input.GetKeyDown (KeyCode.Keypad1)) {
			cloneun = Instantiate (un, transform.position, transform.rotation) as GameObject;
				
			if (clonedeux.transform.position == transform.position) {
				DestroyImmediate (clonedeux);
			}
			if (clonetrois.transform.position == transform.position) {
				DestroyImmediate (clonetrois);
			}
		}


		if (Input.GetKeyDown (KeyCode.Keypad2)) {
			clonedeux = Instantiate (deux, transform.position, transform.rotation) as GameObject;
			}

			

		if (Input.GetKeyDown (KeyCode.Keypad3)) {
			clonetrois = Instantiate (trois, transform.position, transform.rotation) as GameObject;
			}
	
(Ce script est attaché au gameobject que je peux déplacé)
Mais malheureusement, quand j 'appuie sur "Keypad1", ca instancie bien le gameobject "cloneun"mais ca détruit 1fois sur deux à peu près "clonedeux" et"clonetrois". De plus, parfois, le jeu se met en pause tout seul lorceque j appuie sur "keypad1".
Ah et en fait, j'ai enlevé l 'idée de devoir appuyer sur delete par exemple pour detruire les gameobject. C'est plus facile quand on est dans le jeu/logiciel. (C' est un genre d'éditeur de tablature que je fait).

Codialement,

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

Re: [DB-AL], supprimer un gameobject instancié

Message par boubouk50 » 09 Fév 2017 11:01

Crazygle a écrit :Mais malheureusement, quand j 'appuie sur "Keypad1", ca instancie bien le gameobject "cloneun"mais ca détruit 1fois sur deux à peu près "clonedeux" et"clonetrois".
Si la destruction n'est pas effective tout le temps c'est parce que la condition n'est pas remplie ou bien que clonedeux ou clonetrois ne soient pas destructibles (mauvais affectation).
Utilise des Debug.Log (string message) pour connaitre exactement le cheminement de ton script, à savoir, si ta condition est remplie ou non, et ce qu'il y a dans clonedeux et clonetrois.
Si la condition n'est pas remplie, c'est que les positions ne sont pas exactement les mêmes (les comparaisons de float est risquée), utilise une autre condition, notamment avec un delta pour que 2 positions soient considérées comme identiques à X près.
Exemple: http://stackoverflow.com/questions/3874 ... or-c-sharp
Crazygle a écrit :De plus, parfois, le jeu se met en pause tout seul lorceque j appuie sur "keypad1".
Là, ce n'est pas normal par rapport à ce code. Qu'entends-tu par pause? ça freeze? le timescale passe à 0? ça lance un menu pause?
Tu dois avoir quelque part ailleurs une autre affectation pour ce numkey, en code ou dans l'Input Manager.
"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
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: [DB-AL], supprimer un gameobject instancié

Message par Iwa » 09 Fév 2017 11:06

Salut à toi,

J'ai expérimenté ça pas plus tard qu'hier, met Destroy à la place de DestroyImmediate si tu es en mode play et tout ira pour le mieux :D

Arrggg : j'ai été doublée par le double bouk ^^
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

Re: [DB-AL], supprimer un gameobject instancié

Message par Farstone » 10 Fév 2017 13:44

Iwa a écrit :Salut à toi,

J'ai expérimenté ça pas plus tard qu'hier, met Destroy à la place de DestroyImmediate si tu es en mode play et tout ira pour le mieux :D

Arrggg : j'ai été doublée par le double bouk ^^
Si je ne dit pas de bêtises, Destroy détruit a la fin de la fonction, et DestroyImmediate détruit instantanément sans effectuer les prochaines ligne d'une fonction, donc dans sont cas je ne suis pas sur que sa fonctionne car il n'a rien après sa ligne, après sa vaux le coup d'essayer.
Crazygle a écrit :
Mais malheureusement, quand j 'appuie sur "Keypad1", ca instancie bien le gameobject "cloneun"mais ca détruit 1fois sur deux

Codialement,
Quand tu dit qu'il ce détruit 1 fois sur 2, est ce que tu bouge le GameObject entre temps ou alors la scène reste la même ?
Sinon je ne sait pas dans quel situation les 2 GameObject peuvent avoir la même position mais sa voudrait dire le même axe X,Y,Z qui n'est pas très fiable, comme a dit boubouk utilise des conditions qui sont faite pour définir si un objet et par dessus un autre, sont lien devrait "probablement" régler ton problème.

Avatar de l’utilisateur
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: [DB-AL], supprimer un gameobject instancié

Message par Iwa » 13 Fév 2017 11:15

Salut Twiixy,

https://docs.unity3d.com/ScriptReferenc ... diate.html

https://docs.unity3d.com/ScriptReferenc ... stroy.html


Désolée de devoir t'annoncer que tu dis des bêtises :langue3:, DestroyImmediate n'est pas une méthode extrêmement recommandé dans tout les cas et Destroy est la fonction normalement à utilisé. Par contre, même si ils précisent dans la doc que l'objet est supprimé tout de suite, la vérité et un peu différente, l'objet est supprimé à la frame suivante, mais rien que l'oeil ne puisse vraiment ressentir.

Le fait d'utiliser DestroyImmediate en Game alors que c'est pas prévu pour ça fait une suppression un peu étrange (chose que j'ai expérimenté il y a peu comme dit dans mon précédent post) et qui me supprimais comme ça lui chantait un nombre random de mes objets, parfois tous. Bref en me documentant de nouveau j'ai trouvé que le soucis venait bien de mon utilisation erroné car comme toi au départ je pensais que le Immediate se faisait tout de suite et sans quartier, mais c'est plus compliqué ;)
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

Répondre

Revenir vers « (C#) CSharp »