Compétences de l'unité de base



Bonjour, cher Khabarovsk!

Chaque développeur veut créer son propre jeu plus rapidement, mais comment le faire? Cet article décrit les compétences de base pour réduire le temps de développement dans un environnement Unity.

Compétence n ° 1 - Travailler avec la structure du projet


Pour maintenir l'ordre dans le projet, vous devez comprendre sa structure. Il peut être représenté comme suit:

  1. Modèles - stocke tous les modèles utilisés dans le projet
  2. Prefabs - stocke tous les modèles de modèles
  3. Textures - stocke toutes les textures
  4. Matériaux - stocke tous les matériaux
  5. Scripts - stocke tous les scripts
  6. Sons - stocke tous les sons
  7. Animations - stocke toutes les animations

Si vous avez des objets complexes, par exemple un personnage, un dossier séparé est créé pour lui, où la structure ci-dessus est répétée.


Structure du dossier de caractères

Une autre approche consisterait à créer les dossiers décrits ci-dessus et à placer les parties de l'objet dans chaque dossier, c'est-à-dire que la structure suivante sera utilisée pour l'animation des personnages.


Structure du dossier d'animation

Compétence n ° 2 - Travailler avec une hiérarchie d'objets dans la scène


Pour simplifier le travail avec des ensembles d'objets identiques, ils peuvent être combinés en groupes où un objet vide fait office de parent.

Cela aidera à éteindre facilement la lumière dans tout le lieu ou à l'intérieur. Découvrez l'emplacement de tous les objets.

Chaque élément est appelé par rapport à ce qu'il est, à la fin un suffixe de l'objet parent est ajouté. Par exemple, une barre d'or dans une grotte sera appelée "goldBar_cv1", où cv1 signifie grotte1, et un arbre dans la forêt "tree_frt1", où frt1 signifie forêt1. Pour le suffixe, la première lettre du mot, la première lettre de la deuxième syllabe et la dernière lettre du mot sont prises.


Un exemple de hiérarchie d'objets sur une scène

Compétence n ° 3 - Travailler avec une présentation visuelle


Unity dispose de 3 sources lumineuses principales:

  1. Lumière directionnelle - un analogue du soleil
  2. Point Light - analogue d'une ampoule
  3. Spotlight - analogique d'une lampe de poche

S'il y a de la lumière, alors il doit y avoir une source de lumière. Par exemple, dans une grotte, il ne peut pas y avoir de lumière si le personnage n'a pas de torche (pour une torche, la lumière spot convient).

Utilisez le post-traitement pour appliquer des effets.

image
La scène sans post-traitement

image
Scène de post-traitement

UPD de thenonsense :

