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
Comment charger proprement les prefabs?
-
- Messages : 45
- Inscription : 26 Mars 2019 16:39
Re: Comment charger proprement les prefabs?
Bonjour,
gérer plusieurs milliers d’objets n'est pas un soucis normalement, après tout dépend comment tu le fais.
gérer plusieurs milliers d’objets n'est pas un soucis normalement, après tout dépend comment tu le fais.
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.calypsomen a écrit : ↑21 Nov 2019 23:52Je 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.
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
Re: Comment charger proprement les prefabs?
Ce sont 5000 objets affichés en même temps ? Ou bien ce sont des objets simplement référencés dans ton script ?
-
- Messages : 45
- Inscription : 26 Mars 2019 16:39
Re: Comment charger proprement les prefabs?
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 :
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 ?
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 :
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 ?
Re: Comment charger proprement les prefabs?
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.
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.
-
- Messages : 45
- Inscription : 26 Mars 2019 16:39
Re: Comment charger proprement les prefabs?
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!
Je vais faire des essais et je reviens vers vous si les tests ne sont pas concluants.
Je vous remercie pour votre aide!