meilleures pratiques Blueprint

Vous pouvez faire beaucoup de choses avec les Blueprints. Tout, depuis la création d'un petit jeu ou d'outils de contenu procédural, jusqu'au prototypage de nouvelles fonctionnalités, en passant par l'ajustement et le polissage de choses faites par les programmeurs, est possible avec le système de script visuel Blueprints.

Cependant, il y a certaines choses qui auront plus d'impact sur votre performance si elles sont faites dans des Blueprints. Si vous avez un Blueprint qui fait beaucoup d'opérations et de calculs complexes à chaque tick, vous pouvez envisager d'utiliser du code C ++ natif. Les blueprints sont les mieux adaptés aux fonctionnalités pilotées par les événements, telles que la gestion des dommages, les contrôles et autres éléments qui ne sont pas appelés à chaque frame.

Si vous souhaitez en savoir plus sur le codage de Blueprints ou sur les détails techniques de la compilation Blueprint, consultez le Guide technique des Blueprints.

Même si votre fonctionnalité est parfaitement adaptée aux Blueprints, vous pouvez prendre des décisions lors de la configuration de vos Blueprints afin que tout se passe bien. Ce guide vous présentera quelques-unes des décisions les plus courantes que vous devrez prendre, ainsi que des conseils et astuces pour les utilisateurs de Blueprint.

Level Blueprints vs. Blueprint Classes

Le Level Blueprints peut être très familier aux utilisateurs de Kismet de l'UE3, car vous pouvez sélectionner des objets directement dans le niveau et les utiliser. Ils sont parfaits pour les prototypes uniques et pour se familiariser avec le système Blueprints, mais ils sont spécifiques au niveau dans lequel ils sont utilisés. Cela signifie que le Level Blueprints peut être un excellent endroit pour mettre en place des fonctionnalités spécifiques au niveau, ou les Actors dans ce niveau. Par exemple, lancer une cinématique quand on touche un certain déclencheur, ou ouvrir une porte après avoir tué tous les ennemis.

En général, les classes Blueprint sont le meilleur moyen d'obtenir un comportement réutilisable dans votre projet. Si vous créez une classe Blueprint, vous pouvez l'ajouter à n'importe lequel de vos niveaux et vous pouvez également ajouter autant de copies que vous le souhaitez au niveau sans avoir à copier le script.

Si vous commencez dans un Level Blueprint, puis décidez de déplacer le behavior dans une classe Blueprint, cela devrait être un processus assez simple. Lorsque vous copiez des fonctions à partir d'un Level Blueprint opérant sur des Actors (appelant par exemple Set Brightness sur une lumière) et collez-les dans une classe Blueprint basée sur un Light Actor, les fonctions seront mises à jour.

Class Variables vs. Local Variables

Lorsque vous travaillez dans votre Blueprint, vous avez la possibilité d'ajouter des variables à l'aide de l'onglet My Blueprint. Lorsque vous vous trouvez dans une fonction, vous verrez une section supplémentaire de l'onglet My Blueprint pour les variables locales (Local Variables).

les variables locales dans l'onglet My Blueprint
Les variables locales dans l'onglet My Blueprint.

Les variables locales sont définies, ce qui signifie qu'elles n'existent que lorsque vous les définissez. Ainsi, une variable locale dans une fonction n'est visible que pour cette fonction, et non pour d'autres fonctions ou l'Event Graph. Cela aide à réduire l'encombrement pour les choses qui ne sont pertinentes que dans le contexte de cette fonction. Vous pouvez considérer les variables locales comme un "bloc-note" à utiliser dans une fonction. Vous pouvez les utiliser pour réaliser ce dont la fonction a besoin, mais ils seront jetés une fois la fonction terminée.

Les variables de classe concernent les éléments auxquels vous souhaitez potentiellement accéder à partir de plusieurs endroits du Blueprint. Ainsi, des choses comme des références à des meshes ou à d'autres composants, ou des variables qui doivent être publiques pour que vous puissiez y accéder à partir d'autres Blueprints, devraient être des variables de classe. Ce sont des choses qu'on ne veut pas oublier après les avoir utilisées.

Functions vs. Macros

Les fonctions et les macros accomplissent toutes les deux le même objectif en externe: elles vous permettent d'envoyer des entrées dans un nœud, quelque chose lui arrive, et ensuite les outputs sortent.

Ils accomplissent ceux-ci de deux manières différentes, mais ils ont quelques similitudes :

  • Les deux ont une place centrale que vous pouvez éditer la fonctionnalité de ce que le nœud fait (macros dans leur macro graphe, et fonctions dans leur fonction graphique), et chaque nœud qui appelle la fonction ou macro sera mis à jour chaque fois que cette place centrale est modifiée.
  • Les deux sont réutilisables.
  • Les deux permettent des variables locales. Les macros utilisent des variables locales "anonymes", qui n'ont pas de nom spécifique, mais qui contiennent simplement une valeur.
  • Les deux sont des moyens impressionnants d'encapsuler des fonctionnalités pour la réutilisabilité et la clarté.