En plus des sources lumineuses visuellement présentées, il existe également des paramètres d'éclairage globaux: un onglet en haut de la fenêtre , Éclairage , le sous-élément Paramètres . Là, vous pouvez, par exemple, resserrer l'éclairage de l'environnement, installer une skybox, ajouter du brouillard. En fait, c'est ici que vous devez regarder si vous vous posez la question "supprimé toutes les sources de lumière, mais c'est la même lumière sur la scène que pendant la journée". Au fait, vous pouvez déjà accéder à ces paramètres pendant que le jeu s'exécute dans l'éditeur afin que vous puissiez immédiatement voir les modifications à la volée. Cependant, après avoir fermé le mode de jeu, les paramètres reviendront à l'état où ils étaient avant le début du test de jeu. Vous devez donc remonter dans cette fenêtre et ajuster les valeurs. Un détail utile - si, par exemple, vous vouliez changer la couleur d'éclairage (Couleur ambiante dans le groupe Environnement d'éclairage), puis sur le panneau avec la palette faites attention à l'élément hexadécimal - le numéro de la couleur actuelle est indiqué dans la fenêtre, vous pouvez le copier et le coller dans le même champ plus tard lorsque le mode de jeu est désactivé. La même astuce est utile pour régler la couleur du brouillard, etc.

De même, lors de l'exécution en mode jeu, vous pouvez modifier certains paramètres des objets via l'éditeur - les valeurs des scripts variables déplacées vers la zone de visibilité, activer / désactiver le rendu du maillage des objets, etc. L'essentiel est de ne pas se laisser emporter pour ne pas casser quelque chose. Une fois le mode de jeu désactivé, les valeurs modifiées seront restaurées. Cela ne s'applique pas à certains éléments individuels, par exemple, si vous avez modifié la texture du terrain dans le mode de jeu inclus, ses modifications seront enregistrées.


Compétence # 4 - Travailler avec la caméra


Besoin de trouver un objet sur scène? Cliquez 2 fois sur le nom de l'objet dans la hiérarchie.

Vous voulez survoler la scène avec 1 personne? Maintenez RMB et déplacez-vous avec les touches WASD, Maj accélération.

Vous voulez voir la scène sous différents angles? Profitez de Gizmos (Gizmos).


Emplacement de Gizmo

Compétence n ° 5 - Travailler avec des objets


Vous voulez ajouter un personnage à la scène? Ajoutez les composants RigidBody et CapsuleCollaider. RigidBody indique au moteur que la physique du solide doit être appliquée à cet objet.

Vous voulez vérifier la collision d'un personnage avec un objet? Ajoutez le composant MeshCollaider à l'objet et dans le script de caractère de la fonction OnCollisionEnter, vérifiez la balise de l'objet rencontré par le personnage.

Un exemple de l'implémentation de la vérification de la collision d'un personnage avec un objet
private void OnCollisionEnter(Collision collision) { switch (collision.gameObject.tag) { case "Moneys": Destroy(collision.gameObject); // Do something break; case "TrapSpikes": hitPoints -= 5.5; break; } } 



UPD de thenonsense :
Il n'est pas toujours nécessaire pour un personnage d'utiliser un corps rigide; les méthodes de gestion peuvent être différentes. Mais un collisionneur pour un personnage sera presque toujours nécessaire, à moins que vous ne calculiez les collisions de manière plus délicate. Unity possède également plusieurs contrôleurs / collisionneurs spécifiques - il est préférable de lire la documentation pour les comprendre plus en détail. Mais il vaut mieux commencer par des exemples simples sur YouTube.

Quant aux objets que le personnage rencontre. Le collisionneur de mailles doit généralement être accroché aux objets dont la forme complexe est d'une manière ou d'une autre importante pour que vous puissiez prendre en compte la collision. S'il ne s'agit que d'un bouton, il vaut mieux se débrouiller avec des collisionneurs plus simples comme Box Collider. De plus, vous devrez peut-être créer une grille de collision plus simple et invisible pour des objets 3D particulièrement complexes et y accrocher le collisionneur de mailles, et non sur l'objet visible lui-même.

À propos des collisionneurs de boutons, il convient de se rappeler que dans leur composant du collisionneur, vous devez cocher la case Is Trigger pour que le script puisse gérer l'événement click. Un composant de corps rigide doit être affecté à tous les barils, boîtes et autres objets qui doivent simplement magnifiquement réagir physiquement aux collisions et tomber sous l'influence de la gravité.


Compétence n ° 6 - Importer des modèles


Considérez la procédure à l'aide de l'exemple d'importation d'un modèle à partir de Blender. On suppose que vous avez déjà effectué une numérisation, appliqué une texture ou sélectionné des matériaux.

  1. Positionnez le modèle en coordonnées nulles (centre par rapport aux axes)
  2. Définir l'échelle à un
  3. Retirez les objets inutiles (appareil photo, source de lumière)
  4. Enregistrez le modèle au format .fbx
  5. Transférer le fichier vers Unity
  6. Tirez dans les dossiers - Modèle à modèles, matériau à matériaux, etc.
  7. Créer un modèle préfabriqué
  8. Travailler plus loin avec les préfabriqués


UPD de thenonsense :

Blender


Veuillez noter que si des matériaux de mélangeur sont affectés au modèle, ils seront transférés sous une forme simplifiée et encombreront la liste des matériaux.
Vous n'avez pas du tout à effectuer de développement et de texturation complexes dans Blender - un moyen plus simple consiste à parcourir tous les éléments du modèle et à sélectionner l'élément de données dans la fenêtre de droite. Il s'agit d'une icône sous la forme d'un triangle regardant vers le bas avec trois points entre les éléments Modifiers (clé) et Material (boule rose). Dans celui-ci, cliquez sur + à côté du graphique UV Maps - il apparaît un scan automatique avec une icône de boule d'échecs. Cela doit être fait pour chaque élément du modèle et ensuite exporté. Ensuite, déjà dans Unity, il sera possible d'appliquer un matériau avec une texture de tuile à cette pièce, et si cela n'est pas fait, le matériau ne peindra la pièce que dans une couleur unie. (Si vous avez ultérieurement déformé l'élément de modèle, supprimez le balayage et réaffectez-le afin qu'il ne soit pas étiré).

Si votre modèle se compose de différents éléments, alors déjà dans Unity, vous pouvez déplacer des éléments individuels de votre modèle ou les désactiver. Cela peut être utile dans diverses situations.

Comment texturer un modèle de manière simple.


Vous devez d'abord disposer de 512 à 512 textures de tuiles. Ajoutez-les de la même manière que le modèle 3D via Import New Asset (n'oubliez pas qu'un dossier approprié doit être sélectionné). Dans le même temps, à droite, dans l'inspecteur, à la texture ajoutée dans la fenêtre Par défaut , définissez le paramètre Taille maximale sur 512. Et puis cliquez sur Appliquer . Maintenant, la texture est prête à l'ajouter au matériau ou, par exemple, elle peut maintenant être peinte en terrane. Faites attention au tout premier point - Type de texture, il est maintenant en mode par défaut, mais lorsque vous devez charger une carte normale, une image pour un sprite translucide, etc., vous devrez y définir le paramètre approprié.
Ensuite, nous devons créer le matériau. Nous allons à nouveau dans le menu ci-dessus - Actifs , la liste déroulante Créer , Matériau (encore une fois, n'oubliez pas que le matériau sera créé dans le dossier qui est actuellement sélectionné). Vous conduisez au nom du matériau et dans l'inspecteur, ouvrez l'élément Albedo (jusqu'à ce que nous nous arrêtions à d'autres paramètres, mais le principe est similaire), où vous recherchez et affectez votre texture précédemment chargée. À proximité, il y a une fenêtre de couleur qui peut en outre teinter votre texture, ainsi que des curseurs Metalic et Smoothhness pour ajouter de l'éclat ou de l'ennui. Le paramètre Tiling size est également utile, il se trouve quelques lignes ci-dessous.
Une fois le matériau créé, vous pouvez le saisir et le jeter directement sur le modèle ou ses éléments, ne le manquez pas, sinon peignez pas ce dont vous avez besoin.

N'oubliez pas que la même texture peut être utilisée dans différents matériaux. Par exemple, avec des impuretés de différentes couleurs et / ou différentes tailles de carreaux.

Préfabriqués.


Habituellement, le préfabriqué fait quelque chose comme ça - ils ont fait glisser l'objet sur la scène, puis ont accroché son nom dans la fenêtre de hiérarchie et l'ont fait glisser dans le dossier. Ensuite, il apparaîtra un préfabriqué basé sur l'objet, dans l'inspecteur le préfabriqué aura une icône de cube bleu et il sera signé sous la balise, Prefab.
Cependant, vous n'avez pas besoin de tout faire immédiatement avec les préfabriqués. Vous pouvez lancer l'objet sur la scène, puis le cloner avec du copier-coller et le tester comme ça. Si tout vous convient, transférez l'objet dans le préfabriqué, sinon, par exemple, un bug est apparu dans le modèle, puis supprimez ses copies de la scène, le modèle lui-même du dossier, corrigez-le dans le package 3D et réimportez.

Vous pouvez également insérer de nouveaux éléments enfants dans le préfabriqué sur scène. Cependant, ils n'en feront pas partie intégrante, c'est-à-dire qu'ils n'affecteront pas les autres copies de ce préfabriqué tant que vous n'aurez pas cliqué sur le bouton Appliquer dans l'inspecteur sur la ligne portant le nom Prefab.


Compétence n ° 7 - Implémentation de la logique


Évitez les opérations coûteuses. Un exemple est la détermination de la distance à un objet.

Exemple d'opération coûteuse
 using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public Transform other; void Example() { if (other) { //       //         float dist = Vector3.Distance(other.position, transform.position); print("Distance to other: " + dist); } } } 


Exemple d'implémentation plus rapide
 using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public Transform other; public float closeDistance = 5.0f; void Update() { if (other) { Vector3 offset = other.position - transform.position; //     float sqrLen = offset.sqrMagnitude; //    ,     if (sqrLen < closeDistance * closeDistance) { print("The other transform is close to me!"); } } } } 


En savoir plus sur les opérations coûteuses ici .

Conclusion


Les compétences ci-dessus réduiront considérablement le temps pendant le développement et pendant le soutien du projet.

Si vous pensez que certains sujets sont révélés de manière superficielle, veuillez écrire plus en détail dans les commentaires à leur sujet.

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


All Articles