Unity - Pièges du développement de jeux 2D

Il y a beaucoup d'articles sur Unity pour le nouveau venu, mais je ne veux pas me répéter, mais je veux partager mon expérience dans le développement du premier jeu et, plus spécifiquement, parler de ce que j'ai trébuché. Cela vous donnera à tous, chers développeurs, une chance de vous protéger à l'avenir contre les travaux imprévus et la perte de temps. J'espère que ce matériel sera lu par les développeurs Unity afin d'améliorer leur produit.

image

Attention , sous les captures d'écran de chat 16+ !

Étant donné que la plupart d'entre nous sont des techniciens, je vais tout mettre sur les étagères, à la mode, et essayer de présenter le matériel aussi brièvement que possible, de manière concise et sans eau.

Défi


Je voulais écrire quelque chose du Nouvel An, simple à comprendre et à gérer. À la suite de la discussion avec le public cible (mon enfant), il a été décidé que le jeu serait comme ceci:

  • 2D (car il est plus pratique de jouer à des jeux 2D sur le téléphone)
  • Contrôle à un doigt (parfois au maximum deux)
  • Time killer (juste un coup pour ne pas forcer le cerveau)
  • Système de réalisation (pour le rendre au moins un peu intéressant pour continuer)
  • Dessin animé
  • Belle musique
  • Sans internet
  • Android (facilité d'installation des fichiers apk de test)


Tout cela a abouti à l'idée " Satan Santa tire des cerfs qui interfèrent avec son sac . "

mortel klaus

Et puis tout a commencé ...

1. Bibliothèques Android tierces


Problème: j'ai passé deux jours à trouver le bon SDK, JDK, NDK et à faire fonctionner Unity avec eux. Sur ma machine avant Unity, le SDK du studio Android était déjà présent, mais ça n'a pas commencé avec eux, j'ai dû chercher autre chose, installer, essayer, chercher à nouveau ... deux jours ...

Suggestion d'amélioration: ce serait bien si le sdk nécessaire des dernières versions était installé automatiquement lors de l'installation de Unity, et si quelqu'un a besoin de rétrograder ou de mettre à niveau - alors laissez celui-ci se configurer lui-même, avec des stylos.

image

2. Graphiques vectoriels


Problème: L' unité prête à l'emploi ne comprend pas le SVG . Même toutes sortes de petits frameworks JS comme Paper.js fonctionnent simplement intelligemment avec un vecteur, mais pas un éléphant comme Unity.

Solution: j'ai installé un package bêta qui semble lire SVG, mais à la fin il le convertit en raster. Acceptable, mais gênant, Unité!

3. Plateforme 2D


image

Problème: comme vous pouvez le voir sur la capture d'écran, il y a du terrain et il y a une boule de neige dessus. Et c'est aussi Mesh et Polygon Collider . C'est-à-dire que c'est une surface qui interagit avec les objets et qui peut être modifiée dans l'éditeur. Ainsi, dans la version actuelle d'Unity, aucun outil standard ne peut être utilisé pour simuler cela.

Solution:
  1. Vous pouvez dessiner un raster avec alpha (moins - éditer ce puits est assez gênant)
  2. Vous pouvez acheter un plugin qui fait cela (moins - dépenser de l'argent)
  3. Vous pouvez écrire le plugin vous-même (moins - prendre beaucoup de temps à comprendre, prendre beaucoup de temps à écrire)

J'ai choisi un moyen long mais gratuit;) Si quelqu'un a besoin d'un tel plugin - écrire, partager, dire comment l'utiliser, ça ne me dérange pas :)

Au fait, j'ai regardé la démo de la nouvelle version bêta d'Unity, il semble qu'une telle chose va apparaître hors de la boîte! Merci pour ça, mes amis!

Oui, j'ajouterais un panneau pour créer rapidement des primitives 2D, des cercles là, des carrés ... sinon ils n'existent tout simplement pas, eh bien, ou vous devez aller dans le canal d'actifs et le rechercher.

4. Rotation et Quaternion


Problème: un système très complexe de positionnement et de rotation 3D, inutile dans les jeux 2D.

Solution: il suffit de le comprendre et de l'accepter, car un jeu 2D est un jeu 3D avec la coordonnée Z = 0. Mais ce serait bien de simplifier ce système en mode 2D, camarades;)

J'ai tué beaucoup de temps et j'ai presque cassé mon cerveau, essayant de faire pivoter l'objet dans la bonne direction à l'angle droit, par rapport à un autre objet, quand je viens d'écrire player.a = 45 dans un autre moteur ; Oui, et de nombreuses méthodes évidentes dans la version actuelle sont dépréciées.

5. Débogage


Problème: pour nous, débutants, la possibilité de débogage n'est disponible que sous forme de sortie de la valeur variable sur la console en utilisant la méthode print () . Les pauses à part entière sont le lot de ceux qui paient. Corrigez-moi ici, si je me trompe, mais je ne pouvais pas configurer Visual Studio pour le débogage de quelque manière que ce soit, bien que j'aie trouvé une vidéo montrant que vous n'aviez pas besoin de configurer quoi que ce soit, cela devrait fonctionner tout seul. Il a conclu que le débogage est disponible dans les versions payantes.

Solution: J'utilise simplement print () ... et je comprends que le débogage d'un projet complexe sera un facteur décisif pour l'acquisition d'une version payante d'Unity. Les commerçants de l'entreprise triste respect :(

Résolu! grâce à l'invite Leopotam, j'ai installé un package supplémentaire pour le studio, le bouton «Attach to Unity debugger» est apparu.

6. Appuyez et cliquez, glissez et déplacez


Problème: malgré la commodité du système d'entrée utilisateur intégré, la simplicité du traitement des bandes simples ordinaires, des clics et des balayages n'est pas suffisante. Je voudrais utiliser une méthode qui retournera les coordonnées d'un simple clic / toucher pour différents types d'appareils: un toucher et un bureau avec une souris, par exemple.

Solution: j'ai dû écrire ma couche de classe et encapsuler les événements nécessaires.

Je vais peut-être laisser un autre commentaire concernant le système de gestion. Un grand merci aux développeurs Unity pour l'entrée universelle, mais pour les appareils tactiles, je voudrais également des commandes universelles. Par exemple, faites glisser vers le haut - liez à Jump, visualisez la croix et les boutons, comme sur un joystick, etc. Vous pouvez l'acheter dans des forfaits payants ou, encore une fois, vous écrire, passer du temps sur des vélos.

7. Confusion avec les coordonnées


Problème: vous ne pouvez pas attribuer les coordonnées de clic à l'objet et le voir au bon endroit, et cela n'est pas évident.

Solution: vous devez d'abord lire la documentation, comprendre et utiliser diverses méthodes de mappage des coordonnées:

WorldToScreenPoint ()
ScreenToViewportPoint ()
transform.TransformPoint ()
et d'autres ...

Je vais l'expliquer parce que la distance dans la scène est mesurée en unités arbitraires autres qu'un pixel, et en outre, les objets ont un système d'imbrication, respectivement, le positionnement est relatif au parent.

8. Un maigre ensemble de contrôles d'interface utilisateur


Problème: seuls les éléments les plus élémentaires sont livrés de la boîte, et même alors, vous devez bricoler avec certains.

Solution: vous pouvez vous contenter de peu. Par exemple, j'ai passé beaucoup de temps à faire défiler la liste dynamique. Vous pouvez acheter des contrôles sympas (moins - dépenser de l'argent).

9. Grande taille du fichier APK


Problème: lors de la construction d'un projet vide, sa taille est de 21,9 Mo (23 061 612 octets)

Solution: vous devez économiser sur tout. J'ai pincé des fichiers mp3, compressé des textures, essayé de ne rien inclure de superflu dans le projet. Mais lorsque des paquets supplémentaires ont été connectés, la taille a augmenté sans pitié, en s'efforçant pour une centaine.

Google Play demande aux développeurs de publier des applications <100 Mo. (22 déjà engloutis). Bien sûr, il existe des mécanismes de partage dynamique et dynamique des ressources, mais nous sommes de nouveaux arrivants, et notre objectif est d'apprendre les bases, de réaliser nos rêves chers et de ne pas lutter avec les limites du marché.

10. cyrillique


Problème: Ayant monté un projet pour la plate-forme JS / HTML5 (pour les tests), il s'est avéré qu'il n'y avait tout simplement aucun texte écrit en russe.

Solution: vous devez télécharger le fichier de police, l'importer dans les ressources, puis spécifier cette police importée dans les paramètres de chaque texte.

C'est en quelque sorte très étrange.

11. Performance physique


Problème: Le jeu commence à ralentir terriblement lorsqu'il y a des collisionneurs complexes, lors de l'utilisation du mode Continu pour la détection de collision , lorsque plusieurs systèmes de particules sont utilisés dans une scène, bref, lorsque tout est utilisé pour donner effet et beauté aux jeux.

Solution: utilisez uniquement les collisionneurs primitifs Circle et Rectangle , la détection de collision ne doit être que discrète , le nombre de particules dans le système de particules doit être réglé au minimum acceptable. Enfin et toujours, ne pas admettre mon erreur et ne pas utiliser les collisions à l'intérieur du système de particules. L'effet, bien sûr, est magnifique, car le sang coule dans les objets, mais il est très gourmand en ressources.

image

Naturellement, cela est vrai pour les jeux mobiles 2D. Mais j'aimerais que Unity développe, utilise de nouveaux shaders cool pour les particules, et pour les collisions, et pour tout le reste complexe et beau.

Conclusion


Il y avait, bien sûr, d'autres pièges, mais ce sont des bagatelles. Il y avait des avantages inattendus, tels que:

  • Préfabriqués
  • Bonne documentation et communauté
  • Créer automatiquement un collisionneur de polygones à l'aide du canal alpha d'un sprite
  • Facilité d'utilisation des effets sonores.
  • Animation très pratique sur les images clés (avec l'ajout d'Anima2D et de la cinématique inverse)

Mais c'est une histoire complètement différente ...

Quant au timing de la tâche, j'ai été très inhibé par le point n ° 3 (développement d'un plug-in de modélisation de la plateforme). En tant que développeur expérimenté, j'ai évalué le problème par moi-même et l'ai évalué comme suit: 20, 30, 40 (soirées / jours de congé parce que pendant la journée, je suis occupé avec le travail principal), où 20 est optimiste et 40 pessimiste. Si ce n'était pas pour le point numéro 3, j'aurais atteint 20-30, mais au final j'ai passé environ deux mois. (non, je ne travaillais pas tous les soirs, c'est-à-dire que j'en avais environ 40).

Si quelqu'un est intéressé, je dirai que j'ai dû dessiner les graphiques moi-même, grâce au programme Inkscape . J'ai choisi la musique exclusivement avec une licence d'utilisation gratuite.

J'ai dû passer quelques jours à publier sur Google Play .

Deux autres jours ont été consacrés à l'intégration de la publicité (vous ne le verrez probablement pas, je voulais vraiment l'essayer, même si le jouet n'était pas considéré comme commercial)

Oui, beaucoup aurait pu être amélioré, mais je voulais amuser mes amis avant les vacances du Nouvel An.

Ne vous méprenez pas, ce n'est pas un poste de relations publiques. Surtout, je veux que ceux qui font le moteur Unity prêtent attention à ces lacunes et, bien sûr, les éliminent (enfin, c'est l'idéal). Et je veux aussi aider mes frères spirituels à ne pas se retrouver sur le même chemin que moi.

Et si je me trompe sur quelque chose, alors ne jugez pas strictement, partagez vos astuces dans les commentaires!

Source: https://habr.com/ru/post/fr432946/


All Articles