Certaines différences clés deviendront plus évidentes à mesure que vous vous familiariserez avec des cas d'utilisation plus avancés.

  • Les fonctions sont appelées lorsque vous placez des nœuds pour appeler la fonction. Cela signifie que vous pouvez les cibler (c'est-à-dire "appeler une fonction sur un autre objet"), et ils permettent la communication entre Blueprints.
  • Les macros prennent les nœuds du macro-graphique et remplacent le nœud de macro par une copie de tous ces nœuds. Fondamentalement, lorsque le Blueprint est compilé, la macro copie tous les nœuds du graphique et les colle là où se trouve le nœud de la macro.

En raison de la façon dont ils fonctionnent sous le capot, cela signifie qu'il y a quelques différences dans ce que vous pouvez faire :

  • Les macros peuvent utiliser n'importe quel nœud pour la classe dans laquelle elles sont définies (la classe que vous choisissez lorsque vous créez un nouveau plan de macro ou, s'il s'agit d'une macro locale, la classe dans laquelle la macro est définie). Cela signifie que vous avez un peu plus de polyvalence dans les nœuds que vous pouvez mettre dans une macro.
  • L'une des plus grandes différences entre une fonction et une macro est que vous pouvez placer des nœuds latents dans une macro, mais pas dans une fonction.
  • Les fonctions vous permettent d'annuler leur fonctionnalité dans les Blueprints enfants. Par exemple, supposons que vous ayez un Blueprint de voiture qui a une fonction "PlayerInteractedWithMe". Dans cette fonction, vous pourriez jouer du klaxon. Supposons que vous ayez deux enfants de la voiture Blueprint, pour une voiture de police et un camion de pompier. Dans la voiture de police, vous pouvez passer outre la fonction pour émettre un son de sirène et allumer les lumières. Dans le camion de pompiers, vous pourriez faire jaillir de l'eau. Ce genre de fonctionnalité prioritaire n'est pas possible avec les macros.
  • Étant donné que les macros sont simplement copiées-collées dans le graphique au moment de la compilation, vous pouvez avoir plusieurs fils d'exécution dans et hors d'une macro. Vous ne pouvez pas faire cela dans une fonction.

En général, une bonne règle de base pourrait être d'utiliser une macro s'il y a un peu de fonctionnalité rapide que vous voulez réutiliser partout. Mais, si vous souhaitez modifier ce comportement dans les enfants du Blueprint, ou si vous voulez y accéder directement à partir d'un autre Blueprint, il est préférable d'utiliser une fonction !

Types de communication

Il existe plusieurs méthodes différentes pour communiquer entre deux Blueprints. Bien que le cas d'utilisation le plus courant soit la communication par Blueprint directe, il arrive que la fonctionnalité que vous utilisez devra utiliser des répartiteurs d'événements ou des interfaces Blueprint à la place.

Astuces générales

Travailler dans l'éditeur Blueprint

Lorsque vous travaillez dans le Blueprint Editor, vous pouvez utiliser quelques astuces pour trouver les nœuds que vous souhaitez utiliser, ainsi que les nœuds et les commentaires que vous avez déjà créés.

  • Utilisez le bouton Rechercher dans l'éditeur Blueprint lorsque vous cherchez quelque chose dans un Blueprint existant, qu'il s'agisse d'une variable, d'une fonction ou d'un commentaire. Il recherche tous les Blueprints, même déchargés, si vous décochez la case Find in Current Blueprint only, afin de vous aider à localiser l'endroit où vous avez implémenté quelque chose.
    module de recherche dans l'éditeur de Blueprint
    Module de recherche dans l'éditeur de Blueprint.
  • Le menu contextuel affiche uniquement les nœuds que vous pouvez connecter à la broche que vous avez tirée (par exemple, lorsque vous faites glisser une lumière, elle affiche les fonctions pertinentes pour la lumière). Lorsque vous essayez de découvrir toutes les fonctionnalités disponibles pour agir sur une variable ou un composant, parcourez simplement le menu contextuel et voyez ce qui est disponible.
    menu contextuel qui affiche les nœuds disponibles
    Menu contextuel qui affiche les nœuds disponibles.
  • Que vous soyez dans le menu contextuel ou dans la palette, la barre de recherche peut être très utile. Nous étiquetons des fonctions avec beaucoup de mots-clés pour vous aider à trouver ce que vous cherchez, même si vous ne savez pas comment ça s'appelle !

Configuration de votre graphe

Alors que tout le monde a ses propres préférences de configuration graphique, voici quelques conseils qui peuvent vous aider à organiser les choses et à les suivre facilement :

  • Gardez les choses bien rangées dès le départ ! Il est beaucoup plus difficile de nettoyer après avoir fait beaucoup de code que de travailler proprement au fur et à mesure.
  • Si vous utilisez plus de deux fois le même jeu de nœuds dans un graphe, vous pouvez en faire une fonction ou une macro afin de pouvoir le réutiliser.
  • Vous pouvez empiler des nœuds avec leur contexte, car cela les rend plus compacts dans l'espace. Par exemple, si vous avez une référence à une lumière, alors vous accédez à sa composante de lumière ponctuelle, vous pouvez empiler ces deux nœuds l'un sur l'autre et les considérer comme un seul bloc.
    exemple de nœuds empiler
    Exemple de nœuds empiler.
  • Utilisez souvent des commentaires ! De plus, n'oubliez pas que vous pouvez changer la couleur des boîtes de commentaires, pour plus d'aide à identifier les sections de votre graphe.

les réactions

Pour laisser un avis, vous devez être inscrit et connecté

Se connecter