Mon Workflow avec Unity3D

Lorsque l’on commence à utiliser Unity3D on ne se soucis pas trop de la place des assets, on en met un peu partout puis on restructure après. Le soucis est qu’on se retrouve rapidement avec un projet qui a une taille considérable et qui est difficilement maintenable.

Je travail actuellement sur un projet au doux nom de code « Deep Void Station« , nom de code car en réalité le prototype que je développe n’a plus grand chose à voir avec le jeu que j’ai créé pour le #7dfps ! C’est un mélange de TPS et de combat/simulation spatiale (ma référence principale étant le sublime Star Wars : Shadows of the Empire). Typiquement il y a des phases de jeu sur des planètes, dans tes stations spatiale, mais aussi dans l’espace aux commandes d’un vaisseau.

La problématique

picard-riker-facepalmComme je ne suis pas un artiste (au sens graphique), j’achète des ressources sur l’Asset Store (plugin, textures) et du coup avec tout ça j’étais passé à un dossier de presque 2 go… J’avais un tas d’assets qui ne me servaient plus à rien et qui étaient utilisées à la base pour des tests. Mais comment être sur de les trier correctement et que ça n’altère pas le projet ? Effectivement si on supprime une material qu’on pense non utilisée par exemple, et qu’elle l’est, le résultat peut être déprimant. De même pour les scripts, mais ça c’est encore une autre histoire.

Restructuration

Je vais vous exprimer dans ces quelques lignes ma manière de travailler. J’ai un dossier composé de plusieurs sous dossiers :

  1. Deep Void Station
  2. LevelDesign
  3. SpaceDesign
  4. Sandbox
  5. Packages

Le dossier Deep Void Station contient le jeu que je développe avec des assets qui doivent être finales, ou presque. Ce même dossier est versionné avec git et utilise un fichier .gitignore très restrictif. Je ne conserve que les scripts, les shaders, les fichiers texte et les fichiers de configuration (Input par exemple). Tout ce qui est prefab, materials ou autre n’est pas versionné mais éventuellement archivé de temps en temps dans une tarball.

Le dossier LeveDesign me sert à créer les niveaux qui n’ont pas de rapport avec l’espace. Dedans j’utilise les plugins ProBuilder et ProGrid (deux plugins fantastiques pour créer des niveaux rapidement et facilement dans l’éditeur d’Unity) et j’ai toutes mes assets graphiques (là on peut se lâcher). Quand je suis satisfait par un niveau et que je veux l’intégrer dans mon projet final, je l’exporte en package unity pour ensuite l’importer dans le projet final. Cela me permet de n’utiliser que les textures dont j’ai besoin car quand on exporte un prefab ou autre il n’y a que les dépendances utilisées qui sont exportées.

Le dossier SpaceDesign sert quant à lui à créer les niveaux dans l’espace. Il dispose du volumineux plugin SpaceUnity. Le fonctionnement est le même que pour le projet LevelDesign.

Le dossier SandBox me sert à tester mes scripts. Grossièrement j’ai un grand terrain avec quelques éléments dessus (des PNJ, des objets, etc…) et c’est là que je procède à tous les réglages que j’ai à faire (physique, test d’un concept, etc…).

Enfin le dossier Package contient les fichiers de plugins brutes (dés qu’ils sont téléchargés je les exportent en package) ainsi que mes exports perso qui sont nommés par version.

Et vous comment procédez vous ? J’avoue que ce n’est pas évident comme ça mais on s’y fait vite et c’est au final beaucoup moins prise de tête. Il n’y a rien de plus déprimant que de supprimer la mauvaise ressource et d’avoir un niveau totalement cassé.