0
votes

Unity gèle lors de la destruction de tous les enfants

J'ai une brosse de peinture qui écrit sur l'écran en instanciant de nombreux points Sprite dans un parent gameObject .

Je veux effacer toutes les points de Sprite avec un clic de bouton. Il pourrait y avoir jusqu'à 50 mais quand je les efforcez que l'unité gèle. Le code semble correct. xxx


4 commentaires

Combien de temps ça gèle?


Sont paintdrawing et chagnard le même noeud?


Désolé, j'ai commis une erreur postant la question. Il devrait être tout paintdrawing


Pas une réponse directe à votre question, mais vous voudrez peut-être utiliser la mise en commun des objets, créer et détruire de nombreux objets par image est un évier de performance de toute façon. Unity3d.com/de/learn/Tutorials/topics/scripting/Object- Pooli Ng


3 Réponses :


2
votes

Vous détruisez les enfants de Chalkwriting, mais vous vérifiez le compte sur la painte. Donc, vous avez une boucle infinie.


1 commentaires

Désolé, j'ai commis une erreur postant la question. J'ai mis à jour le code.



1
votes

Je suppose que l'enfant ne soit pas mis à jour lorsque vous en détruisez un. Personnellement, j'essaie de rester à l'écart de la boucle qui pourrait continuer infiniment dans l'unité. J'essaierais quelque chose comme ceci: XXX


0 commentaires

2
votes

Les objets ne sont pas détruits immédiatement, l'unité attend au moins jusqu'à la fin de la boucle de mise à jour actuelle.

objet.destroy : L'objet obj sera détruit maintenant ou si Un temps est spécifié T secondes à partir de maintenant. Si Obj est un composant, il supprimera le composant du jeuObject et la détruirea. Si OBJ est un gamebject, il détruira le GameObject, tous ses composants et tout transformeront les enfants du jeuObject. La destruction d'objet réelle est toujours retardée jusqu'à la boucle de mise à jour actuelle, mais sera toujours effectuée avant de rendu.

Vous pouvez utiliser objet.destroyimmediate , mais ça va causer des retards aussi.

La meilleure pratique consiste à désactiver l'objet détruisant précédemment: xxx

S'il s'agit d'une activité récente, vous pouvez également envisager de réutiliser la réutilisation de la réutilisation. GameObjects avec Piscine .

Modifier : Code fixe et typos


1 commentaires

Merci pour ça. Tout a du sens. Malheureusement, il ne pénètre pas dans le pour boucle. Debug.log (Enfants.Length); me donne 27 Donc, il s'agit des enfants. Si je mets un `debug.log (" à l'intérieur pour "); Je ne reçois rien