Comment charger proprement les prefabs?

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
calypsomen
Messages : 45
Inscription : 26 Mars 2019 16:39

Comment charger proprement les prefabs?

Message par calypsomen » 21 Nov 2019 23:52

Bonjour,

Je poste ce message pour solliciter votre aide concernant le chargement de prefabs. Dans mon jeu, j'ai un éditeur de map qui nous permet de placer des objets sur la map. Je stocke donc ces objets dans mon script MapEditor.cs dans plusieurs tableaux de GameObject qui contiennent au total 5 000 objets (prefabs). Or, dès que je lance le jeu dans l'éditeur, celui-ci freeze/crash au chargement de la scène. De même lorsque je fais un build du jeu, la scène se lance mais la map charge mal, le terrain est totalement pixelisé etc. Malheureusement, je ne vois pas comment régler ce problème.. Comment puis-je procéder différemment pour charger un grand nombre de prefabs qu'on peut ensuite utilise dans l'éditeur de map ingame. D'autant plus que je souhaiterai augmenter le nombre d'objets donc si ça pose déjà problème à 5 000, je n'ose pas imaginer à 6 000 ou plus...

J'espère que vous pourrez m'aider,
merci beaucoup par avance !

Léo

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Comment charger proprement les prefabs?

Message par Max » 22 Nov 2019 08:40

Bonjour,

gérer plusieurs milliers d’objets n'est pas un soucis normalement, après tout dépend comment tu le fais.
calypsomen a écrit :
21 Nov 2019 23:52
Je stocke donc ces objets dans mon script MapEditor.cs dans plusieurs tableaux de GameObject qui contiennent au total 5 000 objets (prefabs). Or, dès que je lance le jeu dans l'éditeur, celui-ci freeze/crash au chargement de la scène.
Souvent ce genre de phénomène (freeze/crash) est lié à une fuite mémoire (memory leak), par exemple à cause d'une boucle mal contrôlée, etc... Pour éventuellement mieux comprendre ce qui se passe, poste par exemple ton script MapEditor.cs, cela aiderait certainement.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Comment charger proprement les prefabs?

Message par Alesk » 22 Nov 2019 12:44

Ce sont 5000 objets affichés en même temps ? Ou bien ce sont des objets simplement référencés dans ton script ?

calypsomen
Messages : 45
Inscription : 26 Mars 2019 16:39

Re: Comment charger proprement les prefabs?

Message par calypsomen » 22 Nov 2019 13:08

Je vous remercie pour vos réponses rapides !

La scène contient uniquement le terrain, un empty gameobject où le script MapEditor est attaché et le FPS controller. Les objets sont dans un tableau de GameObject, dans le script MapEditorItem qui est attaché à chaque bouton catégorie dans le canvas, comme visible sur le deuxième screen.

En désactivant le script MapEditor, j'obtiens ce résultat en jeu :

Image

Image


PS: Je précise que j'ai cet affichage depuis que j'ai ajouté tous les objets dans les tableaux de GameObject de chaque MapEditorItem. Avant je n'avais aucun soucis. Et en désactivant le script MapEditor et tous les MapEditorItem, le résultat reste le même

EDIT: Est-ce qu'un Resources.LoadAll pourrait palier au problème ? en chargeant tous les objets dans le void Start() de MapEditor ?

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Comment charger proprement les prefabs?

Message par Alesk » 22 Nov 2019 17:12

A mon avis, ça fait trop d'objets différents à charger d'un coup...

Le mieux est de ne les charger que lorsqu'ils sont nécessaires (donc quand tu veux les ajouter à la scène, ou les prévisualiser)

Il faut donc que tu gères à part une liste de tes prefabs, avec nom + chemin sur le disque (pour les charger à la volée, il faut les placer dans un dossier Resources)

Et ensuite tu utilises cette liste pour afficher ton sélecteur de prefab dans ton éditeur.
Là, tu ne charges que le prefab en cours de sélection dans la liste, et tu décharges s'il n'est pas utilisé dans ta map.

Ainsi tu n'auras en mémoire que les prefabs réellement nécessaires.

Sans ça, avec autant de prefabs, c'est le crash assuré, effectivement.

calypsomen
Messages : 45
Inscription : 26 Mars 2019 16:39

Re: Comment charger proprement les prefabs?

Message par calypsomen » 22 Nov 2019 23:47

Je comprends mieux!
Je vais faire des essais et je reviens vers vous si les tests ne sont pas concluants.
Je vous remercie pour votre aide!

Répondre

Revenir vers « Unity le logiciel »