Moteur Unreal 5 : commencer avec les plans | Defuse Studios | Skillshare
Recherche

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Moteur Unreal 5 : commencer avec les plans

teacher avatar Defuse Studios

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Intro (aperçu du cours)

      2:29

    • 2.

      Intro (aperçu)

      3:05

    • 3.

      Intro (création de plans)

      12:29

    • 4.

      Intro (flux d'événements)

      7:58

    • 5.

      Variables (aperçu)

      6:03

    • 6.

      Variables (booléennes)

      9:56

    • 7.

      Variables (entiers et flotteurs)

      18:18

    • 8.

      Variables (noms, textes et chaînes)

      14:40

    • 9.

      Variables (vecteurs, rotateurs et transformations)

      25:05

    • 10.

      Variables (acteurs et objets)

      12:55

    • 11.

      Variables (tableaux et boucles)

      21:40

    • 12.

      Les bases (fonctions)

      18:04

    • 13.

      Les bases (Macros)

      10:10

    • 14.

      Les bases (structures et enums)

      17:40

    • 15.

      Les bases (événements)

      9:51

    • 16.

      Les bases (héritage du plan d'exécution)

      11:51

    • 17.

      Les bases (Casting)

      17:15

    • 18.

      Les bases (organisateurs d'événements)

      17:07

    • 19.

      Les bases (interfaces)

      11:02

    • 20.

      Les bases (composants)

      17:06

    • 21.

      Les bases (contrôleur de lecteur)

      14:58

    • 22.

      Les bases (GameMode)

      8:16

    • 23.

      Les bases (nœuds d'utilité)

      9:44

    • 24.

      Les bases (exemple de jeu)

      10:31

    • 25.

      Leçons supplémentaires (traces)

      20:09

    • 26.

      Leçons supplémentaires (tableaux de données)

      17:54

    • 27.

      Leçons supplémentaires (nœuds de chevauchement)

      6:31

    • 28.

      Leçons supplémentaires (intrants)

      12:57

    • 29.

      Leçons supplémentaires (des entrées améliorées)

      24:32

    • 30.

      Leçons supplémentaires (Tags)

      8:46

    • 31.

      Leçons supplémentaires (les acteurs de fraye)

      10:45

    • 32.

      Leçons supplémentaires (code Organization)

      11:08

    • 33.

      Leçons supplémentaires (outils de débogage)

      15:57

    • 34.

      Leçons supplémentaires (calendrier)

      21:34

    • 35.

      Leçons supplémentaires (prises)

      19:26

    • 36.

      Leçons supplémentaires (volet mouvement)

      14:47

    • 37.

      Leçons supplémentaires (effets audio)

      24:47

    • 38.

      Leçons supplémentaires (effets de particules)

      13:56

    • 39.

      Widgets (aperçu)

      10:09

    • 40.

      Widgets (mises en page)

      19:46

    • 41.

      Widgets (créer des Widgets)

      18:38

    • 42.

      Widgets (fixations)

      9:58

    • 43.

      Widgets (frontières, superpositions et grilles)

      15:11

    • 44.

      Widgets (glisser-déposer)

      18:55

    • 45.

      Les plans d'animation (aperçu)

      15:18

    • 46.

      Les plans d'animation (montages)

      18:30

    • 47.

      Les plans d'animation (mélangez les noeuds)

      15:13

    • 48.

      Les plans d'animation (Notifies)

      16:41

    • 49.

      Les plans d'animation (États)

      15:12

    • 50.

      Les plans d'animation (mélange des espaces)

      14:28

    • 51.

      Les plans d'animation (objectifs des offs)

      18:19

    • 52.

      Les plans d'animation (courbes et métadonnées)

      10:37

    • 53.

      Systèmes de jeu (Interaction)

      24:40

    • 54.

      Systèmes de jeu (dommages)

      32:19

    • 55.

      Systèmes de jeu (barre de santé)

      9:42

    • 56.

      Systèmes de jeu (Respawning)

      18:36

    • 57.

      Systèmes de jeu (Crouching)

      14:16

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

980

apprenants

--

projet

À propos de ce cours

Commencez avec les plans d'eau

Dans ce cours, nous commencerons par les bases de la façon de naviguer dans Unreal Engine 5, l'éditeur de schémas de base, mais aussi de créer des systèmes de jeu et d'apprendre à utiliser nombre des principales caractéristiques des schémas de base.

L'objectif de ce cours est de vous fournir des informations et des connaissances utiles pour que votre capacité de planifier et de créer vos propres systèmes de jeu pour votre futur projet et de lire les plans d'autres peuples qui peuvent vraiment vous aider à accélérer le processus d'apprentissage. Aucune connaissance préalable de la programmation n'est requise !

Qu'allez-vous apprendre ?

  • Quels sont les plans
  • Comment naviguer sur l'interface utilisateur du plan Unreal Engine 5
  • Quelles sont les variables et comment les utiliser
  • Comment utiliser les fonctions, les macros et les événements pour que votre projet soit propre et efficace
  • Les différences entre les types de plans tels que les personnages, les modes de jeu et les acteurs
  • Les plans de communication comprennent la coulée, les interfaces et les répartiteurs d'événements
  • Comment configurer les entrées du lecteur, y compris les nouvelles entrées améliorées
  • Comment créer et configurer l'interface utilisateur du widget sur un écran de joueurs
  • Les bases des plans d'animation
  • Les acteurs, les particules et les effets sonores, y compris les nouveaux MetaSounds
  • Comment créer une santé, une interaction, un redémarrage et des dégâts des systèmes de jeu
  • Organisation du code

Rencontrez votre enseignant·e

Teacher Profile Image

Defuse Studios

Enseignant·e

Hello, I'm James also known as Defuse Studios. I have been a full time Unreal marketplace creator for the last 5 years, and during that time I have provided support to hundreds of beginners learning UE4.

This has helped me gain insight into some of the things people struggle with when learning game development. I hope to use that knowledge in my future course to provide people with the best information possible, in an easy to follow way to help you on your path to creating the next big indie game or get your dream job!

Voir le profil complet

Level: Beginner

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Intro (aperçu du cours): Bonjour à tous, et bienvenue dans le cours Unreal Engine five, Getting started with blueprints. Je m'appelle James, aussi connu sous le nom de « quelques studios ». Et je suis une créatrice du marché depuis six ans. Et pendant ce temps, j'ai fourni une assistance à des centaines de débutants d'Unreal Engine. Et grâce à cela, j'ai appris certaines des choses communes avec lesquelles les gens ont tendance à avoir du mal à apprendre le développement de jeux vidéo. Je suis ruiné. Jing est l'un des moteurs de jeu les plus populaires au monde et Blueprints est son puissant langage de programmation visuel intégré. Les Blueprints nous permettent de coder systèmes simples ou incroyablement complexes à partir du moteur sans jamais avoir à écrire de code basé sur du texte. C'est un excellent moyen de se lancer dans le monde du développement de jeux vidéo. Au début de ce cours, nous allons commencer par les variables de base. Ils sont utilisés pour stocker des informations telles que l' emplacement du joueur, sa santé ou son endurance. Ils apprendront à connaître les différents types de variables et également comment les manipuler pendant le jeu. Nous passerons ensuite aux fonctions, aux macros et aux événements. Ils sont utilisés pour que votre projet ordonné et efficace et qu'il soit plus facile de le modifier ultérieurement au cours du développement de votre projet. Ensuite, nous passerons aux différents types de plans, notamment plans d'acteur, de pion, de personnage et de mode de jeu. Chacun de ces plans est livré avec différentes fonctionnalités intégrées qui sont fournies avec le moteur que nous pouvons ensuite utiliser pour créer nos jeux. Nous aborderons également des sujets tels que les projectiles, qui sont souvent utilisés pour les balles d'armes, traces qui sont souvent utilisées pour les systèmes d' interaction et parfois même les systèmes Meli. Et nous aborderons les entrées des joueurs , y compris le nouveau système de saisie amélioré. Et c'est ce qui nous permet d'appuyer sur un bouton du clavier ou de la souris et d'exécuter code en fonction de la touche sur laquelle nous avons réellement appuyé. Nous allons également aborder les widgets , c'est ainsi que nous créons des éléments d'interface utilisateur à l'intérieur de ceux-ci. moteur de règles apprendra comment créer nouveaux widgets et comment les ajouter à l'écran des joueurs, ainsi que comment modifier la mise en page et attacher le comportement des widgets, deux variables, fonctions ou événements différents, afin que nous puissions contrôler nos widgets. Enfin, nous utiliserons toutes les connaissances que nous avons acquises au cours du cours pour créer des systèmes de jeu courants. Cela inclut un système d' interaction qui permet à notre joueur d' interagir avec d'autres objets. Un système endommagé qui permettra nos personnages de recevoir et d'envoyer des dégâts. Un HUD que nous pouvons utiliser pour afficher des informations sur l'écran de nos joueurs. Nous allons mettre en place un système de réponse et un système accroupi également. L'objectif de ce cours est de vous fournir des informations détaillées sur les différentes fonctionnalités incluses dans les plans. Ainsi, à la fin de ce cours, vous serez en mesure de planifier et de créer vos propres systèmes de jeu. Merci de votre écoute, et j' espère vraiment que vous apprécierez le cours. 2. Intro (aperçu): Bonjour les gars, et bienvenue à la première leçon de ce cours. Dans cette leçon, qui va faire un bref aperçu de ce que sont les plans, leur utilité et de quelques phrases courantes que nous utiliserons tout au long du cours. Alors, pour commencer, que sont les plans ? Blueprints sont un langage de programmation visuel intégré à Unreal Engine. Ils sont souvent utilisés pour définir des choses comme un personnage, arme ou même un MPC. Blueprints vous permettent de coder dans le moteur en connectant différents types de nœuds qui ensemble, créent de nouvelles fonctionnalités. Cela peut entraîner l'ouverture et la fermeture d' une porte, ou un système d' inventaire complexe ou un système de combat. Le moteur inclut des modèles de modèles qui commencent par du code existant utile, comme par exemple notre plan de personnage, que si je mets dans le niveau ici, vous pouvez voir sur la droite côté de l'écran, il inclut des composants intégrés, comme par exemple le composant de mouvement du personnage, qui contrôle le mouvement du personnage. Un composant de maillage qui permet à notre modèle de personnage d' être visible dans le jeu. Un composant de caméra qui, lorsqu'un joueur prend le contrôle de ce personnage, lui permet de voir. Lorsque vous commencez avec les plans. Certains termes courants que vous entendrez sont Classes de plans. Les objets Blueprint, ou Blueprint agissent comme un exemple de classe Blueprint est notre ThirdPersonCharacter ici. Maintenant, si nous le survolons, vous pouvez voir qu'il s'agit de la classe Blueprint. Mais si nous le faisons glisser dans notre niveau, vous pouvez voir qu'il crée un nouvel objet Blueprint et nous pouvons en fait glisser plusieurs de la même classe dans notre niveau. Il s'agit maintenant de deux objets Blueprint indépendants. Si nous avions plusieurs joueurs, chaque joueur pourrait contrôler un plan de personnage différent et faire des choses différentes. Mais tous ces plans utilisent toujours la même classe de plan, qui est notre classe ThirdPersonCharacter. Si des modifications sont apportées à notre classe ThirdPersonCharacter Blueprint, cela affectera tous nos objets Blueprint utilisant notre classe. Par exemple, si j' ouvre mon plan ThirdPersonCharacter, vais dans Viewport et je fais simplement pivoter notre maillage, disons 90 degrés de cette façon. Cliquez sur Compiler, retournez sur notre carte. Vous pouvez voir que nos personnages font maintenant face à une autre direction. Et si je reviens en arrière et que je le fais simplement pivoter la bonne direction, cliquez sur Compiler. Vous pouvez constater que, mis à jour, certains objets Blueprint n' existent pas dans le niveau de jeu, mais fonctionnent en arrière-plan, stockant des informations et exécutant des fonctionnalités importantes. Par exemple, le plan d' instance de jeu, qui est utilisé pour stocker des informations entre les niveaux d'un plan comme le mode de jeu, existe dans le niveau, mais est complètement invisible pour le joueur. Le mode Jeu contrôle des éléments tels que classe de plan de personnage créée lorsqu'un nouveau joueur rejoint le jeu. Et que se passe-t-il lorsqu'un joueur quitte la partie ? Blueprints sont un outil incroyablement puissant qui permet un développement plus rapide, débogage et une utilisation très conviviale. Au cours des prochaines leçons, je vais aborder certaines des bases pour vous aider à démarrer. Vous êtes donc en mesure de créer certaines de vos propres fonctionnalités, ainsi que de lire les plans d'autres personnes, ce qui peut réellement vous aider à accélérer votre apprentissage. 3. Intro (création de plans): Salut tout le monde. Dans cette leçon, je vais vous montrer comment créer de nouvelles classes de plans. Nous allons également jeter un coup d'œil à l'éditeur de Blueprint. Avant de commencer, je vais simplement vous montrer comment ancrer le navigateur de contenu à notre écran. Par défaut, nous devons cliquer sur ce dessin de contenu pour l'ouvrir. Personnellement, je préfère qu' il soit verrouillé à l'écran. Je vais donc simplement cliquer sur le bouton de mise en page de ce document ici. Et maintenant, notre navigateur de contenu est verrouillé sur notre écran. Il s'agit d'une préférence personnelle. Vous pouvez avoir votre configuration comme vous le souhaitez, mais c'est comme ça que se passera la mienne pour le reste du cours. Il existe plusieurs façons de créer des plans et notre navigateur de contenu Nous pouvons cliquer avec le bouton droit de la souris et sélectionner Classe de plan ici. Vous pouvez également accéder aux plans, apparaître et sélectionner l'option Classe de plan ici. classes supplémentaires géniales ici, mais nous ne les aborderons pas dans cette leçon. Ce sera dans une prochaine leçon. Une autre façon de créer des plans est de cliquer sur le bouton Ajouter situé sur le côté gauche de l'écran. Et vous pouvez voir que nous avons le même menu. Nous pouvons sélectionner une classe de plan, ou nous pouvons aller sur des plans et sélectionner une classe de plan ici également. Je vais donc simplement cliquer sur Classe de plan pour ouvrir notre fenêtre de sélection de classe. Ici, nous pouvons sélectionner le type de plan que nous voulons créer. Nous donne quelques-unes des sélections les plus courantes. Donc, en haut, ici. Pour commencer, nous avons un acteur. Un acteur est en gros n'importe quel plan existant dans un niveau. Ensuite, nous avons **** qui a promulgué que le joueur peut réellement prendre le contrôle d'un personnage, qui est également un ****. Mais il avait des fonctionnalités étendues afin qu'il puisse se déplacer et que nous puissions définir un modèle de personnage. Nous avons la manette du joueur. C'est le plan qui indique à notre personnage ou à un dieu ce que notre joueur veut qu'il fasse. Le mode de jeu, qui est la façon dont nous définissons le type de contrôleur de joueur ou de personnage nous voulons que nos joueurs commencent. Ensuite, nous avons quelques éléments ici, que je couvrirai dans une prochaine leçon. Mais essentiellement, des composants peuvent être ajoutés à d'autres plans pour leur donner des fonctionnalités supplémentaires. Et puis ici, nous avons toutes nos classes. Et cela nous permet essentiellement de sélectionner n'importe quel autre plan ou classe C plus et de faire en sorte que notre nouveau plan les utilise comme modèle. Pour commencer, nous allons simplement créer un acteur simple afin que je puisse vous présenter certaines des interfaces utilisateur du plan. Il suffit de renommer ce plan. Je vais appeler mes plans vidéo. Et nous allons double-cliquer dessus pour l'ouvrir. Et nous allons commencer par la fenêtre d'affichage. C'est ici que nous pouvons définir nos emplacements pour les nouveaux composants de notre plan directeur. Par exemple, si je vais dans notre onglet composants ici et que je clique sur Ajouter, il suffit de rechercher un cube et nous ajouterons un cube. Maintenant, nous pouvons définir la position de nos cubes. Si j'appuie sur W, cela nous donne le contrôle des mouvements. Si j'appuie sur E, nous pouvons le faire pivoter, ou si j'appuie sur R, nous pouvons le redimensionner. Ces options sont également disponibles ici. Donc, si vous souhaitez utiliser ces boutons à la place, vous pouvez le faire. Et si nous le voulions, nous pourrions ajouter des composants supplémentaires et définir leur emplacement dans notre plan directeur. Maintenant, si je compile ce plan et que je le fais glisser dans le monde, vous pouvez voir que le centre de mes plans est ici, mais mon cube est là. C'est parce que nous l'avons positionné à cet endroit par rapport au centre plus loin. Vous pouvez voir qu'il est également mis à jour dans le monde entier. Cela vous donne donc une idée de base de la façon d'utiliser la fenêtre d'affichage. quoi sert, je vais simplement supprimer mon cube pour instant, car nous allons passer à la partie suivante de l'interface utilisateur, qui est le panneau Mon plan directeur. Maintenant, nous allons beaucoup utiliser ça où mon codage. En commençant par le haut, nous avons nos graphiques. Je pense que le graphique. Si je double-clique dessus, cela nous mènera à notre graphique d'événement principal. C'est là que nous allons faire beaucoup de codage, au moins pour commencer, avant de commencer aborder les fonctions et les choses comme ça. Mais vous vous y familiariserez avec le temps. Cela commence par quelques nœuds de base. Je reviendrai là-dessus dans une prochaine leçon afin que vous n'ayez pas trop à vous en inquiéter pour l'instant. Mais vous pouvez également voir que sous notre graphique, il nous indique quels sont les événements dans ce graphique. Vous pouvez voir que nous avons ces quatre événements ici. Ils sont également répertoriés sous notre graphique d'événements. Donc, si je devais dire double-cliquez sur le début du chevauchement actif, cela nous mènera à cet événement, ce qui peut être utile si vous essayez de trouver des choses. Ensuite, nous avons nos fonctions, macros, variables et répartiteurs d'événements. Maintenant, chacun d'entre eux va avoir ses propres leçons parce que ce sont va avoir ses propres leçons des systèmes assez gros et que nous allons beaucoup les utiliser. Mais c'est là qu'il sera listé. Toutes les fonctions présentes dans ce Blueprint seront répertoriées sous Fonctions. Il en va de même pour les macros, les répartiteurs d'événements et les variables Si jamais vous souhaitez en créer de nouvelles, nous pouvons cliquer sur le petit bouton plus à côté des fonctions ici. Nous pouvons faire de même avec les macros, les variables et les répartiteurs d'événements peuvent également cliquer sur ce petit bouton Ajouter ici. Nous pouvons sélectionner si vous souhaitez créer une nouvelle variable, une fonction de macro, etc., nous pouvons créer de nouveaux graphiques. Et c'est utile juste pour organiser les choses. Supposons que vous ayez un personnage et que vous vouliez avoir un graphique pour le mouvement, un graphique pour vos armes et un graphique pour la santé, par exemple. Vous pouvez le faire et cela ne vous donne que des graphiques supplémentaires dans lesquels vous pouvez organiser les choses. Fonctions prépondérantes. Nous en parlerons dans la vidéo des fonctions. Alors ne t'inquiète pas trop pour ça. Mais si vous souhaitez remplacer une fonction, vous pouvez trouver ces options ici. Ensuite, il y a la barre de recherche. Nous pouvons simplement l'utiliser pour rechercher un mot particulier dans les fonctions, les variables et les macros. C'est toujours une bonne idée d'inclure des mots clés dans les noms de variables et de fonctions. Ainsi, si, par exemple, nous créions un système de santé, nous pourrions simplement rechercher la santé. Cela affichera toutes nos fonctions, variables dont le nom contient le mot santé. Ensuite, nous allons couvrir la barre du haut. Pour commencer, nous avons compilé. Cela nous dit simplement notre plan de jeu est prêt ? En ce moment, il y a une petite coche, qui signifie que tout va bien. Tout va bien. Mais si je devais dire glissez et ajoutez une chaîne d'impression ici et voyez que maintenant nous devons la compiler. Et cela permet simplement aux moteurs de vérifier le code, s' assurer qu'il n'y a pas de problèmes. S'il y a un problème et donnez-nous un petit point d'exclamation rouge. Cela nous donne également probablement des erreurs de compilation qui nous indiquent quel est le problème. Ensuite, nous avons notre sauvegarde qui enregistre juste un plan. Si nous cliquons sur Enregistrer , le petit point a disparu à côté du nom du plan parce qu'il est enregistré. Nous avons un navigateur. Si nous cliquons dessus, cela nous mènera à l'endroit où se trouve le plan et à notre navigateur de contenu. Ensuite, nous avons diff, c'est pour le contrôle de source. Je ne vais pas m'attarder là-dessus parce que contrôle de source est un sujet assez important. Nous allons donc simplement sauter cela pour l'instant. Nous avons trouvé. Cela nous donne la fenêtre de recherche dans laquelle nous pouvons rechercher, par exemple, un nœud. Donc, si je recherche une chaîne d'impression ici, vais nous dire, hé, il y a un nœud de chaîne d'impression dans le graphique. Donc, si je double-clique dessus, cela nous y mènera. C'est très utile. Si vos plans deviennent assez grands, vous pouvez oublier où vous avez mis les choses. Vous pouvez donc simplement rechercher des mots clés pour trouver où se trouvent les choses. Salut, sans rapport cache simplement les connexions qui ne sont pas importantes à ce moment-là. D'habitude, je recommande simplement de laisser cela de côté, mais vous pouvez jouer avec ça si vous le souhaitez. Ensuite, nous avons les paramètres de classe. Ce sont en quelque sorte les paramètres de base de notre plan directeur. Vous n'en ferez probablement pas trop ici. La plupart des plans ont des paramètres de classe très similaires. Vous pouvez également régler l'angle des vignettes. Vous pouvez donc modifier l'angle de la caméra pour la vignette lorsque le navigateur de contenu, si le vôtre avait un téléphone. Maintenant, nous pouvons également ajouter des interfaces qui seront une vidéo séparée complète qui entrera dans. Mais si vous voulez trouver les interfaces qui se trouvent dans les paramètres de classe ci-dessous. Ensuite, nous avons les valeurs par défaut des classes. C'est ici que se trouvent tous nos paramètres de plans. Donc parce que nous avons commencé avec un acteur, les acteurs ont un tas de réglages supplémentaires qui leur sont fournis. Quatre réplications multijoueurs pour notre technologie, qui est notre techno ici, qui exécute chaque image, nous pouvons y apporter quelques ajustements. Nous avons des paramètres de collision, des paramètres de rendu, etc. Nous y reviendrons un peu plus en détail dans les prochaines vidéos. Si jamais vous voulez savoir si un peu plus de détails, ce que font les choses, vous pouvez toujours survoler le nom et cela nous donne une idée précise. Si nous devions créer une nouvelle variable, disons que je vais ajouter et que je n'ai tout simplement pas créé de nouvelle variable. Appelons ça un test. Si nous passons maintenant aux valeurs par défaut de classe, nous trouvons le, oh, nous devons d'abord compiler parce qu'il n' apparaîtra pas tant que nous récupéré ses valeurs par défaut de classe. Nous allons revenir en haut de la page. Vous pouvez voir par défaut que nous avons maintenant notre variable de test. C'est là que nous pouvons voir toutes les valeurs par défaut de nos variables. Et ce sont les valeurs avec lesquelles le plan directeur commencera lorsqu'il sera créé. Je peux donc l'activer et le désactiver ici également. Nous avons également une barre de recherche haut, ce qui est très utile, surtout si vous avez beaucoup de variables dans votre plan ou si vous utilisez le plan de quelqu'un d'autre, vous essayez de trouver un réglage. Vous pouvez rechercher des mots clés ici pour trouver l'option dont vous avez besoin. Ensuite, nous avons les boutons de simulation et de lecture. Ceux-ci démarrent simplement le mode de lecture d'un éditeur. Si j'appuie sur le bouton de lecture, vous pouvez voir que la fenêtre de l' éditeur de plan s' ouvre. Ensuite, nous avons déposé le débogage. Maintenant, c'est une fonctionnalité vraiment intéressante des plans. J'aurai une vidéo complète sur le débogage et certaines des fonctionnalités fournies par le moteur. Mais juste pour vous donner un exemple de ce que cela fait, si je connecte ma chaîne d'impression ici à la technologie. Maintenant, cela exécute chaque image exécutée par le jeu. Donc, si je vais sur notre carte, je vais simplement faire glisser le plan vidéo M. J'appuie sur Lecture. Vous pouvez voir que le halo tourne encore et encore pour chaque image dessinée. Et si je vais au plan vidéo, parce que j'ai sélectionné des plans vidéo ici. Vous pouvez voir qu'il m'indique le code en cours d'exécution. Tout est mis en évidence. Cela me dit que la note technique est en cours d'exécution et qu'elle exécute la chaîne d'impression. Et cela peut être très utile lorsque vous avez de grands plans, vous pouvez voir exactement quel code est en cours d'exécution. Pour l'instant, nous allons juste faire une pause qui supprimera notre chaîne d' impression ici. Et cela supprimera également nos plans vidéo de notre niveau. Juste pour que nous prenions un bon départ et que nous revenions à notre plan directeur. Une autre chose que je voulais mentionner à propos des résultats de la recherche, en fait, si nous revenons à la recherche, vous pouvez voir que notre fenêtre est toujours ouverte ici. Si nous cliquons sur ce petit bouton ici, rechercherons réellement tous les plans et notre projet pour notre phrase de recherche. Donc, si je clique dessus, vous pouvez voir qu' il trouve en fait beaucoup d'écrans d'impression. Je suis désolé, Print String nœuds autour de nos projets. Et ce sont en fait des plans intégrés au moteur. Vous pouvez donc voir qu'il a été recherché tous les plans et qu'il nous indique exactement où les chaînes d'impression sont utilisées tout au long de notre projet. Cela peut être très utile si vous essayez à nouveau de retrouver quelque chose. Vous pouvez rechercher tous vos plans en une seule fois. Ensuite, nous allons examiner le script de construction. Si je ferme ma fenêtre de recherche de plans et que nous pouvons accéder aux fonctions, vous avez peut-être remarqué le script de construction qui est présent par défaut, il est intégré à l'acteur. Nous double-cliquons pour accéder à notre script de construction. Et ici, nous pouvons ajouter du code qui sera exécuté lorsque nous ferons glisser notre plan dans le niveau. C'est donc très pratique si vous créez des outils de conception de niveau et des choses comme ça, peut-être que vous voulez randomiser la couleur d' élément à chaque fois que vous le faites glisser dans le niveau. Le script de construction est très utile pour cela. Maintenant, si jamais l'une de ces fenêtres disparaît ou indique que vous la fermez par accident, ce n'est pas un problème. Vous pouvez toujours accéder au menu déroulant des fenêtres ici. Et ici, vous pouvez prendre part à n'importe lequel de ces panels que nous avons examinés aujourd'hui. Vous pouvez donc l'éteindre. Donc, par exemple, si je ferme mes composants, je peux simplement rouvrir le panneau Composants et je vais simplement revenir en arrière. La dernière chose que je voulais souligner, c'est la barre d'adresse qui se trouve en haut. Cela indiquera toujours quel modèle urine, je porte ce plan que vous êtes. C'est très utile si vous suivez tutoriels ou des captures d'écran ou quoi que ce soit Cela vaut toujours la peine d'y jeter un coup d'œil, vous assurer que vous êtes sur le bon plan et dire également le nom de la fonction ou le nom du graphe d'événements. Donc, si je vais dans Event Graph, disons Event Graph, qui vous indiquera exactement où vous êtes ou si vous suivez une vidéo ou une image, vous pouvez voir exactement où ils se trouvent dans ces vidéos. Ce sera donc tout pour cette leçon. J'espère que vous avez maintenant une compréhension de base des penseurs et de l'éditeur de Blueprint. 4. Intro (flux d'événements): Bonjour à tous, Dans cette leçon je vais vous expliquer comment les nœuds Blueprint s'exécutent et l'ordre dans lequel ils s'exécutent. Pour commencer. J'ai mis en place quelques exemples ici dans notre plan de personnage ThirdPersonCharacter. Et je vais juste vous parler de cela et vous expliquer ce que chacun fait. Donc, pour commencer, nous avons commencé à jouer l'événement. Il s'agit maintenant d'un événement intégré au moteur et qui s' exécutera chaque fois que le jeu démarrera ou lorsque le plan sera créé. Ce qui va se passer ici, c'est que notre événement commence à jouer qui indiquera à notre joueur un jeu, jouera un son maintenant pour qu'il fonctionne. Maintenant, il s'agit d'un événement personnalisé que j'ai créé moi-même. Et si nous descendons ici, vous pouvez voir que nous avons le son du Play Player. Je vais donc commencer à jouer ou au cube. Il exécutera notre jeu, jouera un nœud sonore et exécutera notre son de lecture sur place. Et le son qui jouera sera là où se trouve notre entrée audio. Ce sera donc le son de départ. Ensuite, il émettra ce son à l' emplacement que nous fournissons. C'est donc l'emplacement de l' acteur get, qui sera l' emplacement de notre personnage. Ensuite, une fois que le son est joué, notre sortie joue un son. Cool. Nous allons courir. Cela se produit chaque fois que la chaîne d'exécution n' a plus de nœuds à exécuter. Ce que cela fera alors, c'est nous définirons notre valeur de santé n'importe quelle valeur de départ car le code s'exécute généralement de gauche à droite. Et si nous touchons un événement, cool, nous exécuterons le code qui est connecté à cet événement. Ensuite, nous reprendrons l'exécution du code avec notre événement d'origine. Ensuite, nous avons la note technique de l' événement. Maintenant, il s'agit d'un nœud très couramment utilisé par les débutants. Et la raison en est qu'il exécute chaque image de votre jeu. Ainsi, chaque fois que votre carte graphique dessine un cadre, cet événement se déroulera. Le problème, c'est que les gens ont tendance à attacher beaucoup de code à ce nœud. Et cela peut commencer à ralentir votre projet très rapidement, car en général, la plupart du code n' a pas besoin d'être exécuté à chaque image. Nous voulons utiliser des éléments tels que les entrées du lecteur, les minuteries et diverses autres méthodes d'exécution de ce code. Au lieu de chaque image, nous l'exécutons parce que c' est ainsi que vous obtenez de mauvaises performances dans votre jeu. Mais pour cet exemple, je viens de prendre un code très simple. J'ai une valeur numérique. Ensuite, nous traçons un par rapport à cette valeur numérique, puis nous définissons cette valeur numérique. Chaque fois qu'une image est tirée de notre jeu, nous augmentons la valeur de notre numéro d'une unité. Et puis je dois juste imprimer le nœud de chaîne ici. Donc, cela prendra la valeur numérique, elle la convertit en une chaîne, qui est essentiellement du texte. Ensuite, nous imprimons cette valeur sur l'écran du lecteur. Je reviendrai plus en détail sur ces événements lorsque nous créerons quelques exemples. Mais pour l'instant, je veux juste expliquer les différents types d'événements et comment ils exécutent le code. Ensuite, nous avons le saut d'action d'entrée. Maintenant, il s'agit d'un nœud qui s'exécutera chaque fois que joueur appuiera sur l'entrée de saut. Par défaut, il s'agit de la touche espace. Et la raison en est que si nous allons modifier et aller dans Paramètres du projet, alors je vais aller dans Input ici. Nous allons passer à Action Mappings. Vous pouvez voir que nous avons ici un mappage d'action qui dit saut. Si je clique sur la flèche vers le bas, vous pouvez voir que la barre d'espace est définie ici. Il s'agit donc d'une entrée par défaut pour le projet ThirdPersonCharacter. C'est pourquoi c'est déjà là pour nous. Donc, quand je reviens à notre plan ThirdPersonCharacter, c'est pourquoi il est dit que le saut d' action d'entrée est dû au fait que entrées ont déjà été configurées dans nos mappings d'action. Et ce que cela fait en gros, c'est quand j' appuie sur Espace, que j'appuie sur Will, Will, Will, Run, et cela fera sauter notre personnage. Et quand je relâche, ça refroidit le stop jump. Maintenant, les actions de saisie sont essentiellement la façon dont vous prenez les entrées d'un joueur et nous pouvons exécuter code à l'aide de cette entrée qui affectera davantage les impactions dans une leçon future. Il existe également un nouveau système d'entrée amélioré fourni avec Unreal Engine 5. Nous allons donc également nous pencher là-dessus. Une autre façon d'exécuter du code via entrées du Lecteur consiste à utiliser les nœuds d'événements d'entrée. Donc, si je fais un clic droit et que je cherche un nom de clavier, dites Entrée. Et nous pouvons les faire défiler et sous les événements clavier, nous pouvons trouver la touche Entrée. Maintenant, c'est similaire à notre action de saisie Jump. Nous avons Oppressed, qui exécutera le code qui y est connecté lorsque la touche Entrée est pressée et relâchée lorsque le code sera exécuté, lorsque la touche est relâchée. Maintenant, il s'agit davantage de débogage et de prototypage rapide. Nous les utiliserons un peu plus tard dans le cours, simplement parce qu'ils sont plus rapides que les paramètres de notre projet. Mais en général, vous n'utiliseriez pas ces nœuds. Lors de la configuration des raccourcis clavier finaux d'un jeu, vous utilisiez les actions de saisie que je vous ai montrées précédemment. Ensuite, nous avons les nœuds de dégâts, qui se trouvent ici. Et cet événement est intégré au moteur. Et cela nous permet de dire à notre ThirdPersonCharacter qu'il a subi des dégâts d'autres plans. Et ces autres plans peuvent également fournir une valeur endommagée, similaire à la façon dont nous avons appelé notre événement play a sound ici, et nous avons fourni un son de départ. Ensuite, notre jeu, joue un événement sonore ici, utilise ce son de départ et joue un son à un endroit donné. Ceci est similaire en ce sens que l'autre plan peut appeler l'ennemi n'importe quel dommage de m, il peut fournir une valeur de dégâts. Et maintenant, dans notre plan de personnage de troisième personne, nous pouvons utiliser cette valeur de dégâts pour soustraire de notre santé actuelle. Maintenant, tout événement de dégâts appelle une fonction appelée diminution de la santé. Maintenant, j'ai créé cette fonction moi-même. Et ne vous inquiétez pas si vous ne savez pas ce qu'est une fonction, nous en parlerons dans une prochaine leçon. Mais une fonction est essentiellement un nœud qui contient d'autres nœuds et ce nœud est réutilisable. Nous pouvons donc réutiliser ce code à plusieurs endroits et dans notre projet. Donc, si je double-clique, cette fonction nous emmènera dans la fonction elle-même. Et vous pouvez voir que cette fonction contient tous ces nœuds. Maintenant, cela va s'exécuter de la même manière que notre graphe d'événements. Il s'exécutera donc de gauche à droite. Et puis une fois qu'il arrive à la fin, le nœud sera terminé. Donc, pour commencer, nous allons prendre notre valeur de santé actuelle et cela soustraira la valeur de dégâts que nous avons reçue de tous les dégâts qu'ils ont subis. Ensuite, il définira notre nouvelle vallée de la santé actuelle. Ensuite, nous réglons, ou désolé, nous vérifions si notre santé actuelle est inférieure ou égale à 0 ? S'il est inférieur à 0 ou égal à 0, alors nous lançons le nœud Play play sound et nous lui demandons d' exécuter le son sourd. Comme vous pouvez le voir, nous réutilisons notre jeu, nous jouons un nœud sonore. Et cette fois, nous lui disons que nous voulons jouer le son sourd. Ensuite, une fois que notre son a été joué, nous disons à l' acteur de se détruire lui-même, ce qui dit essentiellement à l'acteur de se retirer complètement du niveau. Ou si j'espère est supérieur à 0, nous le disons, nous tournons notre jeu, jouons un nœud sonore pour jouer le son Hertz au lieu du son sourd. Maintenant, si notre nœud Destroy Actor fonctionne ou si notre jeu joue un son avec le son Hertz, vous pouvez voir qu'ils n' ont plus de sorties. Ce qui va se passer alors, c'est que notre fonction est maintenant terminée. Donc, si nous avions du code supplémentaire connecté à la sortie de notre fonction, cela s'exécuterait alors. Nous ne le savons pas. Cette chaîne d'exécution vient donc de se terminer avec une diminution de la fonction de santé. Ce sera tout pour cette leçon. J'espère que vous comprenez maintenant ce qui provoque l' exécution du code Blueprint et l'ordre dans lequel les choses s'exécutent généralement. Ne vous inquiétez pas trop si vous ne comprenez pas encore parfaitement les fonctions ou les événements, nous les aborderons dans des leçons séparées à l'avenir. C'était juste de comprendre comment le code s'exécute réellement et ce qui le provoque. 5. Variables (aperçu): Bonjour à tous, Dans cette leçon, je vais juste expliquer ce que sont les variables et à quoi elles servent. Les variables sont simplement un moyen de stocker des informations. Comme il existe de nombreux types d'informations différents, il existe donc de nombreux types de variables différents. Dans les prochaines leçons, je vais simplement vous présenter certaines des variables les plus couramment utilisées. Nous allons apprendre comment changer leurs valeurs. Et nous allons également couvrir quelques exemples de base choses courantes pour lesquelles ils seront utilisés. Pour commencer, nous allons créer une nouvelle variable. Et pour ce faire, nous allons nous rendre sur notre nouveau panneau Plan directeur. Et il y a deux façons de procéder. Nous pouvons cliquer sur le petit bouton plus à côté de l'onglet variables et créer une nouvelle variable de cette façon. Ou nous pouvons aller jusqu' au bouton Ajouter ici et sélectionner le bouton variable ici, ce qui créera également une nouvelle variable. Maintenant, une fois que nous aurons créé une nouvelle variable, pourrons la renommer. Donc pour cette variable, je vais simplement l' appeler new variable. Ici. Nous pouvons également définir nos types de variables. La valeur par défaut est donc une valeur booléenne. Un booléen est simplement une variable vraie ou fausse, elle stocke donc une valeur vraie ou fausse. Maintenant que notre variable est sélectionnée, nous pouvons l'ajouter au panneau Détails. Si vous n'avez pas le panneau Détails, vous pouvez toujours l'afficher en accédant à Windows et en sélectionnant la hanche du panneau Détails. Du jour au lendemain dans le panneau Détails, nous avons les noms de nos variables afin que nous puissions renommer notre variable quand nous le voulons. Nous pouvons définir le type de variable. Maintenant, si je sélectionne la flèche vers le bas, vous verrez certains des types de variables les plus couramment utilisés que nous aborderons dans les leçons à venir. Il y en a d'autres et des listes déroulantes. Nous ne les aborderons pas dans le cours parce qu'ils sont très nombreux. Mais j'expliquerai ce qu'ils sont et à quoi ils servent dans une prochaine leçon. Maintenant, nous avons une valeur par défaut ici. Il s'agit essentiellement de la valeur de départ de notre variable. Pour le moment, il n'a pas vraiment d'option ici. Il indique simplement s'il vous plaît compiler le plan. C'est parce que c'est une nouvelle variable pour que ce paramètre apparaisse, nous devons compiler. Je vais donc simplement compiler ici. Vous pouvez voir que nous avons maintenant cette case à cocher que nous pouvons activer et désactiver. Et c'est parce qu'un booléen est une valeur vraie ou fausse. Nous pouvons donc définir où commence cette variable par une valeur vraie ou une valeur fausse. Maintenant, il y avait aussi quelques paramètres supplémentaires ici. Ne vous inquiétez pas trop à ce sujet pour le moment, nous en parlerons dans une prochaine leçon. Maintenant, une grande partie des variables est que nous pouvons obtenir les informations qui y sont stockées lorsque nous écrivons du code et que nous pouvons les modifier. Il existe donc différentes manières d' obtenir les données de vos variables. Nous pouvons donc soit le faire glisser directement dans notre graphique d'événements à partir de la liste déroulante de mon panneau de plan directeur et nous obtenons une option pour obtenir une nouvelle variable ou définir une nouvelle variable. Nous pouvons donc faire un écart qui nous donnera ce nœud get ici. À l'aide de ce nœud, nous pouvons obtenir la valeur actuelle sur laquelle notre nouvelle variable est définie. Maintenant, nous pouvons également faire glisser et définir, ce qui nous permet de modifier la valeur actuelle de notre variable. Ces notes seront parfois différentes selon le type de variable. Parce que c'est un booléen, il y a une petite case à cocher ici. Nous pouvons l'allumer et l'éteindre. Mais disons que s'il s'agissait d'une variable dans laquelle nous stockons un nombre, nous n'aurions pas la case à cocher ici. Maintenant, une autre façon de le faire est de faire glisser notre nouvelle variable Si j'appuie sur Ctrl sur mon clavier et que je relâche le bouton gauche de la souris, créez instantanément un nœud pour nous. Et nous pouvons également faire glisser et maintenir le bouton Alt enfoncé et le relâcher. Et cela nous donnera un ensemble de nœuds. Donc au lieu d'avoir à utiliser ce petit menu, vous pouvez également utiliser des raccourcis clavier. Une autre façon de créer les variables dans notre graphique d'événements est de cliquer avec le bouton droit rechercher une nouvelle variable et d'appuyer simplement sur Entrée. Et nous avons notre nœud get et nous pouvons faire la même chose avec SAP. Je peux donc simplement rechercher une nouvelle variable. Et vous pouvez voir que c'est arrivé là-haut et nous pouvons simplement le créer également. Ainsi, peu importe la méthode que vous utilisez pour créer vos variables dans le graphique d'événements, celle qui vous convient le mieux, vous pouvez simplement l'utiliser. Maintenant, selon le temps que vous avez déjà passé dans le moteur, vous pouvez ou non savoir quelles variables peuvent être intégrées à d'autres variables. Par exemple, si je crée une nouvelle variable ici, je vais simplement appeler celle-ci de la variable. Et je vais laisser ça comme un booléen, me battre, le glisser dans notre graphique d'événements et je vais l'obtenir. Je peux en fait brancher cette autre variable dans mon nouveau nœud de jeu de variables. Et je vais juste déplacer celui-ci de mon chemin. Et ce que cela fera, c'est qu'il prendra n'importe quelle valeur d'une variable, et il indiquera à notre nouvelle variable d'être cette valeur. Donc, si nous avions ce nœud en cours d'exécution, disons, sur Beginning play, donc je vais simplement commencer à jouer à Notre. Branchez ça. Maintenant, lorsque le jeu commencera, notre nouvelle variable sera définie sur l' autre valeur définie par l'autre variable. Donc, si je sélectionne mon autre variable, vous pouvez voir que je dois compiler mon plan, donc je vais le faire. Donc, si je définis les autres variables, valeur par défaut est true, et si je vais à ma nouvelle variable, sa valeur par défaut est false. Maintenant, cela va indiquer à notre nouvelle variable qu'elle est maintenant vraie. Et nous pouvons vérifier cela si j' ajoute rapidement une chaîne d'impression, connecte la sortie de mon nouveau nœud de jeu de variables à l'entrée de chaîne. Et cette sortie est fondamentalement identique à celle d'un nœud. Donc, juste pour garder votre code propre ou vous pouvez l'utiliser au lieu d'avoir à créer un nouveau nœud. Donc maintenant, quand le jeu commence, nous nous attendons à ce que notre chaîne d'impression soit vraie parce que c'est sur cela que notre autre voyelle, autre variable est définie. Donc, si je peux tirer et que j'appuie sur Play, vous pouvez voir que l'impression est vraie. Et si je devais changer mon autre variable en false, vous verrez que lorsque nous appuierons sur play, elle indique false. Ce sera donc tout pour cette vidéo. Dans les prochaines leçons, nous allons découvrir des types de variables spécifiques et certains nœuds couramment utilisés avec ces variables. 6. Variables (booléennes): Salut tout le monde. Dans cette leçon, nous allons examiner de plus près les booléens. Les variables booléennes sont utilisées pour stocker une valeur vraie ou fausse, mais elles peuvent également être utilisées pour contrôler code en cours d' exécution dans votre projet. Et ils peuvent également être le résultat de certains tests. Ainsi, par exemple, si nous vérifiions que a est supérieur à b, le résultat de ce test serait un booléen car il serait soit vrai soit faux. Pour commencer, je vais créer quelques exemples de la façon dont les booléens peuvent contrôler le code en cours d'exécution. Et nous allons le faire et nous avons besoin d' plan de personnage de troisième personne. Je vais donc simplement ouvrir ça. Ici, nous allons créer de nouvelles variables. Donc, dans mon panneau de plans, cliquez sur le bouton Nouvelle variable, et je vais appeler mon exemple Boolean. Et le mien est déjà défini sur Boolean, mais si le vôtre ne l'est pas, vous pouvez simplement cliquer sur le menu déroulant ici et sélectionner le type booléen. Et nous allons compiler pour que nos valeurs par défaut apparaissent dans le panneau Détails ici. Si jamais vous manquez l' un de ces panneaux, vous pouvez toujours les activer et les fenêtres déroulantes ici. Nous allons laisser la valeur par défaut false parce que nous allons la modifier en utilisant du code. Nous allons donc commencer par créer un nœud de tick. Nous allons donc cliquer avec le bouton droit sur le graphique d' événement, rechercher technologie et créer l'événement tick. Maintenant, si vous vous souvenez de notre leçon précédente, il s'exécute chaque fois qu'une image est tirée de notre jeu. Ensuite, nous allons obtenir notre exemple de booléens. Et nous allons nous en éloigner et nous allons chercher du grunge. Si nous l'épelons correctement, nous pouvons rechercher des marques et créer ce nœud connecté à notre technologie événementielle. Donc maintenant, chaque trame, ce nœud de branche va s'exécuter. Ce qu'un nœud de branche fait, c'est simplement vérifier la variable booléenne qui y est branchée et s'exécute soit vrai soit faux selon que la variable booléenne est vraie ou fausse. Pour commencer, nous allons simplement créer des chaînes d'impression. Nous allons donc nous éloigner du vrai. Nous rechercherons la chaîne d'impression. Et il s'agit simplement d'un nœud qui affichera du texte sur l'écran de notre lecteur chaque fois qu'il sera lancé. Je vais donc dire que je vais régler cela sur vrai. Et je vais copier et coller ceci et le connecter au faux. Et je vais juste régler ça sur false. Et cela signifiera simplement que lorsque notre véritable épingle sera exécutée sur l'écran et que notre faux stylo sera lancé, les gens courront sur l'écran. Je vais donc vous montrer maintenant, la valeur par défaut est toujours fausse. Nous devrions donc nous attendre à ce que les gens se lancent quand nous le planifierons, l'éditeur appuiera sur Play et vous pouvez voir que false est en cours Si nous acceptons, nous changeons notre booléen en vrai et nous appuyons sur Play. Vous pouvez voir que true est en cours d'exécution. Ce qui est cool avec les plans, c'est que nous pouvons voir ce code s'exécuter en temps réel. Donc, si je retourne à mon ThirdPersonCharacter alors que le jeu est encore en cours d'exécution, vous pouvez voir le menu déroulant de débogage ici. Et si je sélectionne le ThirdPersonCharacter, nous n'avons qu'une seule option car il n'y a qu'un seul plan ThirdPersonCharacter dans le niveau. Nous allons donc simplement collecter cela. Vous pouvez voir que nœud Arctic exécute chaque trame qui exécute notre branche, ce qui vérifie notre exemple booléen. Et si nous l'enregistrons maintenant, vous pouvez voir qu'il dit vrai. Donc, true est en cours d'exécution sur notre chaîne d'impression en cours d'exécution et l'impression est vraie. Nous voulons maintenant pouvoir modifier notre valeur booléenne pendant jeu afin de pouvoir changer le code à exécuter. Nous allons donc quitter notre mode de jeu. Et nous allons créer un nouveau nœud d'entrée. Et je vais chercher le bouton gauche de la souris. Et cela sera lancé chaque fois que vous appuyez sur le bouton gauche de la souris. Ensuite, le release sera lancé chaque fois que le bouton gauche de la souris est relâché, il sera déplacé et nous allons utiliser un nœud de branche. Maintenant, il existe plusieurs façons créer des nœuds de branche. L'une d'elles consiste à maintenir la touche B de votre clavier enfoncée, puis à cliquer avec le bouton gauche de la souris voir que cela crée un nœud de branche ou vous pouvez cliquer avec le bouton droit de la souris et le rechercher. Cela fait également apparaître le nœud de branche. Vous pouvez également rechercher un brunch. Et cela fait également apparaître les nœuds de branche, selon ce qui vous convient le mieux. Nous allons connecter cela à la presse. Nous allons récupérer notre exemple booléen et l' intégrer à la condition. Vous pouvez voir que je le fais glisser directement et qu'il le connectera automatiquement à nous, au nœud de la branche pour nous. Et ce que nous voulons arriver ici c'est que lorsque le bouton gauche de la souris est enfoncé, si notre variable booléenne actuelle est vraie, nous voulons la définir sur false. Donc je vais juste le brancher false et voir si je le fais glisser sur true, il se connectera automatiquement. Nous voulons donc qu'il soit défini sur false si c'est déjà vrai. Et nous allons copier et coller ce sous-marin connecté sur false. Et si notre valeur actuelle est fausse, nous voulons la définir sur true. Cela devrait donc ressembler à ceci. Je vais compiler ça. Maintenant, nous pouvons le tester. Et encore une fois, je vais appuyer sur Play. Vous pouvez voir que c'est vrai actuellement parce que c'est notre valeur par défaut. Si j'appuie sur le bouton gauche de la souris, cela devient faux. Et si je continue d'appuyer dessus, vous pouvez voir qu'il change la chaîne d'impression. Il existe maintenant quelques autres nœuds couramment utilisés avec Boolean. Je veux donc vous montrer, si nous revenons à notre plan ThirdPersonCharacter, nous prenons notre exemple booléen et nous en sortons et nous recherchons tous. Vous pouvez voir que nous avons quelques nœuds ou différents. Je vais donc utiliser le nœud booléen OR. Et vous pouvez voir que cela nous donne deux entrées pour le booléen. Et puis une sortie que je veux savoir est essentiellement de vérifier, est-ce que l'une de ses entrées est vraie ? Si c'est le cas, il retournera vrai. S'ils sont tous faux, il retournera faux. Et nous pouvons ajouter plusieurs entrées. Nous pourrions donc ajouter des entrées supplémentaires si nous le voulions. Par exemple, notre exemple booléen est coché sur true, mais tous les autres sont faux. Ainsi, cela fonctionnera toujours ou, ou Node ou sera toujours affiché comme vrai. Nous pouvons donc tester cela. Vous pouvez voir que c'est vrai. Mais si je change d'exemple, booléen vrai, faux. Toutes ses entrées sont désormais fausses. Nous allons donc maintenant retourner false. Vous pouvez voir maintenant que le résultat est faux. Une note similaire est celle des ventres. Donc, si nous supprimons notre off maintenant, nous allons à nouveau faire glisser notre exemple booléen et rechercher et sélectionner le nœud booléen. Et cela fonctionne de la même manière. Elle prend plusieurs entrées booléennes et renvoie une sortie booléenne. Et ce que cela fait, c'est que toutes les entrées doivent être vraies pour que la sortie soit vraie. Donc, pour l'instant, notre exemple booléen est faux et celui-ci est également non typé, donc c'est faux. Mais si je change mon exemple booléen en vrai, nous avons maintenant une entrée vraie et une fausse entrée. Maintenant, la sortie sera fausse parce que les deux ne sont pas vrais. Pour que nous puissions tester cela, appuyez sur Play. Tu peux voir que c'est faux. Mais si nous acceptons et que je coche cette option, maintenant qu'ils sont tous les deux vrais, cela produira vrai C. Maintenant, ce sont des notes que vous utiliserez très souvent avec des nœuds de branche et elles peuvent vous éviterez d'avoir plusieurs nœuds de branche si vous testez plus d'une variable. Par exemple, si vous avez besoin que les variables libres soient vraies avant de vouloir qu'un nœud de branche s'exécute, vous devez utiliser une anode. Un autre nœud couramment utilisé est le nœud. Donc si nous traînons et que nous ne cherchons rien, nous pouvons utiliser, Voyons voir, PAS booléen. Et cela convertit ou change fondamentalement ou booléen à l'opposé de ce qu' il est actuellement. Donc, si je connecte cela, actuellement notre booléen est coché pour l'arbre, mais cela inversera cela et le rendra renard. Nous pouvons donc voir que c'est définitivement réglé sur true, mais ça va faire tourner les gens. Vous voyez, si nous revenons en arrière et que nous définissons ceci sur false maintenant, le nœud ne le convertira , maintenant, le nœud ne le convertira pas et le rendra vrai alors que le code vrai s'exécutera. Maintenant, il y a une autre note que je voudrais vous montrer, c'est le nœud égal. Donc, il va supprimer le nœud ne sont pas maintenant et je vais faire glisser, et je vais chercher égal. Faites un ou deux égaux. J'aime le faire aussi, parce que cela donne généralement la forme exacte que nous voulons. Et c'est r égal note ici, vous pouvez voir qu'il a deux entrées booléennes et une sortie booléenne. Si je connecte cela à notre note de brunch ici, cela signifie essentiellement que nos deux entrées doivent être exactement les mêmes. Actuellement, ils sont tous les deux faux. Notre exemple booléen est donc défini sur false et sa seconde entrée est définie sur false. Ce sera donc vrai parce qu'ils ont tous les deux exactement la même valeur. Nous pouvons donc tester cela en jeu. En C. C'est vrai même si nos valeurs sont réellement fausses. Et si je devais définir notre exemple booléen sur true, mais laisser cette valeur est fausse. Elle sera exécutée sur false parce qu'ils n'ont plus la même valeur. Et nous pouvons vérifier cela à nouveau. Appuyez sur Play. Vous pouvez voir que les gens courent. Maintenant, en passant, vous E5, si vous deviez créer ces nœuds que je vous ai montrés sans les faire glisser depuis un booléen, ils n'auraient pas ces entrées et sorties rouges. Donc, par exemple, si je recherche r equals note ici, vous pouvez voir qu'il a une sortie booléenne car un nœud égal retournera toujours vrai ou faux. Mais ces entrées sont grisées. Et le caractère générique, ce qui signifie qu'ils peuvent être de n'importe quel type de variable. quelques façons de les convertir en type booléen. Nous pouvons donc soit simplement faire glisser notre exemple booléen, connecter et il le convertira automatiquement pour nous. Ou nous pouvons cliquer avec le bouton droit sur ces penta grisés, aller à convertir la broche. Vous pouvez voir que nous pouvons le changer pour de nombreux types de variables différents. Mais vous pouvez voir que nous avons notre option booléenne ici, nous pouvons donc la sélectionner. Et il convertit maintenant notre nœud en ce type booléen. Ce sera donc tout pour notre leçon sur les booléens. Nous les utiliserons beaucoup plus dans les prochaines leçons car les booléens sont une partie assez intéressante du codage. Ne vous inquiétez pas trop si vous ne vous souvenez pas de tous les nœuds que nous avons utilisés à nouveau, nous les utiliserons beaucoup plus dans les prochaines leçons. 7. Variables (entiers et flotteurs): Salut tout le monde. Dans cette leçon, nous allons aborder les types de variables flottantes et entières. Désormais, les variables flottantes et entières sont utilisées pour stocker des valeurs numériques. La différence entre les deux est entiers ne peuvent stocker que des nombres entiers, ce qui signifie qu'ils ne peuvent pas avoir de valeur décimale, alors qu'un float peut stocker des nombres qui ont une valeur décimale. Les deux peuvent stocker des valeurs positives et négatives. Nous allons donc commencer par créer deux nouveaux types de variables. Je vais créer deux nouvelles variables. Le premier que j'appellerai simplement example float, et le second, je l' appellerai example en entier, changera les types de sorte que nous voulons entier. Ensuite, pour notre exemple float, nous allons sélectionner float sur quel compilateur. Maintenant que notre exemple d' entiers est sélectionné, vous pouvez voir que dans la valeur par défaut nous pouvons définir une valeur numérique. Je peux donc définir 99, par exemple, mais je peux ajouter un point décimal et une valeur décimale. Disons que si j'essayais de le faire, lorsque j'appuie sur Entrée, il est supprimé car un entier ne pouvait stocker que des nombres entiers. Alors que si je sélectionne ma variable flottante et que je passe à la valeur par défaut ici vous pouvez voir qu'elle a vraiment un 0 décimal. Et je peux régler cette main à 99,99, et vous pouvez voir que la valeur est enregistrée correctement. Ensuite, je vais vous montrer comment définir et obtenir nos variables flottantes et entières est très similaire à la façon dont nous travaillions avec notre booléen. Je vais donc passer rapidement en revue ce processus. Je vais simplement cliquer avec le bouton droit de la souris et créer une entrée par le bouton gauche de la souris, comme nous l'avons fait avec notre booléen. Et nous obtiendrons notre exemple d'étoile flottante avec, et nous allons simplement sélectionner Get Float dans notre sélection. Je vais juste choisir le nœud de chaîne d'impression. Et cela nous permettra simplement d' imprimer la chaîne de caractères de notre valeur actuelle. Lorsque nous le branchons dans la chaîne, il nous donne ce nœud supplémentaire. Tout ce qui est en train de faire est de convertir notre valeur de flûte en valeur de chaîne. Et une valeur de chaîne n'est que du texte. Cela permet à nos nœuds Print String d'imprimer réellement la valeur flottante. Donc maintenant, lorsque nous appuyons sur play et que je clique avec le bouton gauche de la souris, vous pouvez voir qu'il imprime notre valeur par défaut. Et le processus est le même pour notre entier. Nous pouvons simplement l'obtenir. Je vais le faire glisser directement dans notre entrée de chaîne. Et vous pouvez voir qu'il nous a donné un nœud différent, ressemble au premier, mais cela convertit un entier en chaîne de caractères. Je vais donc imprimer la chaîne pour l'afficher. Ensuite, quand nous appuyons sur play et que j'ai laissé la souris, vous pouvez voir que l'impression est maintenant une valeur entière. Ensuite, nous allons commencer à changer nos valeurs. Ce que nous pouvons faire, c'est cliquer avec le bouton droit de la souris et utiliser un nœud de graduation. À partir de là, nous allons augmenter notre valeur entière. Nous allons donc obtenir une valeur entière actuelle. On va traîner, on va utiliser le plus. Et il s'agit d'un nœud d'ajout. Et cela fonctionne à peu près comme vous pouvez l'imaginer. Il prend la valeur actuelle de notre entier et lui ajoute une certaine valeur. Je vais donc régler ça sur un. La sortie sera donc notre exemple actuel de valeur entière plus un. Ensuite, nous devons définir notre entier d'exemple. Je vais donc simplement faire glisser, faire SAP, brancher ceci dans notre nœud tick et brancher l'entrée dans notre nœud d'ajout. Donc maintenant, chaque image, notre entier d'exemple augmentera et lorsque nous laisserons le bouton de la souris, il affichera la valeur actuelle. Il va donc compiler et appuyer sur play. Donc, si je clique sur Plus, vous pouvez voir que c'est déjà 249. Et c'est parce que notre nœud de tick exécute chaque image. Cela va donc augmenter très rapidement. Et comme je clique, cette valeur augmente beaucoup. Ensuite, nous ferons la même chose avec notre valeur flottante. Nous allons donc revenir à notre plan de personnage, et nous allons supprimer ce code ici. Et nous ferons la même chose mais à flot. Nous allons donc traîner, faites-le. Connectez-le à notre nœud Tick. Ensuite, nous voulons obtenir l'exemple actuel float plus. Nous allons donc utiliser un nœud d'ajout et nous pouvons ajouter des nombres décimaux. Nous pourrions donc ajouter 1,25 et connecter la sortie à notre exemple float. Ainsi, à chaque image, nous prenons la valeur flottante actuelle plus 1,25. Et puis le résultat que nous donnons maintenant à notre exemple float. Ensuite, nous rebrancherons ici sur le bouton gauche de la souris, nous aurons notre chaîne d'impression, notre valeur flottante au lieu de notre valeur entière. Donc maintenant, lorsque nous appuyons sur play, nous pouvons cliquer et vous pouvez voir que le nombre augmente en décimales maintenant parce que nous utilisons notre flotteur. Ensuite, je vais vous présenter certains des nœuds les plus couramment utilisés avec des nombres flottants et des entiers. Maintenant, la raison pour laquelle nous faisons ces deux variables ensemble est parce qu'elles sont toutes deux un nombre de variables et qu'elles utilisent toutes deux des nœuds très similaires. Et ils peuvent également être combinés avec certains nœuds. Donc, si nous revenons à notre ThirdPersonCharacter, allons nous débarrasser de ce code ici pour nous donner un peu d'espace. Et nous allons commencer par les nœuds de base que nous utilisons déjà. Donc je vais juste obtenir à la fois float et integer. Maintenant, le premier est le nœud R plus, ajouter un nœud. Nous pouvons créer ce qui nous permet d'additionner les entrées ensemble. Et affiche le résultat. Nous pouvons ajouter de nouvelles épingles si nous le voulons, pour ajouter plusieurs variables ensemble. Nous pouvons également créer de nouvelles variables de flux telles que l'appeler un float. Réglez-le sur un flotteur. Nous pouvons boucher celui d' une variable flottante. Nous pouvons donc ajouter plusieurs variables de flux ensemble. Maintenant que vous avez cinq ans, nous pouvons modifier ces entrées deux types de variables différents. Supposons que je veuille ajouter mon exemple float et mon exemple entier ensemble. Nous pouvons le faire. Maintenant, si nous avons plusieurs épingles et que nous voulons les supprimer, nous pouvons simplement cliquer dessus avec le bouton droit de la souris et les supprimer. Je vais donc simplement supprimer ces deux éléments supplémentaires. Je souhaite donc combiner ces deux valeurs ensemble. Nous pouvons le faire maintenant. Nous pouvons donc cliquer avec le bouton droit de la souris ou une épingle supplémentaire, aller à convertir la broche et sélectionner entier Maintenant, nous pouvons brancher notre entier m. Et maintenant cela affichera le résultat de exemple float plus integer sous forme de float. Nous pouvons donc définir notre exemple float sur cette valeur. Maintenant, nous pouvons le tester dans le jeu si nous le voulons. On peut poser ça ici. Connectez-le à notre bouton gauche de la souris, brancher le résultat dans notre chaîne d'impression. Maintenant, nous allons dire ajouter 1,25, 1,25. Et nous allons ajouter à cela. Quand nous jouerons, nous nous attendons à ce que ce soit 3,25. Et elle augmente en fait parce que nous définissons cette valeur flottante. Ainsi, chaque fois que nous cliquons, nous augmentons la valeur car notre exemple flottant a été augmenté. Maintenant, ce processus de conversion d'une des broches en un entier peut être utilisé avec la plupart des nœuds que je vais vous montrer. Donc, si nous continuons, je vais prendre un autre exemple, les cheveux flottants. Si nous faisons glisser vers l'extérieur et que nous recherchons Multiplier, vous pouvez utiliser ce symbole ici, ou vous pouvez rechercher Multiplier. Cela nous donne un nœud de multiplication. Cela fonctionne comme vous l'imaginez probablement. Il prend les entrées, les multiplie ensemble et renvoie une sortie. Nous pouvons cliquer avec le bouton droit sur l' une des entrées et la convertir également en entier. Maintenant, vous avez peut-être remarqué que je fais pour que la sortie soit un float. La raison pour laquelle je fais cela est parce que si nous l'avons fait dans l' autre sens, donc si je copiais et collez mon entier ici, et que nous avons créé un nœud d'annonce. Si je le convertis en un float, vous pouvez voir que la sortie est maintenant changée en float même s'il s'agissait d'un entier. La raison pour laquelle cela se produit est parce que, s'il s'agissait d'une sortie entière, nous perdrions n'importe quelle valeur, quelle que soit la valeur décimale ou la variable flottante. Il change donc automatiquement cela maintenant en un flotteur. Donc, en continuant, nous avons multiplié le nœud. Nous pouvons également le faire avec notre entier. Donc, si je supprime cette note d'annonce ici en la faisant glisser, nous pouvons rechercher multiplier, multiplier le nœud, et cela nous donnera un nœud de multiplication entier. Nous avons également les nœuds de soustraction. Donc, si je supprime simplement ces notes, nous pouvons utiliser un nœud de soustraction. Et vous pouvez rechercher le symbole linéaire ici, ou vous pouvez rechercher soustraire. C'est à toi de décider. Et cela nous donne la même chose que notre nœud d'addition, mais il soustrait les entrées et renvoie les sorties. Encore une fois, nous pouvons convertir ces entrées en un entier, ou si nous le voulions sur un nœud entier, nous pourrions le convertir en un nombre à virgule flottante. Et comme auparavant, il a de nouveau converti la sortie en un float, car nous avons ajouté une entrée float. Ce sont donc les méthodes de base que nous pouvons utiliser pour manipuler les valeurs de nos variables. Nous pouvons définir ces nouvelles valeurs. Mais il existe également des moyens de vérifier nos variables. Donc si nous nous débarrassons de ces nœuds moins pour l'instant, il y a aussi des nœuds tels que le nœud supérieur à. Donc, si je fais glisser mon entier, je recherche supérieur à. Vous pouvez voir, nous pouvons soit rechercher plus. Donc, si je recherche plus grand, vous pouvez le voir apparaître, ou vous pouvez utiliser le symbole supérieur à et créer ce nœud. Cela nous donne deux entrées qui sont des entiers et une sortie booléenne. Donc, cela va essentiellement vérifier, est la valeur a, la valeur supérieure supérieure à la valeur b ou la valeur inférieure. Si c'est le cas, elle retournera un vrai booléen. Et s'il est faux, il renverra un faux booléen. Encore une fois, comme pour nos nœuds précédents, nous pouvons convertir les broches d'entrée. Donc, si je convertis, nous pouvons le changer en flottant. Nous pouvons donc vérifier notre entier est supérieur à notre valeur flottante. Et cela renverra toujours une valeur booléenne car ce sera toujours vrai ou faux. Nous pouvons faire la même chose avec moins de. Nous pouvons donc faire glisser depuis notre entier et faire le symbole inférieur à ou nous pouvons rechercher less. Et cela nous donne le même nœud mais inversé. Donc, si a est inférieur à b, alors il retournera vrai. Si a est supérieur à b, il retournera faux. Il existe également des nœuds supérieurs ou égaux. Donc, si je fais le symbole supérieur à en C, nous avons une plus grande égalité. Et cela vérifie simplement, a est supérieur à B ou est-ce que c'est le cas ? Identique à B. S'il est supérieur à b, il retournera vrai. S'il est identique à B, il retournera également vrai. Et s'il est inférieur à b, il retournera faux. Et puis nous avons le même nœud, mais avec moins de soleil également. Nous pouvons donc faire moins qu'égal. Et cela fait la même chose mais en sens inverse. A doit donc être identique à notre valeur inférieure ou inférieure à notre valeur inférieure. Et cela reviendra vrai. Maintenant, étant donné que ces nœuds génèrent une variable booléenne, nous pouvons en fait les utiliser pour dire variable booléenne comme nous avons fait dans notre leçon précédente. Donc, si je crée une nouvelle variable et que je l'appelle booléenne, nous pouvons utiliser ces nœuds supérieurs ou inférieurs à des nœuds pour définir une variable booléenne si nous le voulons. Nous pouvons également utiliser ces nœuds pour contrôler un nœud de branche. Donc, si je recherche une branche et que je crée un nœud Branch, comme nous l'avons fait dans notre dernière leçon, nous pouvons contrôler quel code est exécuté en fonction du résultat de notre supérieur ou inférieur à. Remarque. Une autre note que je voulais vous montrer est le nœud égal. Maintenant, cela fonctionne de la même manière notre nœud Boolean égal fonctionne. Si je fais glisser mon entier et que je fais les deux symboles égaux et vois que cela nous crée un nœud égal. Et cela vérifie essentiellement si ces deux entiers sont identiques et génère un booléen que nous pouvons ensuite utiliser sur des choses comme un nœud booléen asap ou un nœud de branche. Contrairement aux nœuds précédents, nous pouvons également convertir l'entrée en virgule flottante si nous le voulons. Nous pouvons choisir la double précision flottante parce que c'est ce qu'était notre variable. Nous pouvons relier notre exemple de flotteur à cela. Et cela va vérifier si notre entier est exactement le même que notre variable flottante ? Si c'est le cas, nous retournons vrai, s'ils sont différents de ce que nous renvoyons faux. Les entiers ont également un autre moyen contrôler le code en cours d'exécution. Donc, si je supprime ce code ici pour l'instant, et que je fais glisser notre exemple d'entier. Si je fais glisser et que je recherche switch, vous pouvez trouver switch on int. Cela nous donne une note qui nous permet contrôler quelle sortie est exécutée en fonction de notre valeur entière. Nos valeurs entières sont donc actuellement de deux. Nous avons un stylo par défaut. Donc, ce qui se passera si je laissais le bouton de la souris maintenant, c'est que notre stylo par défaut fonctionnerait et rien d'autre ne se passerait. Mais si nous ajoutons un nouveau stylo, vous pouvez voir qu'il a ajouté une épingle indiquant 0. Si j'ajoute quelques épingles supplémentaires, vous verrez que nous avons 012. Maintenant, si je devais appuyer sur le bouton gauche de la souris, les deux stylos fonctionneraient, car notre entier est réglé sur deux. Si je devais le changer en 0, notre stylo 0 fonctionnerait dans testis ou utiliserait une chaîne d'impression. Nous allons simplement régler ce paramètre sur 0. Je vais copier et coller ceci et nous allons définir celui-ci sur un et celui-ci sur deux. Maintenant, en fonction de l'entier que notre exemple est exécuté, les différentes sorties s' exécuteront si nous appuyons sur Play. Et j'ai laissé la souris, vous pouvez voir que 0 est en cours d'exécution parce que j'ai défini la valeur sur 0. Si je le règle sur un, alors notre chaîne sera exécutée et notre chaîne d'impression unique sera exécutée. Vous pouvez voir qu'un est en cours d'exécution. Cela peut être utile si vous souhaitez exécuter code différent en fonction de la valeur. Et si je devais définir cette valeur sur 99, il n'y a plus de sortie 99 broches. Ce qui va se passer à la place c'est que notre stylo par défaut s' exécutera simplement parce qu'il n'y a pas de sortie correspondante pour 99. Ensuite, si à un moment quelconque nous voulions supprimer certaines de ces sorties, nous pouvons simplement cliquer avec le bouton droit sur le pin et nous pouvons supprimer le stylo d'exécution pour les supprimer. Enfin, je veux vous montrer comment nous pouvons utiliser un float pour définir un entier. Maintenant, c'est un peu différent de la normale, car notre float peut avoir une valeur décimale gagnante, et notre entier ne peut pas stocker cette valeur. Nous devons donc arrondir vers le haut ou vers le bas ou flotter. Donc, si nous obtenons notre exemple float ici, nous définissons notre entier d'exemple. Nous connectons cela à notre bouton gauche de la souris ici. Nous pouvons faire glisser et brancher directement dans notre entier. Mais cela va nous donner ce nœud et cela arrondira à la hausse, à baisse ou à la valeur flottante. Donc, si c'est 1,25, cela arrondira cette valeur à un, puis un entier sera arrondi à un. Donc si j'ai ajouté une chaîne d'impression ici pour que nous puissions voir quel est le résultat dans le jeu. Nous nous attendons à ce que ce résultat soit un lorsque je quitte la souris, ce qui est le cas, et même si je règle cette valeur à 1,99, elle arrondira toujours la valeur vers le bas. Donc, si je clique à nouveau sur Lecture, vous pouvez voir qu'il arrondit toujours cette valeur à un. Mais il existe d'autres nœuds qui nous permettent d' arrondir float à un nombre entier différent. Donc, si nous revenons à notre tête de plan de personnage et que nous supprimons le nœud. C'est juste le nœud par défaut lorsque nous faisons glisser un nombre flottant vers un entier. Mais nous pouvons également sortir de notre char et rechercher une ronde. Et nous pouvons utiliser le nœud rond, qui arrondit simplement notre valeur flottante au nombre entier le plus proche. Donc, si je connecte ça ici, notre variable est actuellement 1.2. Quand nous avons laissé le bouton de la souris, nous nous attendions à arrondir à un. Donc, si nous appuyons sur Play, vous pouvez voir qu'il en imprime un. Et si je devais augmenter ce chiffre à 1,8, nous nous attendrions à ce qu'il arrondisse à deux. Vous voyez que cela fonctionne correctement. Maintenant, nous n'avons pas besoin ce même processus de conversion si nous voulons définir un nombre à virgule flottante sur un entier, car les nombres flottants peuvent très bien afficher des nombres entiers. Donc, si je devais supprimer ce code, nous mettrions notre float en place. Et nous avons obtenu notre entier d' exemple ici. Je vais simplement réutiliser cette variable. Si nous le branchons, vous pouvez voir qu'il nous donne juste cette petite note qui le convertit d'entier en flux. Et il n'y a pas d'arrondi car notre entier est un nombre entier. Et notre flotteur peut très bien stocker des nombres entiers. Vous pouvez donc voir notre entier, c'est 99. Quand nous avons laissé le bouton de la souris, cela changera notre flotteur pour ce soir. Je vais donc simplement le connecter à notre chaîne d'impression. Ainsi, lorsque nous cliquons sur play, vous verrez qu' il affiche 99 parce que c'est une valeur en virgule flottante, mais qu'elle est définie sur la valeur correcte de notre entier. Maintenant, il existe de nombreux autres nœuds mathématiques intégrés au moteur que nous n'aborderons pas dans cette leçon, car ils sont nombreux. Mais si nous sortons de notre entier, vous pouvez faire défiler vers le bas et trouver la masse. Vous pouvez y trouver toutes sortes de nœuds que vous pouvez utiliser si vous le souhaitez. La plupart d'entre eux sont assez spécifiques, donc vous ne les utiliserez probablement pas trop souvent. Mais ce que j'ai montré ici, ce sont les nœuds les plus couramment utilisés. Et vous pouvez faire exactement la même chose avec les flotteurs. Si je fais glisser de là et que nous faisons simplement défiler vers le bas, nous pouvons trouver le calcul. Vous pouvez voir qu'il y en a encore plus pour les flotteurs car ils sont un peu plus polyvalents car ils ont une virgule décimale. Ce sera donc tout pour cette leçon. Tout comme le booléen, nous utiliserons beaucoup plus les nombres flottants et les entiers dans les prochaines leçons, simplement parce qu'ils sont en quelque sorte la partie centrale de tout calcul dans le moteur. Vous allez donc vous familiariser avec eux à l'avenir. 8. Variables (noms, textes et chaînes): Salut tout le monde. Dans cette leçon, nous allons passer en revue les types de variable name, string et text. Toutes ces variables sont utilisées pour stocker du texte et présente certaines limites et avantages pour chaque type de variable leur utilisation présente certaines limites et avantages pour chaque type de variable. Tout d'abord, nous avons le type de variable name. Maintenant, il est utilisé pour stocker des textes que le joueur ne voit pas normalement. C'est plutôt pour référencer certaines choses dans le code. Ainsi, par exemple, lorsque nous voulons obtenir emplacement d'un os ou d'une socket, nous utiliserons une variable name pour indiquer au moteur pour quel os ou socket nous voulons obtenir des informations. De ce fait, la variable name est assez limitée. Il n'a pas besoin de tous les nœuds auxquels variables de chaînes et de textes ont accès. Nous allons donc commencer par créer notre variable name. Je vais donc simplement créer une nouvelle variable et j' appellerai cet exemple de nom. Nous allons définir notre type de variable sur la variable name. Et nous allons compiler. Une fois que c'est compilé, vous pouvez voir que nous avons notre valeur par défaut ici, et il ne s'agit que d'un manuel standard dans lequel nous pouvons entrer du texte. Pour que je puisse te dire bonjour. Il s'agit d'une variable de texte qui stocke ces informations. Comme vous pouvez vous y attendre, comme nos variables précédentes, nous pouvons également obtenir et définir cette variable. Nous pouvons donc le faire glisser et obtenir un nœud get, ou nous pouvons le faire glisser et lui obtenir un nœud set. Maintenant, la seule série différente qui est définie possède une zone de texte dans laquelle nous pouvons également entrer du texte manuellement si vous le souhaitez. Nous pouvons donc définir bonjour. Et si ce nœud fonctionne, ce serait l' exemple name2 hello. Bien sûr, si nous avions un autre type de variable de nom, nous pourrions le brancher directement dans notre nœud set pour définir notre exemple de variable nommée sur une valeur différente. Maintenant, parce que tous les types de variables que nous examinons aujourd'hui sont des variables de type texte. Ils stockent tous du texte. Ils peuvent tous être convertis les uns aux autres. Donc, si je devais créer une nouvelle variable de chaîne, j'appellerai cet exemple de chaîne. L'enregistrement automatique a quitté mon temps de parole. Allons-y. Exemple de chaîne. Nous pouvons choisir le type de chaîne. Et si j'obtiens ma variable de chaîne, vous pouvez voir si je fais glisser et me connecter à mon texte, cela nous donne juste ce nœud de conversion et qui prendra quelle que soit notre chaîne d'exemple, valeur de texte et la définira à notre exemple de nom. Et c'est ce que nous pouvons faire et l'inverse également. Donc, si nous le voulions, nous pourrions définir notre chaîne en utilisant le nom de l'exemple. Et cela nous donne ce nœud de conversion dans l'autre sens. Les variables de type chaîne sont les plus flexibles des types de variables de texte, elles ont beaucoup plus de nœuds disponibles que de texte ou de type de variable de nom. cette raison, il peut être utile de convertir, disons, un nom ou une variable de texte en chaîne, modifier cette chaîne, puis de la reconvertir en notre type de variable de nom ou de variable de texte. Comme nous pouvons faire beaucoup plus d'encodage d'édition avec notre type de chaîne. Enfin, nous avons les types de variables de texte. Je vais donc créer une nouvelle variable. Je vais appeler cet exemple de texte. Et nous allons définir le type sur text et compiler afin d' obtenir notre valeur par défaut ici. Vous pouvez voir comme nos variables précédentes, nous obtenons une zone de texte afin que nous puissions vous ajouter du texte. Il s'agit d'une variable de texte, par exemple, que nous pouvons compiler et c'est maintenant notre valeur de départ pour notre texte. Désormais, les variables de texte sont utilisées pour les textes que les joueurs ont tendance à voir. Donc, si vous aviez un système de dialogue ou un système de menu ou quoi que ce soit d'autre, le lecteur voit réellement les valeurs du texte. Nous avons tendance à utiliser des variables de texte pour cela. Et la raison en est qu' il peut être localisé, ce qui est utilisé pour convertir du texte en différentes langues, lesquelles Unreal dispose d'un système intégré pour. Nous ne parlerons pas de cela dans cette leçon. Mais il est important que lorsque vous créez systèmes de menus ou des textes que le lecteur verra, vous utilisiez des types de variables de texte afin d'avoir accès à ce système de localisation qui vous permet d'avoir plusieurs langues. Les textes peuvent donc être récupérés et définis de la même manière que nous l'avons fait avec notre chaîne et nos variables de nom. Nous pouvons donc le faire glisser vers l'extérieur et obtenir un nœud get. Et ce nœud, vous pouvez voir qu' il est similaire à notre nom sur la chaîne. Nous avons une entrée de texte et nous pouvons définir notre nœud sur une autre variable de texte. Ou nous pouvons utiliser, disons, une chaîne. Nous pouvons obtenir notre variable de chaîne. Nous pouvons le brancher directement dans nos textes et vous pouvez voir qu'il nous donne un type de nœud de conversion différent, mais il fait essentiellement la même chose, quelle que soit la chaîne Example, il le convertira en texte, puis nous pourrons définir notre exemple de texte. Et il en va de même pour notre nom. Donc, si j'obtiens la variable name, nous pouvons l' insérer directement dans notre texte. Vous pouvez voir que nous obtenons automatiquement ce nœud de conversion qui convertit notre texte de nom en texte texte. Cela nous permet de définir notre variable de textes d'exemple. Ensuite, je veux vous présenter quelques nœuds couramment utilisés avec ces différents types de variables. Et nous allons commencer par la chaîne, car elle contient le plus grand nombre de nœuds pouvant être utilisés avec elle et c'est généralement le type de texte le plus flexible que vous pouvez utiliser pour l'encodage. Si nous faisons glisser l'un des plus couramment utilisés, c'est append. Donc, si nous recherchons append, nous pouvons afficher ce nœud ici. Maintenant, le nœud append nous permet de prendre plusieurs entrées de chaîne et les combiner ensemble pour une sortie. Cela peut être utile si vous souhaitez ajouter du texte supplémentaire à une chaîne sans modifier la variable d'origine. Ou si vous avez plusieurs variables de chaîne, vous pouvez les insérer dans append, puis les valeurs de ces textes seront combinées ensemble. Donc, par exemple, si je définis ma chaîne d' exemple sur hello, et que je définis l'espace B2B, il s'agit d'un test. La sortie de ce nœud serait hello. Il s'agit d'un test de valeur de chaîne tout-en-un. Et nous pourrions l'utiliser pour peut-être définir une autre chaîne si nous le voulions ou pour définir une chaîne d'exemple également. Nous pouvons également ajouter des entrées supplémentaires. Donc, si nous le voulions, nous pourrions avoir d'autres variables connectées à ces entrées, et elles seraient toutes combinées en une seule sortie. Un autre nœud qui peut être utilisé avec des chaînes est le nœud contains. Donc, si nous faisons glisser et recherchons contains, nous pouvons obtenir la chaîne, nous pouvons obtenir contains. Et cela recherchera notre sous-chaîne. Il va donc vérifier si la sous-chaîne dans ce texte. Donc, si je devais dire bonjour, il rechercherait cette chaîne pour voir si le mot bonjour y est contenu, puis retournerait une valeur vraie ou fausse. Donc, comme notre exemple de chaîne est défini sur hello, cela retournerait true. Ensuite, nous avons deux options. Nous avons donc un cas d'utilisation. Cela signifie qu'il est sensible à la casse ? Donc, par exemple, si je devais changer notre âge en h minuscule, le bonjour dans notre chaîne a une majuscule. Cela retournerait donc faux car il ne correspond pas exactement à notre bonjour en minuscules. Nous avons la recherche à partir de n, ce qui signifie simplement que la recherche va de la fin de la chaîne au début au lieu du début à la fin. Un autre nœud que nous pouvons utiliser est la note remplacée. Donc, si je fais glisser de ma recherche de chaîne pour remplacer, nous pouvons créer le nœud de remplacement. Cela nous permet de définir les textes que nous voulons remplacer et par quoi nous voulons le remplacer. Donc, si je sélectionne ici mon exemple de chaîne et que j'ajoute, disons le mot test, je règle Fromm sur test et les deux sur irréel. Elle remplacera tous les mots de test par Unreal. Ensuite, nous pouvons simplement définir s'il est sensible à la casse ou non et cela affichera la nouvelle variable. Nous pouvons donc définir cela sur notre chaîne d'exemple. Ok, je prends Node juste pour qu'on puisse s'asseoir et gagner. Branchez-le dans notre nœud de jeu, créera une chaîne d'impression et la connectera à la sortie. Donc maintenant, lorsque nous appuierons sur play, nous verrons notre exemple de chaîne say hello and rail au lieu de hello test, qui est actuellement réglé sur. Le dernier nœud que nous allons examiner est la note égale. Donc, si nous supprimons notre glissement noté remplacé de la chaîne, nous pouvons rechercher des égaux. Et nous voulons, eh bien, nous avons différentes options ici. Nous sommes exactement égaux. Il s'agit donc d'un nœud égal sensible à la casse. Donc, si nous créons cela et que nous voyons qu'il a trois signes égaux. Et cela vérifiera si les deux entrées sont exactement les mêmes, y compris les lettres majuscules et minuscules ? Si c'est le cas, il retournera vrai sinon faux. Ou nous pouvons utiliser le paramètre equals insensible à la casse. Cela retournera vrai si les valeurs de texte sont identiques, même si elles ont des valeurs majuscules et minuscules différentes . Enfin, nous avons le pas égal. Cela fera donc le contraire. Cela retournera vrai si les entrées de texte sont différentes et elle renvoie faux si les entrées de texte sont identiques. Nous allons donc passer à notre variable name maintenant, si vous voulez trouver l'une des autres fonctions de chaîne disponibles, faites simplement glisser la souris depuis une variable de chaîne, recherchez chaîne. Et vous pourrez trouver toutes les fonctions de chaîne dans la catégorie chaîne que vous pouvez voir ici. Nous allons donc simplement supprimer ce code maintenant et apporter un exemple de nom get node comme ça. Maintenant, notre variable name est beaucoup plus restreinte que les notes de chaîne. Il n'y a que quelques notes qui peuvent être utilisées pour cela. Si nous traînons, nous pouvons rechercher les égaux. Cela nous donne le nœud égal d'origine. Vous pouvez le remarquer dans notre vidéo entière, mais nous ne pouvons pas modifier les entrées. Donc, si je clique avec le bouton droit, vous pouvez voir qu'il n'y a aucune option de conversion Ce nœud, nous prenons simplement des variables nommées et vérifions si elles sont identiques et renvoyons une valeur vraie ou fausse. Nous pouvons également créer un commutateur sur NameNode. Donc, si nous supprimons ce nœud et que nous le faisons glisser et que nous recherchons switch, nous pouvons créer un switch sur namenode. Cela fonctionne de la même manière le commutateur d'entier que nous avons créé dans nos leçons précédentes. Nous pouvons ajouter de nouvelles broches de sortie. Et en fonction de la valeur de notre variable d'entrée, nous pouvons exécuter une broche de sortie différente. Vous pouvez donc voir dans le panneau Détails que nous avons les noms des épingles. Je peux donc changer ces noms pour dire bonjour. Et nous allons changer le second pour le tester. Maintenant, si le nom de notre exemple est défini sur, si nous le changeons simplement en hello, lorsque ce nœud s'exécute, notre stylo hello new s'exécutera. Et s'il était réglé sur test, notre broche de test fonctionnerait. Et puis s'il était réglé sur quelque chose de complètement différent, juste des lettres aléatoires par rapport notre stylo par défaut s' exécuteraient à la place. Vous pouvez donc contrôler quel code est exécuté par une variable de nom en utilisant l'un de ces éléments, ce nœud fonctionne également avec notre chaîne de caractères. Donc, si je fais simplement glisser rapidement une chaîne, nous pouvons également activer une chaîne. Cela fonctionne exactement de la même façon. Nous pouvons créer de nouvelles entrées, changer leur nom, et elles s'exécuteront en fonction de valeur de notre entrée de chaîne. Enfin, nous allons passer à notre variable texte. Je vais donc simplement les supprimer et nous allons les faire glisser dans un espace pour notre exemple de texte, comme notre nœud de chaîne, les textes peuvent utiliser des nœuds égaux. Donc, si nous recherchons égal en C, nous obtenons les mêmes nœuds que ceux que nous avions pour notre chaîne. Nous avons exactement égal, ce qui signifie que si les deux entrées doivent être exactement les mêmes, les valeurs textuelles doivent renvoyer vrai. La casse n'est pas sensible, donc les valeurs de texte doivent être les mêmes. Peu importe qu' ils soient en majuscules ou en minuscules, puis retournent vrai. Ensuite, nous avons les valeurs non égales, ce qui signifie que les deux entrées doivent être différentes pour que la neige revienne vraie. Désormais, notre nœud de texte ne peut pas effectuer de commutateurs. Donc, si je fais glisser et que je recherche switch, vous pouvez voir qu'il n'y a pas d'interrupteur sur le texte, donc c'est une limitation. Il ne peut pas non plus faire des choses comme append. Vous pouvez voir que ces options ne sont pas là comme nos chaînes. Mais nous pouvons utiliser format, format text, qui est un peu plus une version avancée du nœud append. Maintenant, le nœud de mise en forme du texte est vraiment utile pour créer des descriptions d' éléments ou pour n'importe quel endroit où vous allez avoir différentes entrées dans votre texte. Donc, ce que je veux dire par là, c'est que si nous ajoutons un format, afin que le nom de cet élément soit maintenant, nous pourrons peut-être survoler différents éléments avec notre souris et nous voulons que le nom de l'élément change, mais nous ne voulons pas que ces textes originaux changent. Ce que nous pouvons faire, c'est ajouter ces deux crochets ici, et je vais zoomer pour que vous puissiez voir le type de parenthèse. Quel que soit le nom que nous mettons entre ces crochets, nous allons ajouter un nouveau stylo. Je vais appeler le nom de cet objet. Appuyez sur Entrée. Vous pouvez voir que nous avons maintenant une entrée de nom d'élément, et c'est un caractère générique que nous pouvons ajouter, nous pouvons insérer un texte si nous voulons tout faire, nous pouvons ajouter un entier une chaîne ou un nom, comme vous le souhaitez. Et quoi que nous saisissions, il affichera le nom de cet élément est, puis l'entrée. Donc, à titre d'exemple, si j'ajoute une coche, je vais faire glisser et imprimer la chaîne. Nous pouvons simplement connecter le résultat à notre chaîne d'impression. Et je vais insérer mes exemples de textes dans le nom de l'élément, et nous allons changer le texte d'exemple en Apple comme ça. Donc maintenant, lorsque nous appuierons sur Lecture, nous verrons que le nom de cet objet est Apple. Vous voyez que le nom de cet article est Apple. Et nous pouvons encore étendre cela. Nous pouvons donc mettre cet objet, et nous allons refaire les parenthèses, type de dégâts et appuyer sur Entrée pour créer une autre entrée. Et nous pourrions dire « utilisez notre ficelle ». On peut le faire glisser, le connecter au type de dégâts. Et on peut mettre le feu. Et nous ajouterons les dégâts par la suite. Maintenant, je vais dire que le nom de cet objet est Apple et que l'objet inflige des dégâts de feu , appuie sur Lecture, et vous verrez qu'il s' imprime correctement. Si nous le voulions, nous pourrions définir ces variables à l'aide d'autres codes afin que chaque fois que nous survolons un élément différent, par exemple, le nom de l'élément change pour le nom correct et le le type de dommage change pour dire les types de dégâts de fissures. Donc, si je change cela deux fois, vous pouvez voir que lorsque nous touchons le jeu, il est indiqué « dégâts de glace » au lieu de « dégâts phi ». Ce sera tout pour cette leçon. J'espère que vous avez maintenant une idée de utilité de chacune de ces variables . Juste pour y revenir, les variables de textes sont celles que nous utilisons pour afficher des textes au joueur. C'est là que nous allons stocker des éléments tels que le nom d'un article , des descriptions, etc. Ensuite, nous avons des chaînes qui sont utiles pour l'édition de notre code. Mais nous n'avons pas tendance à l'afficher au lecteur car ils ne peuvent pas être utilisés pour la localisation. Et puis nous avons la variable name qui est plus utilisée uniquement pour coder des éléments tels que des noms d'os, des sockets, des lignes DataTable, des choses comme ça. 9. Variables (vecteurs, rotateurs et transformations): Salut tout le monde. Dans cette leçon, nous allons passer en revue les vecteurs, les rotateurs et les types de variables de transformation. Vecteurs ou variable utilisés pour définir des objets, des emplacements. Il est composé de flotteurs libres appelés x, y et z. Si je sélectionne l'un de mes cubes ici dans le niveau, vous pouvez voir dans le panneau Détails que nous avons un emplacement et qu'il a un emplacement X, Y et Z. Et lorsque je déplace le cube, vous pouvez voir que ces valeurs changent en fonction de l'axe sur lequel je déplace le cube . Les rotateurs sont similaires aux vecteurs en ce sens qu'ils sont constitués de flotteurs libres. Ils ont X, Y et Z. Ils ont également des noms secondaires. Donc, si nous avons sélectionné notre cube, vous pouvez voir que x est rho, y est hauteur et z est votre. Si j'appuie sur E alors que mon cube est sélectionné, vous pouvez voir que nous pouvons faire pivoter notre cube et que ces valeurs commencent à changer en fonction de l'axe sur changer en fonction de l'axe sur lequel nous faisons tourner notre cube. Enfin, nous nous sommes transformés. Maintenant, ces variables d'emplacement, de rotation et d'échelle font toutes partie d'une variable appelée transformation. La transformation est utilisée pour définir l'emplacement, la rotation et l'échelle d'un objet dans le monde. Maintenant, l'échelle n'est en fait qu'un autre vecteur composé de trois flotteurs portant le même nom que notre vecteur de position. Nous avons x, y et z. L'un signifie que l'AXA est sa taille standard normale. Si nous augmentons ce chiffre à deux, il aura deux fois sa taille standard, comme vous pouvez le voir ici avec notre cube. Nous allons maintenant voir comment utiliser et modifier ces valeurs dans un Blueprint. Nous allons donc ouvrir notre personnage à la troisième personne ici. Et pour commencer, nous allons créer une nouvelle variable et nous allons l' appeler vecteur. Et nous allons changer notre type de variable en un vecteur. Et nous allons le faire glisser et faire en sorte que la variable fasse également glisser un ensemble. Vous pouvez donc voir à quoi cela ressemble. Maintenant. Notre nœud get ressemble à peu près à nos variables précédentes, mais notre ensemble comporte maintenant trois entrées, ce qui nous permet de définir une valeur pour x, y et z. Vous avez peut-être remarqué qu'il s'agit d'un nombre décimal car ne sont que des flotteurs individuels que nous pouvons définir. Nous pouvons les définir de différentes manières. Nous pouvons connecter un autre vecteur jusqu'à cette entrée, et cela va simplement définir notre vecteur sur la variable que nous y avons branchée. Nous pouvons les régler individuellement manuellement. Je pourrais donc les définir à 123. Ou nous pouvons faire glisser et rechercher vecteur de viande, le nœud vecteur. Et cela nous donne en fait ce nœud, qui nous permet d'ajouter une redevance variable flottante à l'une de ces valeurs x, y et z. Une autre façon de définir cette variable est de supprimer notre make note ici et de cliquer avec le bouton droit sur le stylo vectoriel, nous pouvons diviser le stylo de structure, ce qui nous permet de définir les flotteurs directement sur le nœud set. Nous n'avons donc pas besoin d'avoir ce nœud de vecteur de création. Et si nous voulons les recombiner dans le stylo d'origine, nous pouvons simplement cliquer avec le bouton droit de la souris sur Pin de structure recombiné. Et cela réinitialisera notre nœud SAT. Maintenant, avec notre vecteur, si nous le sélectionnons, vous pouvez voir que nous devons recompiler nos plans, donc nous allons simplement le faire rapidement et à nouveau, dans nos valeurs par défaut, nous pouvons définir une valeur x, y et z, et ce seront nos valeurs de départ pour cette variable. Ensuite, je vais juste vous présenter quelques nœuds courants utilisés avec les vecteurs. Le premier est donc R égal. Si nous faisons glisser et que nous recherchons égal, alors nous obtenons exactement égal. Il s'agit d'un nœud qui vérifie essentiellement les deux vecteurs qui sont entrés dans ce nœud exactement de la même manière que les valeurs x, y et z sont identiques. Si c'est le cas, il essaiera de traiter. Nous avons également un presque égal. Donc, si nous utilisons la note égale ici, vous pouvez voir que cela nous donne deux entrées vectorielles , puis une entrée flottante. Et ce que cela fait, c'est que nous pouvons brancher deux vecteurs, n. Et nous pouvons dire que nous pouvons lui donner une tolérance d'erreur. Nous pouvons donc définir ceci pour en dire un. Et cela retournera vrai si les valeurs x, y et z sont comprises dans l' une de l'autre. Nous pouvons également utiliser tous les nœuds mathématiques standard avec nos vecteurs afin de nœuds mathématiques standard avec pouvoir les faire glisser vers l'extérieur, nous pouvons utiliser le nœud Ajouter qui nous donne la possibilité d'ajouter deux vecteurs ensemble et de renvoyer le résultat. Nous pouvons utiliser le nœud moins ou le nœud de soustraction. Cela fait exactement la même chose, mais cela soustrait les deux vecteurs l' de l'autre et renvoie la sortie. Nous avons le nœud Multiplier, nous pouvons donc rechercher multiplier, et cela nous donnera le nœud le plus grand nombre de plis. Cela multipliera le x par dx de la valeur supérieure. La valeur y est y et z par la valeur supérieure C. Et je vais mettre la réponse. Bien sûr, nous avons également divisé, donc nous pouvons rechercher « diviser ». Et cela fonctionne de la même façon. Divise la valeur supérieure mais la valeur inférieure et nous donne la réponse. Maintenant, comme pour nos nœuds de cartes précédents, nous pouvons modifier certaines de ces entrées. Par exemple, je peux cliquer avec le bouton droit de la souris sur l'entrée du bas et convertir l'épingle. Nous pouvons le remplacer par d' autres variables mathématiques afin que les nombres entiers flottent. Par exemple, si nous voulions dire moins un certain nombre à virgule flottante de toutes nos valeurs x, y et z et de notre vecteur, nous pourrions le changer en un float et le faire. Nous pouvons également faire exactement la même chose avec notre nœud d'ajout. Peut-être que nous avons un entier cette fois, nous voulions ajouter une valeur entière à toutes nos valeurs x, y et z. Nous pouvons également le faire. La prochaine étape que nous allons examiner s' appelle les nœuds de tour. Nous allons donc simplement supprimer ces notes ici. Nous allons faire glisser depuis mon vecteur, rechercher lap et créer ce nœud. Cela nous permet de prendre deux vecteurs et de donner une sortie vectorielle. Et cette valeur alpha est un nombre à virgule flottante. Et c'est essentiellement la valeur entre ces deux valeurs que nous voulons. Par exemple, si nous avions une valeur et a et une valeur et B, et que nous définissions cette valeur à 0,5. L'emplacement en sortie se situe exactement entre ces deux emplacements en entrée. Ensuite, nous allons examiner le nœud de rupture. Maintenant, si vous vous souvenez de notre nœud set, nous pouvons faire glisser et rechercher make factor. Nous pouvons également faire la même chose avec un nœud d'obtention de vecteur que nous pouvons faire glisser vers l'extérieur et nous pouvons rechercher break. Et nous pouvons maintenant diviser ce vecteur en ses valeurs flottantes x, y et z. Nous pouvons également cliquer avec le bouton droit sur notre vecteur, obtenir le nœud et sélectionner Split Struct Pin. Cela nous donne également un accès direct à ces valeurs. Et si nous voulons le recombiner, il suffit de cliquer à nouveau avec le bouton droit de la souris et sélectionner recombiner les structures pen. Nous allons maintenant utiliser le vecteur pour commencer à affecter un objet dans le monde. Vous pouvez donc vous y habituer. Pour commencer, nous allons créer un nouvel accès. Nous allons donc accéder au navigateur de contenu, cliquer avec le bouton droit de la souris et créer une classe de plan directeur. Sélectionnez ensuite axone. Et nous appellerons ce cube, ouvrirons notre plan de file d'attente et nous ajouterons un nouveau composant appelé cube. Cela va juste nous donner un composant cube, compiler et l'enregistrer, puis revenir au plan ThirdPersonCharacter. Et nous allons cliquer avec le bouton droit et rechercher le bouton gauche de la souris. Ensuite, à partir de la presse, faites glisser et recherchez l'acteur spawn de la classe. Et cela créera un nouvel acteur dans notre niveau chaque fois que nous laisserons le bouton de la souris. Et nous allons définir la classe sur cube parce que nous voulons faire apparaître notre cube. Et nous allons faire glisser depuis spawn transform et rechercher make transform. Cela fonctionne de la même manière que le nœud make vector. Cela nous permet simplement de créer une variable de transformation. Vous pouvez donc voir que nous avons notre vecteur pour la position ou rotateur pour la rotation, puis notre second vecteur pour l'échelle. Et nous allons utiliser l'emplacement pour choisir l'endroit où nous voulons notre spawn en cubes. Je veux que mon cube apparaisse juste au-dessus de la tête de mon personnage. Je vais donc utiliser la charge de localisation de l'acteur get pour créer cela. Vous pouvez voir que la sortie est un vecteur et l'entrée est un objet acteur. Et actuellement, il indique simplement sud parce que rien n'y est branché. Nous allons donc faire jouer nos personnages à la troisième personne sur place. Si nous faisons glisser et que nous voulons utiliser un ajout de notes. Je vais donc ajouter. Nous allons simplement supprimer notre variable vectorielle ici pour l'instant. Maintenant, je veux qu'il apparaisse légèrement au-dessus de mon personnage, parce que si je le branche directement dans l'emplacement un cube apparaîtra juste à l'intérieur de notre personnage, ce qui gâchera la collision. Nous allons donc prendre la sortie, brancher à l'emplacement, et l'augmenter de 150 par exemple. C'est donc bien au-dessus de notre caractère. Maintenant, nous pouvons compiler et cliquer sur play. Quand je laisse le bouton de la souris, vous pouvez voir un cube apparaître juste au-dessus de ma tête. Si je me déplace sur un autre cube ou que j'apparais, ils continueront à le faire pendant que je me déplace dans le niveau. Maintenant, si je voulais que le cube me suive partout, nous pouvons le faire également. Donc, si je quitte et que je retourne à notre plan de personnage ThirdPersonCharacter. Donc pour que notre cube nous suive, nous devons d'abord apporter quelques modifications à notre code, nous allons faire glisser la valeur de retour ici, et nous allons sélectionner Promote to Variable. Cela créera une nouvelle variable du même type que notre épingle à partir de laquelle nous faisons glisser. Promouvra donc la variable. Cela créera un type de variable de cube que nous appellerons cube. Il s'agit d'un acte de variable de référence que nous aborderons dans une leçon ultérieure. Mais essentiellement, cela nous permet simplement de dire à notre nouveau cube ce que nous voulons en faire. Ensuite, nous allons obtenir notre nouvelle variable cubique. Nous allons faire glisser et nous allons faire est valide et créer un nœud est valide. Celui du bas ici, nous allons faire un peu plus d'espace et nous allons le relier à la presse. Et puis le n'est pas valide jusqu' à notre apparition dans le cube. Et ce que cela fait est essentiellement vérifier, a créé r cube Admin auparavant. S'il n'a pas été créé auparavant, il n'est donc pas valide, sera exécuté, ce qui nous permettra de créer un cube. Et si notre cube a été créé, alors il est valide, s'exécutera, ce qui ne fera rien. Cela nous empêche donc de créer plus d'un cube. Ensuite, nous allons créer un nœud de tick. Nous allons donc faire une coche d'événement. Et nous allons également copier ces deux nœuds. Et nous allons connecter l' exécution à l'authentique. Ensuite, nous sortirons de notre cube et nous utiliserons l'acteur de plateau. Nœud de localisation Cela nous permet de modifier l' emplacement de nos cubes en fonction de notre nouvelle entrée. Nous utilisons. Ceci est valide juste pour s'assurer que nous n'obtenons aucune erreur. Parce que si nous essayons de définir l'emplacement de nos cubes sans que notre cube ait encore été généré, nous obtiendrons des erreurs. Nous utilisons donc la valeur est valide, arrêtez ces erreurs. Et nous allons définir son nouvel emplacement le même emplacement que nos emplacements d' apparition. Je vais donc le déplacer un peu plus haut. Et nous allons copier et coller ces nœuds. Et nous allons le connecter à notre nouvel emplacement. Donc maintenant, juste pour parcourir ce code, chaque cube de cadre définira son emplacement sur l'emplacement actuel des caractères plus 150 et la hauteur. Et on peut y jouer maintenant. Si je clique sur play , puis que je clique avec le bouton gauche de la souris et que je vois que notre cube me suit partout. Si je spamme le bouton gauche de la souris, cela ne crée plus de cubes. Ensuite, nous allons examiner la variable du rotateur. Nous allons donc quitter le jeu et retourner à notre ThirdPersonCharacter. Je vais garder ce code ici pour l'instant car nous pouvons l'utiliser pour faire certaines choses avec le rotateur. Une fois que je vous ai montré certains des nœuds couramment utilisés avec la variable rotator. Nous allons donc créer une variable de rotateur la même manière que nous l'avons fait auparavant. Créez une nouvelle variable. Nous appellerons cet outil Rotation. Et nous allons définir son type sur le type de rotateur. Ensuite, nous compilerons et renforcerons notre valeur par défaut. Vous pouvez voir ici qu'il est très similaire à notre vecteur. Nous avons un X, un Y et un Z, et ce sont des valeurs flottantes. Nous pouvons obtenir notre rotateur en faisant glisser et en sélectionnant Obtenir. Et nous pouvons semer le rotateur en faisant de même avec l'option set dans C. Encore une fois, comme notre vecteur, il nous donne un x, un y et un z. Nous pouvons faire glisser et rechercher, créer un rotateur. Et nous pouvons sélectionner l'option Rotation ici. Cela nous donne les variables que nous pouvons utiliser pour ensuite régler notre rotateur. Ou si nous le voulons, nous pouvons cliquer avec le bouton droit de la souris et sélectionner Split Struct Pin pour y accéder directement. Nous pouvons donc utiliser un float pour définir chacun de ces éléments individuellement. Comme notre vecteur, nous pouvons également sortir de notre rotateur, obtenir un nœud et rechercher un rotateur de cassure. Et cela nous donne nos valeurs x, y et z sous forme de nombres flottants si nous avions besoin d'accéder à un seul d'entre eux. Maintenant, contrairement au vecteur, nous ne pouvons pas utiliser de cartes normales pour le moment. Donc, si notre variable de rotateur, il existe des nœuds personnalisés qui sont utilisés uniquement pour cela. Donc, si nous faisons glisser vers l'extérieur et que nous recherchons combiné, vous pouvez voir que nous avons un nœud de rotateurs combinés, qui combine simplement a avec les valeurs B. Vous pouvez donc l'utiliser pour les valeurs moins ou plus de votre rotateur , puis il vous donnera une sortie. Nous avons également accès au laboratoire pour notre rotateur. Donc, si nous faisons glisser et recherchons LAP, voyons que nous avons un rotateur de lèvres et que cela fonctionne de la même manière que notre amour pour notre vecteur. Nous ne pouvons pas avoir deux entrées à faire pivoter ou des entrées. Et nous pouvons définir un alpha, et c'est une valeur comprise entre 011 serait la valeur de sortie serait juste la valeur b et 0 serait la valeur a, puis 0,5 serait la valeur entre ces deux valeurs. Ensuite, nous avons le nœud vectoriel de rotation de l'espace x. Nous allons donc supprimer ce nœud ici et rechercher le vecteur de rotation x. Et c'est important car cela nous permet d'obtenir la direction vers l'avant dans une variable vectorielle d'un acteur. X est donc le vecteur avant pour la plupart des acteurs. Donc, si nous passons à notre niveau ici, je fais simplement glisser un modèle à la troisième personne. Vous pouvez voir ce x, qui est rouge. Vous pouvez voir que le rouge est x est notre attaquant. Cela nous permet d'obtenir la direction vers l'avant de notre personnage à tout moment, pour que nous puissions le faire pivoter comme ceci, je vais maintenant être ici. Mais vous pouvez voir que la direction X du monde est toujours ainsi. Nous pouvons utiliser ce nœud pour obtenir la direction laquelle un objet fait face en fonction de sa rotation. Nous pouvons vous le montrer dans un exemple. Si nous allons voir notre modèle à la troisième personne et que nous allons modifier une partie de ce code afin que notre cube apparaisse vers l'avant notre cube apparaisse vers l'avant dans la direction de nos personnages face à face. Pour ce faire, nous allons obtenir la rotation de nos personnages. Nous allons donc obtenir la rotation, nous trouverons la rotation. On y va, on fait une rotation active. Cela nous donne la rotation actuelle de notre personnage. Je vais faire glisser et nous allons obtenir un vecteur de rotation x. Et maintenant, nous allons multiplier cela. Nous allons donc faire glisser le pointeur à partir du vecteur et nous allons faire le nœud Multiplier. Et nous allons changer l'entrée ici en une valeur flottante parce que nous voulons la multiplier par une valeur flottante. Et ici, nous allons définir à quelle distance de notre personnage nous voulons un spawn en cubes, et c'est en centimètres. Donc, si je règle ça à 500, alors nous allons ajouter ces deux emplacements actuels des acteurs. Donc, en gros, nous disons 500 centimètres devant la position actuelle de notre personnage. Nous voulons faire apparaître ce cube. Nous allons donc faire glisser notre note plus ici et créer un autre nœud plus. Et nous ajouterons la valeur de notre temps ici. Réglez ce paramètre sur l'emplacement. Je vais simplement le réutiliser et le brancher dans notre nouvel emplacement ici afin que lorsque nous créerons notre file d'attente, mais qu'elle nous suivra, cet notre nouvel emplacement ici afin que lorsque nous créerons notre file d'attente, mais qu'elle nous suivra, emplacement, compilera et sauvegardera cela. Et cela jouera et jouera. Donc, si je clique sur play, vous pouvez voir que je peux courir et si je clique à l'intérieur, le cube apparaît là-bas. Et si je fais pivoter le personnage, vous pouvez voir que le cube est en train de mettre à jour sa position devant moi. Je ne l'ai pas configuré pour utiliser la rotation de la caméra. C'est pourquoi quand je regarde autour de moi, cela ne change pas le cube. Mais au lieu de cela, lorsque je fais pivoter le personnage, vous pouvez voir que le cube est en train de se mettre à jour, qu'il est cinq mètres devant nous, mais qu'il garde toujours l'emplacement du personnage, donc il suit toujours avec nous . Si je devais changer cette valeur de 500 par 200, le cube serait plus proche de nous parce qu'il n'est que deux cents, deux cents centimètres devant nous. Maintenant, vous pouvez voir qu'il est deux mètres devant nous et qu'il est toujours mis à jour dans la direction avant de notre personnage. Maintenant, si nous revenons à notre plan ThirdPersonCharacter, il y a quelques autres notes que nous pouvons utiliser avec notre variable rotateur. Donc, comme nous avons la note sur l'emplacement de l'acteur défini, nous avons également la rotation de l'acteur défini, la rotation nœud, qui fait la même chose, mais à la place, les ensembles sont une rotation. Et nous pouvons faire un peu de rotation si nous le voulons avec notre cube. Donc, si nous sortons de notre cube et que nous définissons rotation du facteur, disons que chaque image, chaque image, nous voulons faire pivoter notre cube un peu. Nous devons donc obtenir la rotation actuelle, puis y ajouter. Nous allons donc faire glisser et passer à la rotation. Nous allons combiner des rotateurs. Je voudrais simplement le brancher ici et nous allons dire, augmentons cela d' une unité et voyons à quoi cela ressemble. Alors appuyez sur Play. Si je laisse la souris, vous verrez qu'elle tourne maintenant dans cette direction. Si nous devions modifier les valeurs de notre nœud rotateur combiné, nous pouvons également ajouter un dans le y, et nous verrons qu'il effectue une rotation différente. Ensuite, nous allons aborder le type de variable de transformation. Maintenant, nous en avons déjà parlé un peu dans cette leçon, mais essentiellement, une transformation est simplement une variable composée d' un vecteur pour la position, d'un rotateur pour la rotation, puis d'un autre vecteur pour notre échelle d'acteurs. Et nous pouvons accéder à cette variable de la même manière que nous avons défini notre emplacement et notre rotation. Donc, si nous revenons au plan ThirdPersonCharacter maintenant, nous pouvons créer une nouvelle variable. Nous appellerons cela une forme trans. Et nous allons définir son type sur Transform. Maintenant, comme pour les autres variables, nous pouvons l'obtenir et nous pouvons le centrer. Vous pouvez maintenant voir qu'il n'a pas les options x y car il existe plusieurs entrées qui sont besoins de transformation de notre nœud d'ensemble. Si nous traînons, nous pouvons faire une transformation. Cela nous permet de définir son emplacement, sa rotation et son échelle. Et voici un vecteur, un vecteur et notre rotateur ici au milieu. Et nous pouvons les définir manuellement si vous souhaitez, sur ce nœud. Ou nous pouvons brancher des vecteurs et des rotateurs comme nous l' avons fait auparavant. Nous pouvons également scinder ce nœud comme nous l'avons fait avec les autres. Donc, si nous cliquons avec le bouton droit sur l'épingle ici, nous pouvons faire Split Struct Pin qui nous donne accès à l'emplacement, à l' échelle et à la rotation. Et nous pouvons le diviser davantage si nous voulons dire, je voulais juste définir cette transformation X1 et j'avais une variable flottante. Je pourrais encore fendre ce stylo. Et vous pouvez voir que je peux maintenant définir la valeur flottante x pour notre emplacement sur ce nœud. Et puis si je veux le recombiner, recombiner puis recombiner à nouveau, et c'est redevenu normal. Nous pouvons faire le contraire avec notre nœud Transform get, nous pouvons faire glisser vers l'extérieur, vous pouvez rechercher une transformation break break et nous pouvons accéder à notre emplacement, à notre rotation et à notre échelle. Nous pouvons également diviser cela afin que nous puissions cliquer avec le bouton droit de la souris et faire Split Struct Pin. Et cela nous donne également accès à celles-ci. Nous pouvons maintenant définir les transformations d'un acteur. Donc, si nous revenons à notre code de tout à l'heure, vous pouvez voir que nous avons dit l'emplacement de l'acteur et la rotation active séparément, mais nous pourrions en fait faire glisser et utiliser le nœud de transformation set actor. Et cela nous donnerait accès à sa transformation, qui est bien entendu composée de son emplacement et de sa rotation. Nous pourrions donc faire une nouvelle transformation. Nous pouvons réellement les définir sans ces deux nœuds. Donc, si je supprime ces deux-là, nous pourrions le faire avec un seul nœud. Je vais donc le brancher dans notre est valide. En utilisant un nœud make, nous pouvons simplement prendre notre position d'où nous l'avons obtenu auparavant. Donc en bas. Ensuite, notre rotation, nous l'avons mise en rotation et nous laisserons l'échelle comme une unité. Mais si nous le voulions, nous pourrions également l'ajuster. Maintenant, si nous appuyons sur play, nous pouvons voir qu'il fonctionne toujours exactement de la même manière qu'avant. Nous utilisons simplement ce nœud au lieu des deux nœuds distincts. Maintenant, la dernière chose que je voulais aborder dans cette leçon est la différence entre les transformations locales et mondiales qui expireront jeu pour le moment et nous nous dirigerons vers le plan de personnage ThirdPersonCharacter et inhérent. Nous allons accéder à la fenêtre d'affichage. Maintenant, dans la fenêtre d'affichage, nous pouvons ajouter un composant, donc je vais simplement ajouter un cube. C'est donc le cube du samedi dans notre fenêtre d'affichage de plan. Et nous pouvons voir que nous avons un emplacement ici et actuellement il est en train de lire que les zéros sont 0. C'est parce que nos cubes sont actuellement situés localement. Est 0, le centre de notre personnage. Si je devais le faire avancer, vous pouvez voir qu'il augmente dans le x. Et maintenant, si je peux tirer ceci et le placer dans, placer notre personnage dans le niveau, vous pouvez voir nos personnages maintenant à ce emplacement. Mais si je sélectionne mon composant cube, vous pouvez voir qu'il nous donne une valeur différente de celle de notre acteur. C'est parce que cette valeur est un emplacement local. Il se trouve donc actuellement à 170 centimètres du centre de notre personnage. Mais lorsque nous sélectionnons notre personnage, donc lorsque nous sélectionnons l'acteur complet, cela nous donne notre position dans le monde, et c'est la position de nos acteurs dans le monde entier. Nous pouvons maintenant modifier à la fois les composants j, emplacement mondial et l' emplacement local dans les plans. Pour ce faire, je vais ouvrir le caractère à la troisième personne ici, ce qui peut supprimer une grande partie de ce code. Nous supprimerons donc tous les codes connectés à la technologie et supprimerons également tout ce code. Il ne nous reste donc plus qu'à en avoir avec notre bouton gauche de la souris. Nous allons maintenant accéder à notre fenêtre d'affichage et sélectionner le cube que nous avons créé. Je vais le remettre à 0, donc il est juste au centre de notre personnage ici. Ensuite, le graphe d'événements, nous allons le faire glisser hors des composants. Et nous allons lui demander de définir sa position relative. Et nous allons le régler sur 0 sur le x 0 et le y, puis sur 150 sur z. Maintenant, lorsque nous appuyons sur le bouton gauche de la souris, il va le déplacer vers ce nouvel emplacement. Donc, si nous appuyons sur Jouer et que nous voyons que c'est juste au centre de mon personnage. Mais si je clique avec le bouton gauche de la souris, cela passe au-dessus de la tête de mon personnage. La raison pour laquelle c'est fait est parce que ces zéros, zéros 0 emplacement pour mon cube sont juste au centre de mon personnage. Tout ce que j'ai fait, c'est lui dire de l'augmenter de 150 en z. Et maintenant c'est au-dessus de la tête de mon personnage. Maintenant, si nous changeons ce code en lieu et place de position relative ou définissons la position mondiale, position relative ou définissons la position mondiale, nous utiliserons les mêmes valeurs. Donc x vaut 0, y vaut 0, puis z vaut 150. Et si on appuie sur Play, je ne bougerai pas. Je viens de cliquer et de voir mon cube. Si j'appuie sur F1, c' est derrière le mur. Maintenant, la raison pour laquelle il fait cela est parce que c'est 0 dans le monde, mais plus 150 centimètres plus haut. Maintenant, si je bouge, vous pouvez voir le cube se déplacer avec mon style de personnage. Et c'est parce que le cube est attaché à mon personnage. Mais nous lui avons dit de passer à 00150 dans le monde. C'est donc la différence entre définir un lieu local et un emplacement mondial. Maintenant, si j'appuie sur F libre pour revenir à notre mode d'éclairage normal et pour accéder au wireframe. Vous pouvez appuyer sur F1. Si tu ne le savais pas. Appuyez sur F3 et quittez. Nous pouvons obtenir le même résultat avec notre position mondiale définie qu' avec notre emplacement relatif défini, nous avons juste à obtenir la position de l'acteur. Nous obtenons donc la position actuelle de notre personnage dans le monde. Nous traînons et nous ferons plus d'un cinquième à sa position actuelle dans le monde. Et nous allons régler notre cube sur ce point. Au lieu de cela, nous prenons la position actuelle de nos acteurs dans le monde, en plaçant 150 et en mettant R au cube à la place. Nous pouvons donc tester cela. Maintenant, si je clique sur Jouer, si je clique avec le bouton gauche de la souris, vous pouvez voir que nous avons maintenant le même résultat que lorsque nous utilisons l'emplacement relatif, car maintenant nous ajoutons l'emplacement générique de nos personnages. Notre cube reste donc au-dessus de la tête de notre personnage. C'est donc tout pour cette leçon. Dans notre prochaine leçon, nous examinerons ACTA, un type de variable d'objet. Nous les avons utilisées un peu dans cette leçon, mais nous en apprendrons beaucoup plus à leur sujet dans la prochaine leçon. 10. Variables (acteurs et objets): Salut tout le monde. Dans cette leçon, nous allons examiner les variables de référence d'objet et façon dont elles sont utilisées dans le moteur. J'ai donc mis en place un exemple très basique ici. Nous avons un déclencheur et nous avons quelques cubes. Et quand notre joueur appuie sur la gâchette, l'un de nos cubes se déplace vers le haut. Et quand le joueur quitte la gâchette, l'un d'entre eux descend. Si j'appuie sur Play et que je rencontre un déclencheur, vous pouvez voir le cube droit monter et si je quitte la gâchette, il redescend. Cela se produit parce que nos cheveux de détente font référence à ce cube que vous pouvez voir ici. Il s'agit d'un objet ou d'une variable active qui est défini sur notre cube. Et je peux changer ça en choisissant l'acteur dans le bouton Scène. Je peux cliquer sur l'un de nos cubes afin choisir le cube sur la gauche ici. Et maintenant, quand nous appuyons sur play et que je cours sur la gâchette, nous changeons notre cube gauche. Essentiellement, ce que les références d'objets nous permettent de faire, c'est de dire au moteur quels objets spécifiques nous voulons appliquer. Parce que tous ces cubes sont exactement les mêmes. Ils utilisent la classe cube de notre navigateur de contenu, mais chacun est un objet individuel. Nous pouvons vouloir affecter l'un d' eux sans affecter les autres. Et les références d'objets nous permettent de le faire. Il examinera notre plan de déclenchement et verra comment cela fonctionne. Je vais donc simplement ouvrir ça. Vous pouvez voir que nous avons notre variable d'objet sélectionnée, qui est celle que nous utilisons pour contrôler le cube que nous voulons appliquer. Vous pouvez donc voir qu'il s'agit d' un objet sélectionné et qu'il est défini sur notre cube. Et nous avons cette variable up ici. Il est réglé sur Actor. Nous avons également du code ici qui contrôle ce que nous faisons de l'objet sélectionné. Nous avons donc un début de chevauchement actif, un acteur d'événement et un chevauchement. Ce sont quelques-uns de ces événements qui sont intégrés au moteur. Ils seront donc exécutés chaque fois que quelque chose se chevauche ou déclenche ou cesse de chevaucher notre déclencheur. Maintenant, vous pouvez voir que ces deux nœuds ont ces épingles hyperactives et qu'il s'agit de références d'objets. Ils nous indiquent exactement quel objet se chevauche ou se déclenche. Maintenant, il s'agit d'un nœud de coût. Nous allons avoir une leçon distincte sur les coûts car ils sont très importants et ils comportent beaucoup de choses. Mais ce que cela fait essentiellement, c'est qu'il prend un acte de référence et qu'il vérifie si cet acteur est un ThirdPersonCharacter ? Et si c'est le cas, cela permettra à notre code d'exécuter un F rien. Il retournera le coût ressenti. Nous utilisons donc essentiellement ce nœud de coût comme vérification. Nous disons en gros, si un numéro pour arrêter commence à s' ouvrir en nous lapant, est-ce un personnage à la troisième personne ? Si c'est le cas, nous pouvons exécuter le reste de notre code. Si ce n'est pas le cas, nous n'exécutons pas notre code. Et puis le reste de notre code prend simplement l'objet sélectionné que nous définissons dans les options ici. Et nous lui demandons de définir un nouvel emplacement. Donc, nous prenons simplement sa position actuelle, nous traçons 150 et nous la réglons à cet emplacement. Encore une fois, nous faisons exactement la même chose sur le chevauchement d'extrémité, mais à la place, nous minimisons un 150 de son emplacement actuel, puis réglons sur ce nouvel emplacement. Ensuite, je veux expliquer ce qu'est un acteur ? Un acteur est tout type d'objet qui existe dans un niveau. Donc, tout ce que vous pouvez voir ici est un type d'acteur. Il existe de nombreux types d'acteurs différents, comme par exemple le plan de personnage ici. Si je fais glisser ça, c'est un acteur, mais c'est un autre type d' acteur, disons un type de personnage. Il peut faire tout ce que peut faire un acteur, mais il possède également des fonctionnalités supplémentaires car il est destiné à être utilisé comme personnage. Comme par exemple, il peut être contrôlé par un joueur. Il possède une capsule et un modèle de personnage comme appareil photo. Ce sont tous des éléments intégrés à notre plan de personnage. Ce sont toutes des choses que les acteurs eux-mêmes n'ont pas, mais notre personnage le fait parce que notre personnage est un type d'acteur spécialisé. Maintenant, cela se fait par le biais d'un processus appelé héritage, qui peut être un peu difficile à comprendre. J'ai donc créé une image ici pour essayer de vous montrer ce que je veux dire. Si j'apporte ça, tu peux voir que nous avons un nouvel objet en haut. Maintenant, en gros, chaque objet d' Unreal est un objet U. Il existe un type d' objet très basique et tout en hérite. Au fil de la chaîne, nous avons des acteurs. Maintenant, ce sont les acteurs dont nous avons parlé. Ils héritent de vos objets, qui signifie qu'ils ont tout ce que vous pouvez faire. Mais ils ont également leur propre fonctionnalité supplémentaire qui leur permet d' exister dans un niveau, avoir des composants et d'être visibles. Et vous pouvez voir que j'ai ajouté le cube et nos plans de déclenchement que nous avons utilisés pour cet exemple. Vous pouvez voir que ceux-ci héritent alors de notre acteur. Ce sont donc des acteurs qui peuvent faire tout ce qu'un acteur normal peut faire. Mais parce que nous avons ajouté un code à notre déclencheur et qu'une boîte de collision est désormais son propre type avec ses propres fonctionnalités spéciales. Et puis il en va de même pour notre cube. Nous y avons ajouté un composant cube. Il s'agit donc maintenant de son propre type avec ses propres composants. Les personnages sont-ils les mêmes ? Il y a juste quelques étapes supplémentaires. Vous pouvez donc voir qu'un dieu est créé à partir de l' acteur. Maintenant, un **** est une version plus basique de notre plan de personnage. Il peut être contrôlé par le joueur, mais il n'a pas vraiment de mouvement ou. Pour que notre modèle de personnage soit visible , nous avons un plan de personnage qui hérite du ****. Ainsi, certaines de ses capacités peuvent être contrôlées par le joueur et certaines de ses capacités de mouvement. Ensuite, cela nous permet d' avoir un composant capsule et un modèle de personnage. Aujourd'hui, notre personnage est toujours acteur. Il peut toujours faire tout ce qu' un acteur peut faire de la même façon. Un eunuque est toujours un acteur et peut faire tout ce qui est connecté. Mais chacune de ces étapes ne fait qu'ajouter des fonctionnalités supplémentaires à leurs plans. Maintenant, tous les plans de ThirdPersonCharacter seraient en fait la prochaine étape vers le bas par rapport à notre personnage, car notre ThirdPersonCharacter hérite du plan de personnage, nous venons d'en ajouter d'autres fonctionnalité. Nous avons défini un modèle et nous avons modifié certains de ses paramètres. Il s'agit donc maintenant de son propre plan. C'est un enfant du plan du personnage. Maintenant, en revenant à notre exemple, si nous sélectionnons notre déclencheur, vous pouvez voir que lorsque je sélectionne le menu déroulant pour l'objet sélectionné, vous pouvez voir que je peux sélectionner n'importe quel objet dans le niveau. La raison en est qu'il s' agit d'un type act ou variable. Et c'est parce que tout dans notre niveau est acteur. Si nous le voulions, nous pourrions changer cela de cube à notre ciel uniforme. Et si nous sélectionnons la sphère du ciel, vous pouvez voir que je peux la définir un ciel parce que notre ciel est un acteur est juste un type spécial de vecteur avec ses propres paramètres et composants. Maintenant, si je voulais que cela soit plus spécialisé et ne me donne que des cubes, par exemple, nous devrions changer le type de variable d'acteur à notre type de cube à la place. Ce que nous allons faire, c'est redéfinir ce cube, donc je vais simplement changer de cube. Et nous allons sélectionner notre plan de cube ici. Ensuite, nous ouvrirons notre plan de déclenchement. Et ici, nous pouvons sélectionner l'objet que nous avons sélectionné. Vous pouvez voir qu'il est actuellement défini sur un type d'objet acteur. Mais si nous changeons cela, nous pouvons rechercher cube. Par exemple, nous avons notre plan de cube. Nous pouvons sélectionner la référence de l'objet. Et lorsque nous changeons le type d'une variable, cela nous avertit simplement que nous sommes en train de changer de type. Cela peut entraîner certains problèmes. Nous allons quand même sélectionner Changer le type de variable. Nous allons fermer cette fenêtre de recherche et compiler. Donc maintenant, lorsque nous sélectionnons notre déclencheur dans le niveau et que nous cliquons sur le menu déroulant, vous pouvez voir qu'il ne m' affiche que des cubes maintenant, c'est parce que nous avons défini type de variable d'objet sélectionné sur le type de cube. Vous vous demandez peut-être pourquoi utiliserions-nous le type cube alors que nous pouvons simplement utiliser le type acteur et sélectionner l'acteur que nous voulons. Eh bien, vous pouvez avoir du code ou des variables spéciaux dans notre cube auxquels nous voulons accéder dans d'autres plans. Nous allons donc ouvrir le cube et je vais simplement créer une nouvelle variable. Et ça va être une valeur booléenne. Et je vais juste appeler cela un exemple. Nous avons maintenant créé cette variable dans notre cube. Il s'agit d'une variable unique à notre plan de file d'attente et seuls les plans de cube possèdent cette variable. Nous allons donc revenir à notre plan de déclenchement. Maintenant, comme notre variable d' objet sélectionnée est un cube, si je la fais glisser et que j'ai effectué une recherche, par exemple, vous pouvez voir que je peux maintenant accéder à cette variable à l'aide de l'objet sélectionné. Cela nous indiquerait si notre variable d'exemple est vraie ou fausse sur le cube que nous avons sélectionné dans le niveau. Maintenant, revenons à notre déclencheur et changeons le type de variable pour un objet sélectionné de cube à acteur. Maintenant, si nous compilons, vous pouvez voir les connexions devenir rouges. Cela est dû au fait que si nous sortons de l'objet sélectionné et que nous recherchons, par exemple, à nouveau, nous ne pouvons plus trouver cette variable car cette variable n' existe que dans notre Blueprint Coupa, pas dans le acteur. Et comme il s'agit d'un acte de référence, il ne trouvera pas de variables qui n' existent que dans notre cube. Il ne trouvera que le code et les variables qui existent dans l'acteur. Il existe maintenant des moyens d' accéder à nos cubes, variables et fonctions à partir d'un acte de type variable. Mais cela nécessiterait un casting, ce que nous aborderons dans une prochaine leçon. Pour l'instant, je veux juste couvrir quelques nœuds plus couramment utilisés avec des types de variables d'objet. Nous avons déjà utilisé bon nombre de ces nœuds dans les leçons précédentes, dans cette leçon. Nous avons donc des éléments tels que le SAT ACT ou l'emplacement, SAT ACT ou la rotation et définir des nœuds de transformation d'acteur. Nous avons obtenu notre emplacement d'acteur avec le nœud Great Actor Location. Il y a aussi la rotation des acteurs de get, qui fait la même chose, mais elle obtient la rotation de nos acteurs dans le monde et renvoie un type variable de rotateur. Ensuite, nous avons le nœud Destroy Actor. Donc, si nous supprimons notre rotation ici et que nous faisons glisser et recherchons Destroy Actor. Maintenant, quand ce nœud sera exécuté, notre acteur sera détruit. Et nous pouvons l'utiliser avec n'importe quelle application ou type de notre niveau, et cela supprimera cet acteur du niveau. Un autre nœud couramment utilisé est le nœud is valid. Donc si nous prenons notre, si nous supprimons notre acteur get, notez-le. Et je vais faire glisser et rechercher est valide. En C, nous avons deux options. Nous allons utiliser celui du bas pour l'instant. Cela nous donne une note que les vérifications sont objet que nous avons sélectionné pour être réellement défini sur n'importe quoi. Donc si nous allons au niveau de la vitrine, voici actuellement les objets sélectionnés, le secteur ou le cube. Mais si j'efface, c' est maintenant réglé sur aucun. Aucun des cubes ne sera affecté lorsque notre personnage sera dépassé. Et si nous appuyons sur Play et que je tombe sur le cube, puis que je m' épuise et que je quitte Play. Vous pouvez voir que j' ai quelques erreurs maintenant. C'est parce que notre code de déclenchement indique à l'objet sélectionné qui n'est pas réglé sur quoi que ce soit pour changer sa position. Et c'est ce qui nous donne ces flèches. Donc, ce que le nœud valide nous permet de faire est vérifier si l'objet sélectionné est réellement défini sur quelque chose ? Si c'est le cas, alors nous lancerons est valide. Et sinon, nous allons courir n'est pas valide. Donc, si nous prenons ces nœuds maintenant, je vais simplement les copier et les coller. Connectez-les en bas ici. Et nous allons appuyer sur Play. Maintenant, lorsque nous rencontrons la boîte, même si nous n'avons rien sélectionné, nous n'aurons aucune erreur. Maintenant, comme vous pouvez le voir, parce que c'est valide, node arrête maintenant l' exécution du code et nous envoie des flèches. L'autre nœud valide fonctionne de la même manière. Donc, si nous le recherchons, il est valide. Vous pouvez voir qu'il s'agit d'une fonction et qu'elle fait exactement la même chose. Il nous donne juste une valeur booléenne, donc vraie ou fausse au lieu de ce nœud avec les sorties. Nous pouvons donc l'utiliser avec un nœud de branche par exemple. Enfin, je veux juste expliquer comment nous pouvons définir des variables d'objet. Nous pouvons donc simplement les faire glisser dans notre graphique d'événements, sélectionnez l'option ici. Et en utilisant le nœud set, nous pouvons faire glisser notre entrée d'objet. Et comme nous utilisons un nœud acteur, nous pouvons le connecter à n'importe quel autre stylo variable d'acteur. Vous pouvez donc voir que nous pouvons le brancher sur l'autre broche d'acteur ici ou sur la broche de sortie de notre voiture. Mais si nous créons un autre type d'objets, disons un personnage. Je vais donc simplement appeler ce caractère, et je vais également définir son type sur caractère. Donc référence au caractère puis à l'objet. Ensuite, nous allons compiler. Si nous glissons notre personnage et créons un nœud défini. Vous pouvez voir si je fais glisser depuis l'entrée, je ne peux pas le brancher à la sortie de notre acteur commence le chevauchement. Et c'est parce qu'il s' agit d'une sortie d'acteur. Maintenant, tous les acteurs ne sont pas des personnages. Notre acteur ne peut donc pas se connecter à l'entrée d'un nœud de jeu de caractères. Mais si nous sortons de notre entrée, vous pouvez voir que je peux le brancher notre nœud de coût à la troisième personne. Encore une fois, nous allons faire une leçon séparée sur les coûts. Mais essentiellement, ce nœud reçoit une entrée d'acteur et il vérifie s'il s' agit d'un personnage ? Si c'est le cas, nous pouvons alors générer un type de variable de type caractère. Et nous pouvons alors l'utiliser pour définir notre variable de caractère , car ces deux broches sont désormais un type de caractère. C'est tout pour cette leçon. J'espère que vous comprenez maintenant un peu mieux le fonctionnement des variables d'objet dans le moteur. 11. Variables (tableaux et boucles): Salut tout le monde. Dans cette leçon, nous allons examiner les variables de tableau et les boucles. Pour commencer, nous allons créer une nouvelle variable. Nous allons donc simplement le faire en cliquant sur le bouton Nouvelle variable. Et je vais appeler cet exemple de tableau de noms. Nous allons définir le type à nommer dans le panneau Détails, dans le type de variable, vous pouvez voir que nous avons ce petit bouton ici. Et c'est ici que nous pouvons définir le type de variable. Il s'agit donc actuellement d' une variable unique. C'est avec cela que nous avons travaillé jusqu'à présent. Mais ensuite, nous allons sélectionner l'option array. Faites-le et nous cliquerons sur Compiler. Et vous pouvez voir qu'il a maintenant une icône différente dans le type qui indique qu'il s'agit d'un tableau, vous pouvez voir que ma valeur par défaut maintenant cette option différente ici. Maintenant, un tableau est essentiellement un moyen d'avoir une variable qui peut stocker plusieurs valeurs du même type de variable. Notre tableau de variables de nom peut stocker plusieurs valeurs nommées dans une seule variable dans nos valeurs par défaut. Si je clique sur ce petit plus quelques fois en C, cela m'a donné des entrées gratuites ici. Maintenant, sur le côté droit, nous avons notre variable. Comme il y a une variable de nom, il s'agit d'une valeur de nom. Donc je peux entrer des noms ici pour que je puisse mettre James, Bill. Et bien, par exemple, maintenant ces acteurs ont des variables nommées normales. Si je devais créer rapidement une autre variable, ce que je vais faire maintenant, j'appellerai cet exemple de tableau flottant. Je vais changer le type ici pour flotter. Et il est déjà configuré en tant que tableau. Mais si le vôtre ne l'est pas, vous pouvez simplement cliquer sur l'option tableau ici. Vous le voyez maintenant, j'ai un flotteur et il a la même icône pour indiquer que c'est un tableau. Et quand je compile en C, cela ressemble à ma valeur par défaut, mais si je clique sur Plus, vous pouvez voir que maintenant sur le côté droit, au lieu des noms, nous avons des valeurs flottantes à la place. Parce qu'il s'agit d'un tableau de nombres flottants au lieu d' un tableau de noms. Et sur le côté gauche, vous pouvez voir que nous avons ces valeurs d'indice. C'est essentiellement ainsi que nous pouvons accéder à ces variables, que nous utiliserons plus tard. Mais en gros, il s' la ligne sur laquelle cette variable est stockée. Ainsi, par exemple, pour James, la valeur du nom est stockée à l'index 0 ou la valeur de la facture est stockée à l'index un, et la valeur I will est stockée à l'index deux. Nous pouvons maintenant contourner ces valeurs en utilisant ce petit indicateur sur le côté qui nous permet de les remanier. Pour que je puisse me déplacer, dire bien au numéro deux. Premièrement, vous pouvez également le faire avec d'autres types de variables. Donc, si je règle simplement ce paramètre sur 12 et que je vois si je les fais glisser, je peux les réorganiser. Je veux supprimer l'un de ces éléments. Je peux cliquer sur la petite flèche vers le bas, sélectionner Supprimer. Je peux également les dupliquer. Ou si je clique sur la petite corbeille ici, vous pouvez voir qu'elle supprime simplement toutes vos entrées. Et ce ne sont là que les contrôles de base pour définir les valeurs par défaut d'un tableau. Ensuite, je veux vous montrer comment nous pouvons réellement accéder à ces variables dans notre code. Donc, si je fais glisser mon tableau de noms d'exemple et que je peux simplement sélectionner le nœud comme nous le faisons habituellement avec nos variables. Vous pouvez voir que j'ai une variable d'apparence différente. Maintenant, je ne peux pas faire glisser et utiliser ceci comme une variable de nom normale parce que pour le moment, cette sortie, n'importe laquelle de nos valeurs. Pour obtenir l'une de ces valeurs que nous allons faire glisser, je vais rechercher GET. Nous allons utiliser obtient une copie. Et cela nous donne ce nœud ici. Comme vous pouvez le voir, nous avons une entrée pour un entier et une sortie pour une variable de nom normale. Et si je m'éloigne de cela, je pourrais utiliser n'importe lequel de mes nœuds de variables de nom normaux. Je pourrais donc faire, par exemple, le nœud égal. Vous pouvez voir que cela me donne la note égale que nous avons déjà examinée. Tout comme une variable de nom normale. La raison en est que c'est essentiellement le cas. Il prend notre tableau, obtient l'indice 0, puis affiche sa valeur. Par exemple, si je devais exécuter ces nœuds, la sortie de notre nœud get serait, eh bien, parce que c'est notre index 0. Si je devais changer cela pour dire aussi, la sortie de ce nœud serait désormais Bell. La même chose fonctionne avec notre matrice flottante. Donc, si j'obtiens mon exemple de tableau flottant, et que je le fais glisser et que je recherche ou obtiens en C, j'en obtiens une copie. Et vous pouvez voir que nous avons maintenant cette version verte. Nous avons une entrée pour notre indice et nous avons une sortie qui est juste une valeur flottante normale que nous pouvons utiliser une valeur flottante normale. Donc, si je dis Add Node, vous voyez que je peux utiliser un add know très bien avec cela, car il s'agit maintenant d'une variable unique au lieu d'un tableau. Et il en va de même pour tous les types de tableaux. Nous pourrions donc créer un tableau de transformations, rotateurs, de vecteurs, entiers, et le processus serait exactement le même. Nous pourrions définir nos valeurs par défaut. Nous pourrions utiliser le nœud get, puis nous ajouterons simplement un index auquel nous voulons accéder, et il produira une version unique normale du type array. C'est. Je vais maintenant passer en revue quelques-uns des nœuds couramment utilisés de notre tableau. Nous avons donc utilisé la note d'écart ici, mais il existe également des nœuds de suppression. Donc, si je fais glisser mon exemple de nom et que je recherche remove, nous pouvons utiliser remove index. Et essentiellement, quand il est exécuté, il supprimera l'index que nous saisirons ici. Donc, actuellement, il s'agit de 0. Donc, si nous devions exécuter ce nœud, notre index à 0, qui est actuellement bien, serait supprimé. Maintenant, quelque chose à garder à l'esprit avec les gommes lorsque vous supprimez un index. Donc, si nous devions supprimer l'index 0, je peux le faire. Maintenant. Vous pouvez voir que tous les autres index se déplacent d'un index vers le haut. Donc maintenant James est à 0 et Bill à un, alors qu'auparavant ils l'étaient. James n'en avait qu'un et Bill en avait deux. Ce nœud est donc utile lorsque nous savons quel index nous voulons supprimer, mais c'est aussi une autre note de suppression que nous pouvons utiliser si nous faisons glisser et que nous recherchons remove, nous pouvons supprimer un élément. Maintenant, cela nous permet de le dire, nous donner une valeur de nom et supprimer cette valeur si elle existe dans notre tableau. Par exemple, si je voulais supprimer la facture de notre tableau, mais peut-être que je ne savais pas quelle facture d'index était l'application. Je pourrais juste demander à Bill d'intervenir. Ensuite, ce nœud vérifierait notre tableau, vérifierait la valeur de la facture. Et si cette valeur de facture est dans le tableau, elle sera alors supprimée. Et la sortie serait simplement vraie si la valeur était supprimée et fausse si elle ne trouvait pas cette valeur dans le tableau. Et il en va de même pour nos notes flottantes. Si je vous montre rapidement, nous pouvons supprimer l'index et vous pouvez voir que cela fonctionne exactement de la même manière, nous permet de supprimer une entrée de notre index de sortie de tableau. Ou nous pouvons supprimer l'article. Et cela nous donne une entrée flottante pour rechercher notre tableau puis le supprimer. Nous allons maintenant voir comment ajouter des valeurs à nos tableaux à l'aide de notre code. Nous allons donc supprimer ce nœud pour l'instant. Nous allons faire glisser à partir de notre exemple de nom, array recherchera Add. Maintenant, il y a quelques options ici. Nous allons d'abord choisir le top 1. Maintenant, Add Node ajoute simplement la valeur que nous avons définie ici à notre tableau. Maintenant, comme il s'agit d'un tableau de noms, cette valeur est un nom. Mais si je devais faire glisser mon tableau flottant ici et rechercher une annonce, vous pouvez voir que cette valeur est maintenant un flottant parce que nous ajoutons une valeur flottante à un tableau flottant. Cette note d'annonce ajoutera essentiellement notre valeur au premier indice disponible. Donc, dans notre tableau de noms, ce serait l'index deux parce que 01 sont pris. Donc, si nous devions dire mettre cela à Bob, cela ajouterait une valeur de bog à l'index deux. Et il afficherait cet index en utilisant ce stylo entier sur la sortie. Nous avons maintenant l'autre note d' annonce, l'ADD unique. Et cela fonctionne de la même manière, mais cela va d'abord vérifier notre tableau pour voir s'il a ou s'il a déjà une entrée pour la valeur que nous avons définie. Donc, si nous ajoutons Bob à nouveau, lorsque ce nœud est exécuté, il vérifiera d'abord notre tableau. Il verrait que l'ampoule n'est pas une valeur qu'elle a actuellement. Il l'ajouterait au premier Windex disponible, tout comme notre nœud d'ajout normal, puis il afficherait cet index en utilisant le raccourci clavier entier. Si Bob était déjà dans notre tableau, il n'ajouterait pas de nouvelle valeur d'ampoule, alors que le nœud d'ajout ajouterait simplement une seconde valeur d'ampoule. Maintenant, nous pouvons vouloir modifier une valeur au lieu d'en ajouter ou d'en supprimer une. Supposons que nous voulions changer l'index 1 de Bill à Bob par exemple. Eh bien, pour ce faire, nous utiliserions un nœud Set M. Donc si nous faisons glisser et que nous allons définir L, vous pouvez voir set array. Cela nous permet de spécifier un indice que nous voulons modifier et la valeur que nous voulons changer. Donc, si je voulais changer, disons Bill, je pourrais définir cet indice sur un parce que les factures sont dans l'index un. Et je peux définir la nouvelle valeur. Bob, par exemple. Ainsi, lorsque ce nœud est exécuté, il changera la valeur de l' index 1. Donc l'indexeur de factures à Bob. Et vous pouvez voir que nous avons une option de taille adaptée ici. Maintenant, cela crée de nouvelles entrées si nous essayons de définir un index qui n'existe pas encore. Par exemple, si je devais définir quatre, nous n'avons que 01, donc nous n'avons que deux entrées. Ce que cela ferait s' il était exécuté créerait un index 23, puis un quatre. Et cela mettrait l'index quatre à Bob. Mais les deux index qu'il a créés pour atteindre le numéro quatre ne seraient que des valeurs vides. Maintenant, il y a quelques autres remarques importantes que nous pouvons utiliser avec les tableaux. Nous pouvons donc faire glisser depuis notre tableau et rechercher contains et utiliser l'élément contains. Et cela nous permet de simplement vérifier si notre tableau contient une valeur particulière s'il retourne vrai et sinon renvoie faux. Donc, si nous devions définir Bob, cela vérifierait notre tableau. Est-ce qu'il contient actuellement la valeur Bob ? Ça ne l'est pas. Donc R contains node retournerait false. Mais s'il contenait cette valeur, si nous l'ajoutions, lors de l'exécution de ce nœud, il retournerait true. Nous pouvons utiliser le nœud de recherche. Donc, si nous faisons glisser et recherchons find, find item Node, vous pouvez voir ici que nous pouvons entrer une valeur et ensuite il recherchera notre tableau pour nous. Et si c'est le cas, si cette valeur existe dans notre tableau, elle nous donnera l'indice indiquant que cette valeur est actuellement élevée. Par exemple, si je devais définir ce paramètre sur bill, il rechercherait notre tableau pour nous lorsque ce nœud est exécuté, et il retournerait que la facture est à l'index un et que cette valeur ici, la valeur entière serait un. Un autre nœud utile pouvant être utilisé avec des tableaux est le nœud clear. Donc, si nous faisons glisser et recherchons Effacer. Cela quand il est exécuté, le tuera complètement ou le tableau. Il s'agira donc essentiellement vider notre tableau de toutes ses entrées. Ce sont donc quelques-uns des nœuds les plus couramment utilisés avec des tableaux. Mais si vous voulez trouver l' un des autres nœuds, vous pouvez le faire glisser et rechercher un tableau. Vous pouvez trouver ici de nombreux nœuds différents qui vous permettront de modifier et d' obtenir des valeurs à partir de vos variables de tableau. Une autre remarque qui peut vous être utile comme la longueur du nœud. Donc, si nous faisons glisser et recherchons length, vous pouvez voir que nous avons un nœud appelé length, et cela comptera simplement le nombre d'entrées que nous avons dans notre tableau et le nombre que nous avons. Donc, si je devais ajouter, disons, trois nœuds de longueur seraient libres parce que nous avons trois entrées dans notre tableau. Nous allons maintenant passer aux boucles. Je vais donc simplement supprimer ces nœuds pour le moment, et nous allons simplement commencer par notre tableau de noms. Donc, si je fais glisser et que je recherche la boucle en C que nous avons pour chaque boucle, c'est ce que nous allons regarder pour le moment. Nous allons donc créer cela. Maintenant, essentiellement, le fonctionnement de ce nœud est qu'il prend en charge et s'exécute. Et nous allons exécuter le corps de la boucle, quel soit le nombre d'entrées que nous avons dans notre tableau. Donc, actuellement, nous avons gratuit. Notre corps en boucle fonctionnerait donc trois fois. Et la façon dont je peux vous montrer cela comme si nous faisions glisser et que nous recherchions une chaîne d'impression. Et je vais ajouter un gros jeu ici. Nous avons maintenant trois entrées dans notre tableau de noms pour le moment. Ainsi, lorsque nous appuierons sur play, nous verrons Hello imprimer trois fois. Alors appuyez sur Play, vous pouvez voir trois fois la course la plus basse. Si nous revenons à notre code et que vous constatez que nous avons également un stylo complet. Donc, une fois que ce corps de boucle a fini d'exécuter le nombre de fois que nous avons des valeurs dans notre tableau. Il lancera ensuite le stylo complet afin que je puisse ajouter une autre chaîne d'impression ici. Permettez-moi de régler ça sur Terminé. Et maintenant, ce que nous verrions Hello imprimer trois fois puis vidé fonctionnerait comme ça. Maintenant, si nous sortons du jeu x et revenons à notre plan de personnage, nous avons également un élément de tableau et un index de tableau. Maintenant, ce seront les valeurs de notre tableau pour lesquelles notre corps de boucle sera exécuté. Donc, par exemple, la première fois que cela s'exécute, la première fois que je boucle ceux du corps, désolé, l'index sera 0 et l'élément du tableau sera quelle que soit notre valeur. Donc, actuellement, ils sont tous définis sur aucun. Mais si je devais les remplacer rapidement, je dirais simplement que c' est Bill Bob James. Maintenant, la première fois que je boucle body exécuterait la valeur, la valeur de l'élément du tableau serait bill et l' index du tableau serait 0. Et puis la deuxième fois , cet élément rare serait Bob et l'index du tableau serait un, et ainsi de suite. Maintenant, ce qui détermine quand le corps de la boucle est exécuté, c'est quand il atteint un nœud qui n'a pas de sortie. Donc pour nous, cela va simplement imprimer la chaîne quelle que soit la valeur que nous mettons ici. Ensuite, le corps de la boucle est terminé et il passera au suivant. Maintenant, s'il est sur le dernier corps de la boucle, donc s'il était en boucle, disons que l'index de l'élément du tableau était James, il atteindrait la fin de ce C. Il n'y a plus de nœuds à exécuter. Et parce que nous sommes au dernier index, il sera alors terminé, ce qui est maintenant fait impression écran. Donc, si je branche l'élément tableau ici dans notre chaîne d'impression, je déplacerai ces nœuds. Si nous compilons et jouons sur Play, nous devrions voir les noms de nos artistes imprimés à l'écran. Donc, si nous faisons cela en C ils sont imprimés , puis nous avons la valeur W1 imprimée une fois les tableaux terminés. C'est donc la base du fonctionnement d'un nœud de boucle, mais nous en avons d'autres types. Donc si nous revenons à notre personnage maintenant et que nous le supprimerons pour chaque boucle. Nous allons faire glisser vers l'extérieur et nous rechercherons à nouveau la boucle. Nous allons maintenant essayer la boucle for-each avec break. Maintenant, cela fonctionne de manière très similaire au dernier nœud, mais cela nous donne une entrée supplémentaire que nous pouvons voir ici appelée break. Cela nous permet d'arrêter notre corps en boucle en un point précis. Par exemple, si nous voulions exécuter notre corps de boucle jusqu'à ce que nous arrivions au nom du bob , puis nous voulions annuler notre corps de boucle. ce que nous pouvons faire. Donc, si nous faisons un peu plus d'espace ici, nous pouvons faire glisser notre élément de tableau vers un élément neigé égal. Nous pourrions dire que si notre élément de tableau est égal à, je pense que c'est Bob. Bob dira « Bob ». Nous voulons vérifier un nœud de branche. Et nous voulons annuler la boucle while si la valeur est Bob. Nous pouvons donc le faire. Nous pouvons faire glisser depuis True et le connecter à l'entrée break ici. Et si nous double-cliquons sur la ligne blanche, nous pouvons créer ces petits nœuds qui nous aident à mieux organiser notre code . Je vais donc le faire comme ça. Donc maintenant, ce qui va se passer, c'est que lorsque notre boucle s'exécute, va vérifier l'élément de tableau Bob. Si c'est le cas, nous voulons arrêter notre boucle en cours d'exécution. Donc, ce que cela va nous amener à faire c'est exécuter Bill et Bob imprimera sur une chaîne. Mais James ne le fera pas, parce que nous avons arrêté notre boucle et terminé, nous aurons couru à la place. Nous pouvons essayer ça. Je peux appuyer sur Play. Vous pouvez voir Bill et Bob sont en cours d'exécution, puis il terminé parce que notre valeur de James n'est plus exécutée. Si nous devions changer ce nom pour dire Bill, maintenant, nous nous attendrions à ce qu'il ne lance que le nom de la facture, car une fois qu'il sera facturé, cela annulerait notre boucle. Nous pouvons donc essayer ça maintenant. Et vous voyez Bill, puis il annule simplement notre boucle et c' est terminé, c'est en cours d' exécution au lieu que le reste de notre boucle se termine. Nous pouvons également le faire avec notre indice si nous sortons de notre indice et si nous faisons égal, au lieu d'utiliser les valeurs, nous pouvons simplement utiliser l'indice à la place. Alors disons que je voulais arrêter notre index de boucle un, je peux le faire. Je pourrais juste régler ça sur un, le brancher notre brunch, compiler et cliquer sur Play. Vous pouvez voir que nous obtenons le même résultat Bill et Bob impriment. Et puis les boucles se terminent parce que nous avons annulé la boucle et que nous l'avons terminée comme étant erronée. Maintenant, il existe un autre type de boucle que nous pouvons examiner. Je vais donc simplement supprimer ces textes. Nous n'en avons plus besoin. Mais si nous sortons, nous pouvons à nouveau rechercher une boucle. Et il y a l' inverse pour chaque boucle. Et cela fonctionne de la même manière que le premier nœud de boucle que nous avons développé. Mais au lieu de boucler du début à la fin, il bouclera de la fin au début et tout le reste est identique avec ce nœud. Il existe également des nœuds de boucle qui n'utilisent pas de tableau. Donc, si nous supprimons ceci pour instant et que je viens de chercher loop, je vais faire défiler vers le bas et vous verrez que nous avons quatre boucles. Maintenant, si je clique dessus, vous voyez qu'au lieu d'une entrée de tableau, nous avons un premier index et un dernier index. Cela indique simplement à une boucle combien de fois va-t-elle s'exécuter ? Donc, si je devais laisser notre premier index à 0, mais que je définissais le dernier index pour que cette boucle s'exécute cinq fois parce qu'elle fonctionnerait une fois pour 0, puis à nouveau jusqu'à ce qu'elle atteigne quatre. Et au fur et à mesure qu'il parcourait chaque corps de boucle, l'indice augmentait d'une unité. Nous avons également ce même nœud mais avec une pause si nous le voulions, nous pourrions faire une boucle for avec break. Et cela fonctionne à nouveau de la même manière que notre nœud de rupture. C'est juste qu'au lieu d'une entrée de tableau, nous pouvons redéfinir un index et le dernier index jusqu'à ce que cela soit 04, il serait exécuté cinq fois. Mais pendant le corps de notre boucle, nous pouvions annuler cette boucle en exécutant l'entrée break comme nous venons de le faire avec la boucle avec notre tableau. Enfin, je voulais juste vous montrer comment nous pouvons définir une course afin que nous puissions les définir comme des valeurs normales. Donc, si nous faisons glisser, nous pouvons choisir le tableau de noms d' exemple défini. Vous pouvez voir que cela nous donne juste un nœud d'ensemble normal et nous pouvons le définir valeurs de tableaux de nombres afin comme étant des valeurs de tableaux de nombres afin de créer rapidement un autre tableau de noms. Et nous définissons ce nom et changeons son type en tableau. Nous pouvons prendre cela et l'insérer dans notre tableau de noms d'exemple comme nous pouvons le faire avec des variables normales. Et cela prendrait simplement notre actuel, ou désolé, cela prendrait les valeurs de nos tableaux de noms et les définirait sur le tableau de noms d' exemple. Cela effacerait complètement notre tableau de noms, puis définirait les valeurs exactement comme notre tableau de noms. Il en va de même pour notre réseau de flotteurs. Et puis tout autre type de tableau que vous créez, nous pouvons les définir très bien. Et nous pouvons prendre une autre valeur de tableau. Nous pouvons le définir ainsi tant qu' ils sont du même type, comme si notre flotteur était branché sur notre tableau de flotteurs, notre nom branché sur notre tableau de noms. Il en va de même pour tous les nœuds que j'ai utilisés. Donc, nos tableaux de boucles, si je vous montre rapidement, nous pouvons prendre notre exemple de tableau flottant, je peux faire glisser et je peux rechercher une boucle. Et vous voyez que nous avons ces mêmes nœuds pour créer un nouveau nœud de boucle. Nous avons cet élément de tableau, mais au lieu d'un nom, il s'agit simplement d'une valeur flottante car s'agit d'un tableau de valeurs flottantes. Mais notre indice reste le même car il aura toujours un index pour chaque entrée de notre tableau. Nous pouvons également faire une course pour nos références d'acteur ou d'objets. Donc si je fais ça rapidement, appelle ça le tableau des acteurs. Vous pouvez voir que si je change le type en acteur, nous allons à notre référence d'objet acteur. Vous pouvez voir que nous avons maintenant une panoplie d'acteurs. Et cela fonctionne à nouveau, la même manière que nous utilisions nos tableaux de noms et de nombres flottants. Nous pourrions passer en boucle avec un éventail d'acteurs. Et cela nous donnera une sortie d'acteur et un indice indiquant que cet acteur est app dans notre tableau. Maintenant, le moteur possède certains nœuds intégrés qui produisent réellement des tableaux. acteurs qui se chevauchent en sont un exemple. Et cela permet essentiellement d'obtenir les acteurs qui chevauchent nos plans actuels. Je suis donc dans le personnage ThirdPerson. Cela obtiendrait ou n'importe quelle application chevaucherait notre personnage, les sortirait sous forme de tableau. Nous pouvons l'utiliser de la même manière que nous utilisions nos variables de tableau. Je pourrais donc, par exemple, parcourir en boucle tous les acteurs qui chevauchent actuellement mon personnage. Et nous pouvions faire toutes sortes de vérifications que nous voulions, nous pourrions dire, peut-être les détruire. Si nous le voulions, nous pourrions détruire les acteurs qui chevauchent notre personnage. Et nous pouvons utiliser cet élément de tableau comme une variable normale, comme nous l'avons fait dans notre leçon précédente avec le type acteur, nous pouvons utiliser ceci pour obtenir leur emplacement. Ou nous pouvons l'utiliser pour définir leur position. Tout comme un acte normal de variable. Bien entendu, nous n'avons pas besoin d'utiliser un nœud de boucle pour cela non plus. Nous pourrions utiliser le nœud get et cela nous donnera simplement le premier index dans le tableau des acteurs qui chevauchent notre personnage. Si nous voulions passer, disons le deuxième ou le troisième, nous pourrions modifier cette valeur d'entrée. Ensuite, nous pourrions utiliser notre nœud get pour nous connecter à l'un de ces nœuds que nous pouvons utiliser avec des variables actives. C'est tout pour cette leçon, et c'est tout pour la section sur les variables du cours. Dans notre prochaine leçon, nous allons examiner les fonctions, leur fonctionnement et la façon dont nous pouvons en créer de nouvelles. 12. Les bases (fonctions): Salut tout le monde. Dans cette leçon, nous allons découvrir les fonctions, comment elles sont utilisées et à quoi elles servent. Les fonctions sont des morceaux de code autonomes que nous pouvons modifier et réutiliser très facilement. Donc pour commencer, dans mon personnage à la troisième personne, je vais juste créer une nouvelle fonction. Et nous pouvons le faire en cliquant sur le bouton de nouvelle fonction ici. Ou nous pouvons aller sur le bouton Ajouter et sélectionner nouvelle fonction qui va créer une nouvelle fonction pour nous. Je vais donner mon exemple. Vous pouvez voir qu' il a également ouvert un nouveau graphique d'événements pour nous avec une entrée. Il y a le nom de notre fonction ici. C'est ici que nous allons coder notre fonction si jamais vous avez besoin d' accéder au code d'une fonction. Si vous êtes dans le graphique d' événements et que vous souhaitez obtenir le code de votre fonction, vous pouvez toujours double-cliquer sur le nom de la fonction pour accéder directement à votre fonction. Comme vous pouvez le voir, nous avons un nœud d'entrée s'exécutera chaque fois que notre fonction sera exécutée. Si nous allons dans Event Graph et que nous faisons glisser notre exemple de fonction, vous pouvez voir qu'il nous a donné un nouveau nœud appelé example. Maintenant, chaque fois que cette broche d' exécution d'entrée est exécutée, le code de notre fonction sera exécuté. Donc, à titre d'exemple rapide, si j'ajoute une chaîne d'impression à ma fonction d'exemple ici, dans notre graphe d'événements, je vais simplement créer un nœud de début de lecture. Et je connecte cela à ma fonction d'exemple. Maintenant, lorsque le jeu démarre, notre fonction d'exemple s'exécutera, et cela exécutera le code dans notre exemple, qui est cette chaîne d'impression. Je vais donc simplement compiler Play. Vous pouvez voir que notre chaîne d'impression est en cours d'exécution. Donc pour vous montrer comment cela peut être utile, nous allons quitter le jeu, revenir à ThirdPersonCharacter et nous allons créer une nouvelle fonction que nous appellerons augmenter la santé. Nous allons également créer une nouvelle variable, que nous appellerons santé actuelle. Si le vôtre est un entier, vous pouvez simplement cliquer dessus et le remplacer un entier et nous compilerons. Maintenant, vous pourriez penser que si nous voulions augmenter la santé, nous allions à notre graphique d'événements, nous aurions été retirés de notre santé actuelle pour obtenir de la santé. Et nous utiliserions un nœud d' ajout, ajoutons la montagne que nous voulons ajouter pour en dire un. Ensuite, nous définissions la santé actuelle. Mais le problème, c'est qu'à chaque fois que vous voulez changer notre santé et notre code, nous devons écrire toutes ces notes. Ce que les fonctions nous permettent de faire, c'est prendre ce code et de le placer dans une fonction. Et au lieu d'avoir à écrire ce code, nous pouvons simplement faire glisser une fonction dans le graphique d'événements ou une autre fonction et lancer ce code. Donc, si nous prenons ce code, nous allons simplement le couper et revenir à notre fonction de santé accrue. Je vais le coller et je me connecte. Actuellement, si nous exécutons la fonction d'augmentation de la façon, tout ce que cela va faire est d'ajouter une santé à notre santé actuelle, ce qui n'est pas particulièrement utile. Nous voulons être en mesure de choisir la quantité de santé ajoutée à notre santé actuelle, mais nous ne pouvons pas le faire. Donc, si nous sélectionnons notre nœud d'entrée ici, vous pouvez voir dans le panneau Détails que nous avons des entrées et des sorties. Nous pouvons maintenant ajouter de nouvelles entrées en cliquant sur ce petit bouton ici. Et cela ajoutera une nouvelle entrée variable. Vous pouvez voir que nous avons une contribution ici. Et si nous allons dans le graphique d'événements et que nous faisons glisser notre fonction d' augmentation de la façon, vous pouvez voir que cette variable est également disponible ici. Maintenant, nous pouvons le renommer en revenant à notre fonction, en sélectionnant l'entrée et nous allons la remplacer par mount. Nous pouvons également modifier le type de variable ici. Donc moins est passé à l' entier par défaut. Mais vous pouvez la remplacer par la variable de votre choix. Nous allons utiliser un entier pour l'instant, car c'est notre variable de santé. Et nous pouvons sortir de notre montant et le brancher dans le nœud plus ici. Donc maintenant, ce qui se passera, c'est que lorsque notre fonction d'augmentation de la santé sera exécutée, notre fonction d'augmentation de la santé sera exécutée, elle prendra le montant plus cela à notre santé actuelle et fixera la santé actuelle. Maintenant, je vais faire glisser à partir d'ici et ajouter une chaîne d'impression juste pour que nous puissions dire si cela fonctionne, nous la faisons glisser depuis le nœud set et la branchons dans le nœud de chaîne d'impression ici. Maintenant, dans notre graphique d'événements, nous voulons exécuter notre augmentation de la santé, exemple lorsque j'appuie sur un bouton, donc je vais cliquer avec le bouton droit et rechercher l'événement d'entrée. Dis pourquoi. Nous allons les parcourir et trouver leur entrée y. Cela s'exécutera chaque fois que j'appuierai sur Y sur mon clavier. Si je branche cela pour augmenter la vitesse à laquelle je peux définir le montant. Je vais donc me mettre à dire cinq. Donc maintenant, lorsque nous compilons et que nous appuyons sur lecture, chaque fois que j'appuie sur Y, vous pouvez voir que ma santé actuelle augmente parce qu' elle l'augmente de cinq à chaque fois que j'appuie sur Y. Maintenant, nous pouvons également ajouter des sorties à notre fonction. Donc, si nous revenons en arrière et que nous quittons la pièce, nous pouvons revenir à notre fonction d'augmentation de la santé ici. Si nous sélectionnons le nœud d'entrée, nous pouvons ajouter une nouvelle sortie. Je vais donc cliquer sur le bouton de nouvelle sortie ici et vous verrez qu' un nouveau nœud a été créé pour nous maintenant. Et c'est ce que nous exécutons lorsque nous voulons sortir quelque chose de notre fonction. Donc, si je branche ça dans la partie antérieure après avoir imprimé la chaîne en C, je peux lui donner un nom. Je vais donc simplement mettre la santé actuelle. Et nous prendrons quelle que soit notre valeur actuelle en matière de santé et nous la produirons. Si nous compilons et revenons à notre graphe d'événements, vous pouvez voir que notre nœud sur le graphe d'événements a maintenant une sortie appelée état actuel. Et cette sortie, quelles que soient les valeurs que nous y insérons à partir de notre fonction. Donc, pour le moment, je ne fais que donner ma valeur santé actuelle. Nous pouvons donc y accéder dans le graphe d'événements. Maintenant, nous pouvons également utiliser des fonctions à l'intérieur d'une fonction. Donc, si nous passons à notre fonction d'augmentation de la santé ici, et que nous voulions peut-être émettre un son à chaque fois que notre santé s'améliorait, nous pourrions créer une nouvelle fonction qui émet un son à l' emplacement de nos personnages que nous pouvons également utiliser d'autres endroits si nous le voulons. Par exemple, nous allons créer une nouvelle fonction. Nous allons simplement appeler cela un son de lecture. Jouez au lecteur audio. L'emplacement. Ici, nous pouvons faire glisser à partir de notre entrée et utiliser le nœud sonore de la plaque à l'emplacement pour faire glisser depuis l' emplacement et obtenir l'emplacement de l'acteur. Cela produira un son que nous avons réglé à l'emplacement actuel du joueur. Maintenant, nous pouvons ajouter une nouvelle entrée pour nos sons afin de choisir le son à jouer. Un moyen plus rapide. Nous pouvons le faire comme si nous faisions glisser notre entrée audio ici et le faire glisser vers le nœud d'entrée, si je lâche prise, vous pouvez voir qu'il ajoute simplement une nouvelle entrée sonore pour nous et nomme ce son. Si nous voulons le renommer, nous le pouvons, nous le faisons simplement dans les entrées ici. Et maintenant, lorsque nous compilons, si nous revenons à quelle augmentation, quelle fonction, nous pouvons maintenant faire glisser cette nouvelle fonction que nous venons de créer dans notre fonction augmentée. Nous pouvons l'utiliser comme nous le pouvons dans le graphique d'événements. Donc si je le connecte, nous pouvons maintenant dire son parce que nous avons ajouté l'entrée audio à notre fonction. Et chaque fois que nous augmentons la façon dont la fonction fonctionne et que nous exécutons le même code augmente notre santé d'un montant Il affichera la chaîne de caractères actuelle, puis il exécutera le code à l'intérieur de notre son de lecture à l'emplacement en utilisant le son que nous avons défini. Actuellement, je n'ai pas défini de son. Ensuite, une fois que le son joué et que cette fonction est terminée, elle continue et renvoie notre valeur de santé actuelle dans notre graphique d'événements. Et bien sûr, le son de lecture sur lieu de jeu n'est qu'une fonction comme notre augmentation de la santé. Donc, si nous le voulions, nous pourrions également l' utiliser dans le graphe d'événements et à d'autres endroits ou à l'intérieur d'une fonction. L'un des meilleurs avantages des fonctions est qu'elles sont réutilisables. J'ai donc ma fonction d'augmentation de la santé exécutée ici sur l'entrée y. Mais je pourrais aussi utiliser la fonction increase how dans d'autres parties de mon code si je le voulais, je peux en avoir autant que je veux. Et quand tout le monde sera exécuté, il exécutera le code comme on peut s'y attendre. Chaque fois que nous modifions quelque chose dans notre fonction cellulaire accrue. Supposons que nous voulions apporter un changement ici ou s'il y avait un bogue ou quelque chose comme ça, nous pouvions faire un changement à un endroit à l'intérieur ou augmenter le fonctionnement. Et cela affectera tous les endroits que nous avons utilisés sont le nœud de fonction de santé accrue. Les fonctions disposent également d' une autre fonctionnalité appelée variables locales. Donc, si nous ouvrons le cœur, augmentez le fonctionnement ici, vous pouvez voir en bas du panneau Mon plan directeur, nous avons les variables locales. Maintenant, une variable locale fonctionne à peu près de la même manière qu'une variable normale, n'est-ce pas ? Il n'existe qu' à l'intérieur de notre fonction. Nous ne pouvons donc pas accéder à une variable locale dans le graphe d'événements à partir de notre fonction de santé accrue, nous ne pouvons y accéder que dans notre fonction augmentée. Une autre chose des variables locales est qu'une fois cette exécution ou une fois notre fonction terminée, variable sera réinitialisée à sa valeur par défaut. Donc, à titre d'exemple, si je crée une nouvelle variable, branchez et refroidissez cet exemple. Et ce n'est qu'un booléen. Donc, si nous faisons un nœud get ici, nous créerons également une chaîne d'impression. Maintenant, lorsque nous exécuterons ce nœud de chaîne d' impression, je vais brancher mon exemple à la chaîne. Il affichera soit vrai soit faux en fonction de la valeur de notre exemple actuel. Par défaut, il est défini sur false. Maintenant, après cela, si je le définis sur true, vous vous attendez à ce que la prochaine fois que nous exécuterons ce code, il retourne vrai parce que nous le définirons sur true après avoir imprimé la chaîne. Mais il retournera toujours false comme vous pouvez le voir ici. Parce que chaque fois que notre fonction est terminée, cette variable sera réinitialisée à sa valeur par défaut, qui est false. Les variables locales sont un excellent moyen de stocker temporairement des informations dans votre fonction sans avoir à créer nouvelles variables qui peuvent s' additionner rapidement si de nombreuses fonctions sont en cours. Il y avait également de bonnes choses pour organiser votre réception. Supposons que vous ayez un peu plus de code en cours et que vous vouliez stocker des variables juste pour garder les choses en ordre. Tu pourrais le faire aussi. Une autre chose utile que vous pouvez utiliser pour garder vos fonctions ordonnées car nous avons nos entrées, par exemple, notre entrée MT ici. Et ce fil va dans notre note d'annonce. Maintenant, peut-être que dans le futur, vous aurez une fonction qui aura de nombreuses entrées. Il y avait des fils électriques partout et ça n'aurait pas l'air très bien rangé. Donc, ce que vous pouvez faire à la place, c'est que vous pouvez cliquer avec le bouton droit et oublier Vous pouvez voir que j'ai accès à la variable amount, mais je n'ai pas de variable locale appelée amount. n'y a pas de variable normale appelée montant. Il s' agit essentiellement d'un raccourci vers cette sortie de quantité ici. Donc au lieu d'avoir le fil branché à partir de notre entrée, nous pouvons simplement le faire glisser ici et nous pouvons obtenir cette valeur. Et tout ce que cela fait est essentiellement de couper le fil et d'accéder à cette variable de quantité, une sorte de raccourci. À présent, les fonctions ont certaines limites. Par exemple, nous ne pouvons pas utiliser nœuds latents dans une fonction. Nous n'avons pas encore abordé les notes latentes, mais nous le verrons dans une prochaine leçon. Mais juste pour un aperçu rapide, si nous cliquons avec le bouton droit de la souris sur le graphique d'événement ici et que nous recherchons aujourd'hui, nous pouvons créer un nœud de retard. Désormais, un nœud latent aura une petite icône d'horloge dans le coin supérieur droit. Et en gros, ce que fait un nœud de retard, c'est qu'il reçoit une entrée et puis, quelle que soit notre durée, il attend ce temps avant d'exécuter la sortie. Cela nous permet donc de bloquer le code. Par exemple, si je branchais ma note de lecture ici, et je vais simplement régler ceci sur trois. Et puis j'ai branché mon augmentation de santé ici. Il commencerait la lecture, s'exécuterait, un nœud de retard serait alors exécuté, et il attendrait trois secondes, puis il exécuterait la sortie terminée. Comme il s' agit d'un nœud latent, nous ne pouvons pas l'utiliser dans la fonction. Donc, si je vais à mon augmentation de santé, juste, et je traîne et je cherche un retard. Vous pouvez voir que ce nœud de retard n'apparaît pas parce qu'il est latent et nous ne pouvons pas les utiliser dans la fonction. Ensuite, nous allons examiner les fonctions pures et impures. Donc, si nous revenons à notre graphique d'événements ici, et que je crée une nouvelle fonction d' augmentation de la façon dont. Et dans le panneau Détails, vous pouvez voir nous pouvons le transformer en une fonction pure. Donc, si je prends cela en charge, vous pouvez voir que cela affectera également toutes les autres fonctions d' augmentation, cela le transforme en cette fonction. Maintenant, la façon dont cela fonctionne est pour chaque sortie connectée à nos broches de sortie, cette fonction s'exécutera. Donc, à titre d'exemple, si je prends mon conseil Plano de début et que je vais simplement utiliser un état de santé actuel défini. Et nous allons nous connecter ici, augmenter la santé par exemple un. Et nous allons relier cela à l'état de santé actuel. Alors disons que j'espère qu'avec 0, cela augmenterait d'un , puis produirait une nouvelle santé actuelle. Donc ça en serait un. Et si je devais copier et coller à nouveau ce nœud d'ensemble, nous le connecterons ici. Ce nœud serait un, mais ensuite ce nœud s'exécuterait à nouveau pour ce nœud défini, et ce nœud le définirait en fait sur deux, et ainsi de suite et ainsi de suite. Pour chaque connexion, nous exécuterions nouveau ce nœud et augmenterions la valeur, je l'espère. Alors qu'il s'agit d'une fonction impure, si nous sélectionnons à nouveau notre fonction et que nous cliquons sur tech P0, si nous connectons cette sauvegarde pour commencer à jouer, cela retournera toujours la même sortie que lors de son exécution. Ainsi, lorsque le jeu commencera , nous augmenterons notre santé de 0 à 1. Nous allons définir cette valeur ici. Cette valeur sera définie sur un. Et puis celui-ci sera également défini sur un car il ne s' exécutera qu'une seule fois lorsqu'il sera exécuté. Ensuite, il stocke les valeurs de sa sortie dans ces broches. Et puis chaque connexion que nous aurons pour cela sera la même jusqu'à ce que nous réexécutions cette fonction. C'est juste quelque chose à retenir lorsque vous travaillez avec des fonctions pures, mais quel que soit le nombre de connexions que vous avez connectées à cette fonction, c'est le nombre de fois qu'elle s'exécutera. Si vous avez des calculs en cours ou quelque chose comme augmenter votre santé, chaque fois que vous faites glisser quelque chose et que vous définissez quelque chose, il s'exécutera à nouveau. Ainsi, votre valeur, vos valeurs de sortie peuvent être différentes chaque fois qu'il est exécuté. Ensuite, nous allons examiner les fonctions de remplacement. Maintenant, si vous ne l'avez pas déjà vu, je vous recommande d'y aller et d'y jeter un œil. Nous avons une leçon de variable sur les acteurs et les objets. Dans cette leçon, je vais parler l'héritage et j'explique un peu cela. Mais essentiellement, tout objet qui existe dans le monde est un acteur, y compris notre personnage. Mais ensuite, nous avons différents types d' acteurs comme notre personnage ici. Et nous pouvons accéder à l'acte des fonctions ou aux fonctions qui existent à l'intérieur de l'acteur via cette option de remplacement ici dans l' onglet Fonctions. Donc, si nous cliquons dessus, vous pouvez voir que nous avons sur le côté droit, il est écrit acteur. Ce sont maintenant des fonctions auxquelles nous pouvons accéder et qui existent sur l'acteur. Nous les avons parce que nous sommes un personnage, mais aussi un acteur. Si vous descendez un peu plus, vous pouvez voir que nous en avons quelques-uns qui disent caractère. Nous avons maintenant accès à ces fonctions car notre personnage à la troisième personne est un personnage. Et si nous descendons encore plus loin, vous pouvez voir que nous en avons aussi de foutus. Et nous les avons parce que notre personnage est également un ****. Et chaque fois que nous sélectionnons l'une de ces fonctions ici, nous disons au moteur nous ne voulons pas que vous exécutiez le code qui existe dans, disons, le plan de caractères. Nous voulons reprendre cette fonction et exécuter notre propre code. Par exemple, nous pouvons cliquer, sauter. Et vous voyez que nous avons repris cette fonction de la classe de personnage. Nous pouvons écrire notre propre code et maintenant toutes les fonctions ne ressembleront pas à ceci, où nous avons un éditeur séparé si nous créons ou si nous remplaçons une autre fonction, disons la destruction, qui créer ce qui ressemble à un événement dans notre graphe d'événements. Et la raison pour laquelle il le fait est simplement parce que notre fonction détruite n'a pas de sorties, mais peut sauter, elle a donc une sortie ici. Et tout ce que nous avons ramené ici sera vérifié chaque fois que nous essaierons de sauter. Donc, actuellement, si j' essayais de sauter maintenant, je ne serais pas capable de le faire parce que nous avons repris la fonction et nous lui disons simplement que nous ne pouvons pas sauter avec la valeur false. Nous pourrions donc avoir notre propre code ici qui contrôle si nous pouvons sauter ou non, par exemple. Maintenant, vous vous demandez peut-être si nous pouvons remplacer ces fonctions. Pouvons-nous trouver où se trouvent ces fonctions et regarder à l'intérieur et voir ce qui se passe comme nous le pouvons avec les fonctions que nous avons créées ? Malheureusement, ce sont des classes C plus. Acteur, personnage important sont en fait créés dans C plus plus et intégrés dans le moteur. Il n'y a aucun plan que nous pouvons consulter. Nous pouvons par exemple utiliser un personnage à la première personne et examiner ces fonctions. Vous pouvez le faire en C plus si vous le souhaitez, mais c'est un peu plus avancé. Enfin, je veux juste vous montrer comment vous pouvez appeler fonctions d'un Blueprint à un autre. Donc, si nous allons sur notre carte à la troisième personne ici, je vais simplement créer une nouvelle classe de plan rapidement. Il y aura un acteur, appelez-le déclencheur, il le fera glisser dans le niveau ici. Et je vais ouvrir ce plan. Nous allons ajouter un nouveau composant et nous appellerons cette case. Nous voulons la collision de la boîte et je vais juste la déplacer vers le haut. Et nous sommes également dans la recherche de détails pour le jeu Hidden in Nin. Je vais décocher ça juste pour le voir. Ensuite, nous allons supprimer cette recherche et faire défiler la page vers le bas. Nous allons dire en fait, nous pouvons aller à Event Graph, qui crée une nouvelle fonction. Désolé, l'événement ferait l'affaire, commence à se chevaucher. Nous avons déjà utilisé ce nœud, si vous vous souvenez dans nos leçons précédentes. Mais essentiellement, cet événement se déroulera chaque fois que quelque chose chevauche notre déclencheur et il nous donnera une référence à l'acteur qui nous a chevauchés. Nous pouvons donc nous éloigner de cela. Et je vais juste payer un prix à ThirdPersonCharacter. Maintenant, si vous vous souvenez essentiellement du coût qu' il vérifie, cet objet d'entrée est-il un caractère ? Si c'est le cas, nous lancerons le cube x supérieur ici et cela nous donnera accès à ce caractère est variable. Encore une fois, à l'avenir, il y aura une leçon de casting, mais ce n'est qu' un exemple rapide. Si vous vous souvenez, nous pouvons accéder aux variables à l'aide de ceci. Nous l'avons donc fait avec nos cubes. Nous pouvons également accéder aux fonctions. Donc si je traîne parce que je suis en train de lancer le plan de personnage ThirdPersonCharacter et c'est sur cela que nous avons travaillé. Si je le fais glisser et que je cherche à augmenter la santé, vous voyez que je peux obtenir cette fonction d' augmentation. Et si vous vous souvenez, nous le réglons sur, si nous revenons à notre caractéristique, nous réglons notre fonction d'augmentation sur PO. Donc si je décoche ceci et que je le rends impur, dois déconnecter celui-ci car cela nous donnera envie du contraire. Vous pouvez voir qu'il est réellement mis à jour ici. Et grâce à cela, nous pouvons accéder aux fonctions qui existent dans notre personnage à la troisième personne dans un autre plan. Cette fonction s'exécutera comme si nous l'exécutions simplement dans notre personnage à la troisième personne. Mais au lieu de cela, nous pouvons maintenant lancer cela chaque fois que notre, disons, notre personnage se chevauche. Je vais donc le déclencher, afin que nous puissions augmenter sa santé de cinq, disons. Maintenant, quand nous appuyons sur Play et que je passe sur cette boîte, vous pouvez voir qu' elle affiche maintenant cette valeur santé accrue. Ce sera tout pour cette leçon. J'espère que vous en comprenez un peu plus sur les fonctions maintenant et que lors de notre prochaine leçon, nous allons examiner les macros. 13. Les bases (Macros): Salut tout le monde, Dans cette leçon, nous allons examiner les macros. Elles sont similaires aux fonctions en ce sens qu'il s' de morceaux de code autonomes que nous pouvons réutiliser autour de notre Blueprint. Nous verrons également dans quels cas vous pouvez utiliser une macro au lieu d'utiliser une fonction également. Commençons donc. Nous allons créer une nouvelle macro. Nous pouvons le faire dans le panneau Mes plans ici. Vous pouvez soit cliquer sur le bouton Nouvelle macro ici soit accéder à la liste déroulante et sélectionner une macro. Si nous cliquons dessus, nous pouvons appeler notre nouvel exemple de macro. Vous pouvez voir qu'il a également ouvert un nouvel éditeur pour nous, comme il le fait avec une fonction. Et nous avons une entrée et une sortie enneigées. Maintenant, contrairement à une fonction, vous pouvez voir que nous n'avons pas entrées ni de macro, et c'est parce que nous devons les ajouter nous-mêmes. Dans le panneau Détails, nous pouvons cliquer sur le symbole plus et créer de nouvelles entrées. Maintenant, nous pouvons créer des entrées et des sorties de broches d'exécution. Donc, si nous cliquons sur l'option Créer une nouvelle sortie ici pour les sorties, vous pouvez voir maintenant que j'ai une entrée d'exécution et une sortie d'exécution. Et si nous pouvons l'extraire, allez dans le graphique d'événements, pouvons faire glisser cette macro maintenant dans notre graphe d'événements. Et vous pouvez voir que nous avons à la fois nos entrées et sorties et que nous pouvons également les renommer, quelque chose d'un peu mieux. Renommez donc ceci pour dire dans ce 12 out, juste pour le rendre un peu plus clair. Ce qui est intéressant avec les macros, c' est que vous pouvez avoir plusieurs entrées et sorties d'exécution. Donc, si je le voulais, je pourrais ajouter une autre sortie d'exécution. Je pourrais appeler ça une sortie. Et nous pourrions exécuter du code et des cheveux. Ensuite, en fonction de ce que fait ce code, nous pouvons exécuter l'une ou l'autre de ces sorties. Tout comme nos fonctions, nous pouvons également avoir des entrées et des sorties variables. Par exemple, je pourrais ajouter une nouvelle entrée entière et changer le nom pour dire amount, comme nous l'avons fait avec notre fonction dans notre leçon précédente. Vous pouvez voir que nous avons maintenant une entrée de montant. Si je reviens au graphique d'événement, vous pouvez voir que nous l'avons dans le stylo d'exécution, et nous avons également une entrée, puis nos deux sorties. Maintenant, la façon dont nous utilisons les macros est très similaire à la façon dont nous utilisons les fonctions en ce sens que nous pouvons avoir plusieurs macros identiques n'importe où dans notre Blueprint, nous pouvons utiliser des macros à l'intérieur d' autres macros si nous le voulons et si nous apportons des modifications à l'intérieur de la macro. Par exemple, si nous ajoutions du code ici, cela affectera toutes les macros que nous avons créées à partir de ce type de macro. Toutes ces macros seraient donc mises à jour avec les modifications que nous apportons dans notre macro. Nous avons maintenant configuré notre macro de quelques entrées et sorties différentes. Nous pouvons coder ici comme nous pouvons le faire dans le graphique d'événements ou dans notre fonction. Ainsi, dans notre dernière vidéo, j'ai mis en place une fonction d' augmentation de la santé. Je peux faire la même chose avec la macro, donc nous allons créer une nouvelle variable, que nous appellerons santé actuelle. Et nous le définirons sur un entier si le vôtre ne l'est pas déjà. Et nous allons le faire glisser dans un nœud d'ajout. Et nous allons ajouter le montant. Et nous allons faire glisser la sortie de notre Add Node et nous allons définir l'état actuel de la façon suivante. Maintenant, comme il s'agit d'une macro, nous pouvons avoir plusieurs stylos d'exécution de sortie. Nous pourrions donc vérifier, par exemple, notre état de santé actuel est-il égal à 100 ? Si c'est le cas, peut-être voulons-nous exécuter un stylo d'exécution différent. J'utilise un nœud de branche ici. S'il est à 100, nous exécuterons la sortie supérieure, sinon, nous exécuterons la sortie inférieure. Vous pouvez les renommer, exemple santé maximale pour la santé supérieure et non santé maximale pour la santé inférieure. Parce que nous voulons peut-être que le code soit exécuté différemment selon que nous sommes Max Health ou non. Donc, si nous revenons à notre graphique d'événements ici, vous pouvez voir que nos deux exemples de note ici ont été mis à jour, donc ils ont mis à jour les sorties. C'est parce que nous avons modifié leur macro. Et nous pouvons le gérer maintenant et augmenter notre valeur santé. Donc, si je dis, mettez cela à 50 et nous ajouterons un nouvel événement input. Et qu'utiliseriez-vous, disons x, qui trouve l'entrée x de m. Donc, quand j'appuie sur X dans le jeu, j'ajouterai 50 points de vie. Ensuite, nous pouvons exécuter un code différent selon que nous sommes Mac ou non. Je vais donc utiliser la chaîne d'impression parce qu'elle est facile à voir dans le jeu. Nous allons donc appeler Max Health et nous allons copier et coller. Cela va faire tourner Max comme ça. Nous allons donc composant. Maintenant, nous pouvons appuyer sur play et voir si cela fonctionne. Si j'appuie sur X, vous pouvez voir que la sortie n'est pas maximale. Si j'appuie à nouveau dessus, nous atteignons maintenant la santé maximale. n'est donc qu'un exemple de la façon dont nous pouvons utiliser des macros pour exécuter code différent dans nos plans en fonction d'une valeur Par exemple, le moteur inclut maintenant de nombreuses macros intégrées. Ainsi, par exemple, r est un nœud valide si nous cliquons avec le bouton droit de la souris et que nous faisons défiler vers le bas jusqu'au nœud est valide. Vous l'avez peut-être reconnu dans l'une de nos leçons précédentes. Ce n'est qu'une macro intégrée au moteur. Donc, si nous double-cliquons dessus, cela nous amène à un plan appelé macros standard. Et cela vient avec le moteur et vous pouvez voir qu'il ne s'agit que d'une macro, comme dans notre exemple de macro. Il a le même type de mise en page et nous pouvons également voir les entrées. Donc, si nous passons aux macros standard, regardez ici les entrées. Il n'y a donc qu' une épingle d'exécution. Entrée et broche d'objet , puis aux sorties d'exécution. Et tout ce que cela fait, c'est utiliser la fonction valide intégrée au moteur. Chèques. L' objet d'entrée est-il valide et utilise-t-il ensuite une branche pour exécuter est valide ou non valide ? Il existe d'autres macros fournies avec le moteur que vous pouvez consulter. Ils sont tous dans ces catégories ici. Donc, si vous le souhaitez, vous pouvez les parcourir et voir comment ils fonctionnent. Mais essentiellement, les macros sont vraiment utiles pour des morceaux de code plus petits et autonomes que vous pouvez réutiliser beaucoup dans votre projet. Par exemple, vous vouliez peut-être vérifier si le personnage est mort ? Donc, au lieu de faire le bilan de santé , est-ce inférieur ou égal à 0 ? Et puis en exécutant un nœud F, vous pouvez simplement prendre tout ce code, le couper et le mettre dans vos propres macros pour que vous puissiez l'avoir mort. On pourrait mettre ça ici. Et si nous faisons glisser notre stylo d'exécution vers l'entrée, nous pouvons faire de même avec les sorties. Nous pouvons donc faire comme ça. C'est juste un peu plus rapide que d'avoir à les ajouter tous ici. Nous avons maintenant une petite macro que nous pouvons utiliser pour vérifier si notre personnage est mort. Nous pouvons donc simplement le faire glisser. Et au lieu d'avoir à ajouter tous ces nœuds. Et chaque fois que nous voulons vérifier si le personnage est mort, nous pouvons simplement le faire glisser dans une petite macro et il fait tout pour nous. C'est là que réside leur force avec les macros, vous pouvez les utiliser beaucoup. Ils peuvent contrôler le code en cours d'exécution. Et ce ne sont que de petits outils pratiques, en particulier pour vérifier des valeurs, comme nous le faisons ici. Un autre avantage de la macro est que vous pouvez y utiliser des nœuds latents. Donc, si vous vous souvenez de la leçon précédente, vous ne pouvez pas utiliser de nœud de délai dans une fonction, mais vous pouvez les utiliser dans des macros. Donc, si je le voulais, je pourrais ajouter un nœud de délai et ici, donc un sacré retard. Vous pouvez voir que je peux très bien ajouter cela . Je peux le compiler. Et si nous regardons notre graphique d'événements, vous pouvez voir que la macro est latente parce qu'elle a une petite horloge. Et c'est parce qu'à l'intérieur, nous avons ajouté ce nœud de délai. La raison en est que les macros s'exécutent comme s'il s'agissait de code dans Event Graph. Mais au lieu de cela, ils se sont simplement compactés dans OneNote que nous pouvons réutiliser et modifier très facilement. Ils ne réinitialisent pas non plus les fonctions chaque fois que nous les exécutons. Ils sont donc beaucoup plus similaires au code que nous avons dans Event Graph plutôt qu'au code que vous avez dans une fonction. Certaines choses que vous ne pouvez pas faire avec les macros, c'est que vous ne pouvez pas les appeler à partir d'autres plans. Donc, si vous vous souvenez dans la leçon précédente, j'ai créé un déclencheur et nous pouvons le refaire. Si nous créons une nouvelle classe de plan, nous la vendrons à un accent et je l'appellerai déclencheur, cela ouvrira ça. Et je vais créer un nouveau composant de collision de boîtes. Et nous le déplaçons juste un peu plus haut et nous le réglerons sur caché dans le jeu enlèverons pour que nous puissions juste le voir. Et ici, nous allons créer un nœud de début de superposition. Si vous vous souvenez, cela s'exécute chaque fois que quelque chose chevauche notre déclencheur et cela nous donnera l'acteur qui l'a chevauché. Faites glisser à partir d'ici et utilisez le Cast to ThirdPersonCharacter. Et cela prendra notre sortie d'acteur qui se chevauche ou se déclenche. Et il vérifiera s'il s'agit d'un ThirdPersonCharacter pour is, puis il nous donnera accès à cette variable et nous lancerons l'épingle réussie ici en haut. Donc, si vous vous souvenez, nous pouvons appeler des fonctions via ce bouton. Mais revenez à mon personnage ici et je vais simplement créer une fonction. Nous appellerons cela augmenter la santé. Et nous allons simplement compiler. Je n'ajouterai aucun code et nous reviendrons à notre déclencheur. Si je traîne, je peux ou je peux accéder à cette fonction afin d'améliorer ma santé. Vous pouvez voir que je peux appeler cette fonction depuis mon personnage. Mais si tu te souviens, nous avons sa macro morte. Si je fais glisser la souris et que je recherche est morte, je ne trouve pas cette macro car elle n'est pas accessible depuis mon plan de personnage. Je ne peux l'utiliser que dans mon plan de personnage. Enfin, si vous vous souvenez de la leçon précédente, nous pouvons remplacer les fonctions de nos plans parents. Par exemple, comme il s'agit d'un plan de personnage à la troisième personne, il s'agit d'un enfant du personnage. Je peux remplacer les fonctions qui existent dans le plan de personnage. Mais vous ne pouvez pas le faire avec des macros. Les macros n'existent que dans nos cheveux de Blueprint. Je ne peux pas remplacer et prendre le contrôle des macros, le plan de personnage ou par exemple le plan de personnage ou le plan actif. Donc, pour résumer, les macros sont des outils vraiment utiles que vous pouvez créer et qui peuvent simplement vous simplifier la vie. Vous n'avez donc pas à recoder des éléments tout le temps. Et vous pouvez les modifier en un seul endroit et cela affectera tous les endroits où la macro est utilisée. Ils peuvent également contrôler le code qui est exécuté très facilement car nous pouvons avoir plusieurs entrées et sorties d'exécution. 14. Les bases (structures et enums): Salut tout le monde. Dans cette leçon, nous allons examiner les structures et les énumérations. Commençons donc. Les structures, ou parfois appelées structures, sont un moyen de stocker plusieurs types de variables différents dans une même variable. Pour vous donner un exemple, je vais simplement créer une nouvelle variable. Je vais appeler cela de la paille d'exemple. Et nous allons définir le type de variable une structure intégrée au moteur. Si vous voulez trouver les autres structures du moteur qui l'accompagnent, vous pouvez simplement descendre dans la catégorie structure. Et ici, vous pouvez voir toutes les structures que vous avez utilisées dans le moteur. y a de fortes chances que vous n' y alliez pas très souvent. Parce qu'ils sont utilisés principalement pour les fonctions du moteur et d' autres choses de ce genre. Mais nous allons en prendre un comme exemple. Je vais donc créer, ou je vais définir notre type de variable deux nommé float. Et nous allons définir notre variable avec deux noms flottants, puis nous compilerons. Maintenant que nous avons compilé, vous pouvez voir que notre valeur par défaut inclut une variable float et une variable name que nous pouvons toutes les deux individuellement si nous le voulons. Et ils fonctionnent de la même manière que vous vous attendez à ce qu'un nom ou une variable flottante fonctionne. Maintenant, cette structure n'inclut que deux variables, un flottant et un nom, mais vous pouvez également être frappé avec beaucoup plus de variables et de types de variables différents. Maintenant, nous pouvons obtenir et définir un AVC soutenu comme nous le pouvons avec n'importe quel autre type de variable. Donc, si nous glissons notre exemple structure ici, vous pouvez voir que nous pouvons tout obtenir. Nous pouvons créer un nœud d'ensemble et il nous donne ces nœuds que nous avons déjà vus avec d'autres types de variables. Maintenant, ce qui est intéressant avec les structures auxquelles nous pouvons accéder ces variables sont stockées dedans très facilement. Nous pouvons simplement faire glisser depuis notre nœud get et nous pouvons créer un nœud de rupture. Maintenant, parce que j' utilise named float, il est dit break named float. Mais si nous utilisions une structure différente avec un nom différent, cela indiquerait break, puis le nom de cette structure à la place. Il créera donc le nœud flottant nommé Blake break. Et vous pouvez voir ici que nous pouvons désormais accéder à variable flottante ainsi qu'à notre variable name. Et ce ne sont que des broches variables ordinaires. Maintenant, si nous le voulions, nous pourrions sortir de notre float et créer un nœud add, par exemple, ou tout autre nœud Related float. Et nous pourrions faire la même chose de notre nom, sortie variable également. Si nous avions, disons, une variable flottante, nous pourrions également définir cette variable flottante en utilisant ce stylo. Nous pouvons également obtenir les cheveux des épingles d'une manière différente si nous en avons assez, encore une fois, notez-le, et nous cliquons avec le bouton droit sur la broche de sortie, nous pouvons sélectionner l'option Split Struct Pin ici. Vous pouvez voir que nous pouvons maintenant obtenir directement valeur flottante et la valeur notre nom à partir de l' exemple de variable struct. Et si nous voulons les recombiner, afin qu'il revienne à notre nœud get normal par défaut ici, nous pouvons cliquer avec le bouton droit sur les broches de sortie et sélectionner Recombiner Struct Pin. Vous pouvez voir que c' est redevenu normal. Je dirai cependant, avec mon expérience dans le moteur utilisant cette option Split Struct Pin, au lieu d'utiliser le nœud break, c'est un peu plus sujet à la rupture avec les mises à niveau du moteur et des choses de ce genre. Personnellement, je préfère utiliser les nœuds de rupture, mais c'est une préférence personnelle. Vous pouvez utiliser les épingles divisées si vous le souhaitez. Nous savons maintenant comment obtenir des informations à partir de notre nœud Strokes get. Nous voulons être en mesure de définir des informations sur nos traits, ce que nous pouvons faire. Donc, si nous prenons notre note de set ici et nous sortons de la broche d'entrée, rechercherons make. Vous pouvez voir que nous avons une option pour créer un flux nommé. Encore une fois, si nous utilisions un type de structure différent, il faudrait dire Make, puis le nom des traits. Nous allons donc créer cette note ici. Vous pouvez voir que nous avons maintenant une entrée flottante et une entrée de nom. Cela nous permet de définir un flux ou d'être des variables nommées dans notre structure. Le seul problème avec ceci est que nous voulons seulement qu'il change notre valeur flottante et que nous ne voulions pas changer la valeur de notre nom, nous voulions simplement laisser cela pareil. Cela écraserait en fait la valeur de notre nom. Donc, ce que nous pouvons faire à la place, si nous voulons simplement modifier l'une des variables de notre structure, nous pouvons créer un nœud, le faire glisser et rechercher les membres de l'ensemble. Et vous voyez que nous avons des membres définis dans le nom non struct. Encore une fois, le nôtre s' appelle float. Nous allons donc dire que les membres de l'ensemble dans le flux nommé créeront ce nœud. Et nous obtenons cette note étrange ici. Dans le panneau Détails. Nous pouvons accéder à ce menu déroulant. Pouvez-vous voir que nous avons une case à cocher pour chaque type de variable qui se trouve dans notre structure. Donc, si je voulais simplement changer la variable float, nous pouvons la prendre ici. Et vous voyez que cela a maintenant ajouté une entrée pour notre flotteur. Maintenant, lorsque ce nœud s'exécute, nous pouvons définir une nouvelle variable flottante dans notre structure sans affecter notre variable name. Alors qu'avec le nœud set, nous devrions définir à la fois notre variable float et notre variable name. Et bien sûr, si vous aviez une structure avec plus de variables, celles-ci seraient listées ici. Vous pouvez prendre en charge plusieurs variables à l'aide des notes des membres de l'ensemble. Donc, si je le voulais, je pourrais également avoir ces deux broches ici comme entrée. Et nous pouvions modifier ces deux valeurs en même temps. Ce nœud agit automatiquement comme le fait un nœud défini. Nous n'avons donc pas besoin d'utiliser un nœud d'ensemble pour que ces modifications s'appliquent. Juste au moment où ce nœud sera exécuté, il changera ces valeurs pour nous dans notre structure. Donc, jusqu'à présent, nous avons utilisé ce marteau à flotteur nommé qui est intégré au moteur. Mais nous pouvons créer nos propres traits et choisir les variables qui seront stockées à l'intérieur. Pour ce faire, nous allons aller dans le navigateur de contenu ici. Je vais juste cliquer avec le bouton droit de la souris et un espace vide. Ensuite, nous voulons aller dans la fenêtre contextuelle des plans et nous allons sélectionner structure. Maintenant, si vous nommez votre structure, c'est comment la structure sera appelée et l'option types de variables. Donc je vais juste appeler ma structure vidéo comme ça. Et nous allons double-cliquer dessus pour l'ouvrir. Je vais juste mettre le mien en haut ici. Vous pouvez voir que nous avons maintenant une option qui nous permet de définir nos variables. Par défaut, nous n'avons donc qu' une variable booléenne appelée underscore de membre 0. Nous pouvons ajouter de nouvelles variables ici en cliquant sur le bouton Ajouter une variable. Et si nous le voulons, nous pouvons supprimer des variables en cliquant sur la petite corbeille ici pour les supprimer. Nous allons donc ajouter quelques variables. Et vous pouvez imaginer que si nous voulions stocker des informations sur, disons, un élément, nous pourrions utiliser une structure pour le faire et conserver toutes ces informations stockées dans une seule variable, au lieu d'avoir à avoir à des centaines de variables décrivant un élément. Par exemple, nous voulions peut-être que notre article porte un nom. Nous allons donc définir le nom de l'élément. On pourrait appeler ce nom un poids. Nous allons donc utiliser float. Nous appelons ce poids variable une valeur endommagée. Nous pourrions donc dire un entier pour endommager, puis peut-être un texte que nous pouvons dire est la description. Et nous pouvons sauver ça. Maintenant, lorsque nous revenons à notre ThirdPersonCharacter, nous pouvons créer une nouvelle structure. ce que nous appellerons notre vidéo. Et lorsque nous passons au type de variable, nous pouvons rechercher une vidéo. Et vous verrez la structure vidéo. C'est le nom de notre structure. Si vous avez appelé mâchoires quelque chose de différent , vous devrez le rechercher. Nous allons donc créer ceci et compiler. Donc maintenant, lorsque nous passons à la valeur par défaut, vous pouvez voir que nous avons les quatre variables que nous avons créées dans notre structure avec les bons noms et voir si nous pouvons définir name, un nombre à virgule flottante, un entier et une description pour notre structure. Et comme avant, nous pouvons y accéder avec la note de frein. Donc, si nous créons un nœud, nous le faisons glisser et que nous créons une structure vidéo de rupture, vous pouvez voir que le moteur se configure automatiquement pour nous afin que nous puissions simplement créer ce nœud. Et juste comme ça, nous avons accès à notre nom, à notre poids, dégâts et à notre description à l'aide de notre nœud de rupture. Encore une fois, si nous voulions définir ces variables à l'aide du nœud set members, nous pouvons faire glisser vers l'extérieur, utiliser les membres de l'ensemble. Et vous voyez les membres de l'ensemble dans la structure vidéo. Et nous pouvons prendre toutes les variables que nous voulons, comme nous l'avons fait auparavant avec notre float nommé. Mais c'est maintenant notre propre structure personnalisée. Maintenant, nous pouvons également définir les valeurs par défaut de notre structure. Donc, si nous revenons à nos séquences vidéo, vous pouvez voir que nous avons une option de valeurs par défaut ici. Nous pouvons donc simplement déterminer quelles sont les valeurs par défaut standard les valeurs par défaut standard pour le type de vidéo Struck. Alors peut-être que je veux juste dire, disons le nom de l'objet. Nous voulions que le poids par défaut soit disons un et une description de quelle pièce ? Informations sur l'article ici. Et les dégâts seront de dix. Ce sont donc maintenant les valeurs par défaut si nous sauvegardons maintenant et que nous revenons à ThirdPersonCharacter. Et je sélectionne ma structure vidéo ou compile parce que nous avons apporté quelques modifications à la structure, nous devrons compiler. Vous pouvez voir qu'il utilise maintenant les valeurs par défaut que nous avons définies dans notre structure. Si nous voulons revenir à la possibilité de modifier les variables, nous pouvons simplement cliquer sur l'onglet Structure ici et accéder à ces variables. Maintenant, une autre chose que vous pouvez faire ici est que si nous le voulions, nous pourrions les réorganiser afin que je puisse récupérer cette petite icône à la fin ici. Nous pouvons changer l' ordre, donc peut-être que je veux que le nom soit troisième maintenant au lieu du haut, nous le faisons et nous pouvons cliquer sur Enregistrer. Retournez à notre personnage et nous allons compiler. Maintenant que nous avons sélectionné notre trait vidéo, vous voyez qu'ils sont dans un ordre différent. Maintenant, ce qui rend les structures vraiment puissantes, c'est que nous pouvons les utiliser dans des tableaux. Donc, si vous vous souvenez dans notre vidéo de tableau de définir une variable comme un tableau, nous pouvons cliquer sur ce petit menu déroulant ici et sélectionner tableau. Maintenant, interrompons quelques-unes de nos connexions car nous ne pouvons pas brancher une baie dans l'un ou l'autre de ces nœuds. Je vais donc simplement les supprimer pour l'instant. Mais si vous vous souvenez, nous pouvons faire glisser une variable de tableau et rechercher une boucle. Nous pouvons sélectionner pour chaque boucle. Grâce à cela, nous pouvons maintenant parcourir en boucle nos entrées dans notre tableau. Je vais donc simplement compiler ici, donc nous avons nos valeurs par défaut. Par exemple, nous pouvons utiliser une structure pour stocker de nombreuses informations sur différents articles, peut-être pour un inventaire, par exemple. Par exemple, si je crée quelques entrées ici, vous pouvez voir que nous avons maintenant plusieurs versions de cette structure stockées dans le tableau. Ensuite, nous pouvons parcourir ces versions de notre structure utilisant le nœud de boucle, puis accéder à leurs informations à l'aide de l'élément tableau. Ensuite, nous pouvons simplement utiliser la vidéo de pause attachée comme ils l'ont été auparavant. Et nous pouvons accéder à ces informations à partir de notre réseau. C'est donc à peu près les bases des structures. Ils sont très utiles pour organiser les choses et stocker de grandes quantités de données. Comme si vous aviez un inventaire plein d'objets. Vous pouvez les utiliser pour stocker de nombreuses informations sur chaque article. Ensuite, nous pouvons les placer dans un rayon ou nous pouvons utiliser des traits simplement pour garder les choses organisées. Vous avez peut-être un ensemble de variables que vous avez toujours utilisées ensemble. Vous pouvez donc les stocker dans une structure et y accéder via une variable. Ensuite, nous allons nous pencher sur les syndicats. Maintenant. Encore une fois, comme la structure, le moteur a en fait de l'indium intégré. Donc, si vous allez au bas de la page, vous pouvez voir la catégorie idiome ici. Et il y en a beaucoup qui sont fournis avec le moteur. Encore une fois, vous ne les utiliserez pas vraiment. Ils sont simplement intégrés au moteur et utilisés par les nœuds du moteur. Mais vous pouvez également créer vos propres enums comme nous l'avons fait avec notre structure. Maintenant, je vais vous montrer comment procéder. Il va donc compiler ce plan directeur pour l'instant. Nous cliquerons avec le bouton droit de la souris et notre navigateur de contenu affichera de nouveau les plans. Et ici, nous allons sélectionner l'énumération. ce que nous appellerons une vidéo. Encore une fois, quel que soit le nom que vous appelez ce plan , il sera appelé dans l'option de type variable. C'est donc quelque chose qu'il faut garder à l'esprit. On peut ouvrir ça. Vous pouvez voir qu'elle ressemble un peu à notre structure en haut, mais il y a quelques différences ici, donc nous n' avons pas de valeurs par défaut pour commencer. Cliquez sur Ajouter au numérateur. Vous voyez que cela nous donne un nouveau point de vue ici. Maintenant, nous pouvons tous définir un nom, donc nous pourrions dire la première option. Et nous en ajouterons quelques autres juste pour que nous puissions les voir dans l'éditeur. Nous allons donc appeler cette option deux, et nous allons l'enregistrer. Il n'y a pas grand-chose de plus que vous puissiez faire ici. Nous allons donc revenir à notre ThirdPersonCharacter. Et je vais créer une nouvelle variable. ce que nous appellerons une vidéo. Dedans. Je vais modifier le type de variable ici. Je vais juste le changer en un seul. Et nous allons cliquer sur le menu déroulant et nous allons rechercher notre vidéo en vous. Juste comme ça. Et nous allons compiler. Vous pouvez maintenant voir dans la valeur par défaut ici que nous avons ce menu déroulant. Tu vois ça ? Parce que j'ai l'option un et l'option deux que j'ai mises en place dans mon union vidéo, ce sont les options que j' ai pour ma valeur par défaut. Maintenant, les énumérations fonctionnent de la même manière que plupart des variables que nous pouvons obtenir et définir. Donc, si je fais glisser et que je fais un nœud get, vous pouvez voir que nous pouvons simplement l'obtenir comme une variable normale. Et nous pouvons également le définir. Donc, si je fais glisser et que je définis, vous pouvez voir que j'ai un nœud d'ensemble, mais nous pouvons simplement définir manuellement l'option que nous voulons associer en utilisant le nœud set également, ou nous pouvons prendre une entrée si nous le voulons. Maintenant, les énumérations sont vraiment utiles contrôler le code en cours d'exécution dans votre projet. Et la façon dont ils peuvent le faire est que si nous sortons de notre nœud get, nous pouvons faire un switch. Vous verrez activer la vidéo. Encore une fois. Si vous êtes chez les humains appelé quelque chose de différent, cela dirait allumer et puis cela énumère le nom. Mais le nôtre est video indium. Nous allons donc créer cela. Vous pouvez voir qu'il a créé un nœud de commutateur pour nous et pour chaque paramètre que nous avons à l'intérieur de notre indium, il nous donnera une broche de sortie. Donc, si nous revenons à notre vidéo en num ici, j'ai ajouté quelques options supplémentaires, donc nous en ajouterons quelques autres. Je vais simplement régler ceci pour dire test 123 et test 456. Nous sauvegardons ça. Maintenant, quand nous reviendrons à notre ThirdPersonCharacter, vous voudrez probablement compiler juste pour vous assurer que les options Mettre à jour sont visibles. Maintenant, nous avons nos deux options d'origine et quelques options supplémentaires ont été ajoutées. Et en utilisant cela, nous pouvons contrôler quel code va être exécuté en fonction de ce que nos énumérations sont définies. Un bon exemple de la façon dont cela peut être utilisé car vous avez peut-être des objets dans votre jeu et différents objets font des choses différentes lorsqu'ils sont utilisés. Peut-être que vous aviez des consommables, des médicaments, des choses comme ça. Vous pouvez avoir une option pour chacun de ces différents types d' articles, puis exécuter un code différent en fonction du type d' élément dont il s'agit. Maintenant, nous pouvons également utiliser une note de sélection. Donc, si nous faisons glisser vers l'extérieur, nous recherchons select. Nous pouvons sélectionner une variable en fonction de la valeur de nos enums. Pour le moment, il est simplement grisé parce que nous n'avons saisi aucun type de variable. Mais si je devais créer une nouvelle variable et que nous appellerons cette variable float, je vais juste la définir sur un float. Si nous branchons ce flotteur maintenant dans la note de sélection, vous pouvez voir qu'ils deviennent tous des flotteurs. Cela peut nous permettre de sélectionner et de sortir cette valeur de retour. Nous pouvons sélectionner l' une de ces entrées en fonction de notre valeur indienne. Ainsi, par exemple, si nous devions le définir sur l'option deux, alors tout ce qui est connecté à l'option deux serait renvoyé via la valeur de retour. Maintenant, nous pouvons également contrôler un nœud de branche à l'aide d'enums. Donc, si je supprime simplement ces nœuds pour l'instant, nous pouvons faire glisser et faire un nœud égal. On peut vérifier. Nous pouvons créer ce nœud égal Ethereum ici. Et nous pouvons vérifier si notre immunité est égale à un si ce sont des options tranchantes ? Et si c'est le cas, nous pouvons générer une valeur vraie , sinon, nous mettrons une valeur fausse. Nous pouvons donc créer un nœud Branch lui et contrôler si cela va tourner vrai ou faux en fonction de la valeur de notre union. Maintenant, nous pouvons également utiliser notre indium dans notre structure, donc nous pouvons le faire maintenant si nous le voulions, nous pourrions revenir à notre structure vidéo ici, ajouter une nouvelle variable, et nous appellerons cela dire type d'élément. Nous pouvons régler cela pour qu' il soit immunisé contre notre vidéo. Juste comme ça. Gardez ceci et peut-être voulons-nous modifier nos options. Peut-être que c'était de la nourriture, boisson, de la viande et de l'arme. Nous pouvons donc maintenant utiliser cette vidéo indium dans notre structure pour définir l'ID de type d'un élément. Donc, si nous revenons ici et que nous obtenons notre structure vidéo, nous pouvons dire boucle dans notre tableau. Nous pouvons accéder à toutes les valeurs de nos structures afin que je puisse faire glisser, casser notre structure vidéo. Vous pouvez voir que nous avons dépassé un certain nombre de variables. Nous obtenons donc cette petite option déroulante que nous pouvons utiliser. Et vous pouvez réellement organiser cela plus loin. Peut-être que vous n'avez besoin que de la valeur pondérale. Vous pouvez donc aller ici et décocher certaines variables que seule l'option Poids affiche. Maintenant, juste pour garder les choses bien rangées, car vous pouvez avoir une structure avec de nombreuses variables. Vous pouvez donc décocher ceux dont vous n'avez tout simplement pas besoin à ce moment précis. Cela n'affecte en rien votre frappe. Il suffit de ranger le nœud. Mais nous pouvons également accéder à ce type d'élément en lui que nous avons ajouté à notre structure. Donc, si nous sortons, nous pouvons utiliser le nœud égal. Nous pouvons vérifier si cet article, cette entrée particulière est dans notre tableau ? S'agit-il d'un produit alimentaire, par exemple, si c'est le cas, alors peut-être voulons-nous exécuter un morceau de code spécifique. Ou s'il s'agissait d'une arme par exemple, nous pourrions lui faire exécuter un code différent. Comme je l'ai déjà dit, nous pouvons utiliser ce nœud de commutateur. Nous pourrions donc activer la vidéo. Et maintenant, nous pouvons basculer en fonction du type d' élément que cette entrée dans notre tableau se trouve être. C'est tout pour cette leçon. En résumé, les structures sont un très bon moyen de stocker plusieurs types de variables dans une même variable. Ensuite, avec les tableaux, nous pouvons stocker de nombreuses informations auxquelles nous pouvons accéder facilement. énumérations sont un excellent moyen de contrôler le code en cours d'exécution dans vos projets. Ou nous pouvons les utiliser pour sélectionner des variables en fonction des nombres, de la fantaisie. 15. Les bases (événements): Salut tout le monde. Dans cette leçon, nous allons examiner les nœuds d'événements. Nous avons déjà beaucoup utilisé les nœuds d' événement dans nos leçons précédentes. Si vous vous souvenez de la note de jeu de début par exemple, c' est-à-dire qu'un événement ou des événements détruits est également un événement. Ces événements sont appelés à partir du code du moteur. code intégré au moteur exécute ces événements lorsque le jeu démarre ou lorsque les acteurs sont détruits. Désormais, nous pouvons également créer nos propres événements personnalisés que nous pouvons exécuter quand nous le voulons. Pour ce faire, nous pouvons faire un clic droit. Nous pouvons rechercher un événement personnalisé. Et nous pouvons utiliser l'option Ajouter un événement personnalisé ici pour créer un nouveau nœud d'événement. Je vais juste appeler mon exemple d' événement, un événement comme ça. Et vous pouvez voir que maintenant cela ressemble à nos autres événements, mais cet événement ne sera jamais appelé en ce moment parce que nous ne l'avons appelé nulle part. Donc, si je voulais que mon exemple d'évent s'exécute et voit le code auquel je me connecte, comme print string à exécuter, nous aurions besoin d'appeler notre exemple d'événement. Pour ce faire, nous pouvons utiliser un événement existant comme la note de début de plan pour l'appeler. Nous pouvons donc faire glisser et rechercher, par exemple, un événement. Et cela appellerait maintenant notre exemple d'événement lorsque le jeu commence. Nous pouvons désormais appeler des événements à plusieurs endroits de notre code. Par exemple, si nous voulions que cet exemple de code d'événement s' exécute au démarrage du jeu et également lorsque nos personnages sont détruits. Nous pouvons également le faire. Nous pourrions simplement traîner à un autre exemple d'événement. Cool ici. Et maintenant, quand notre jeu commencera, nous appellerons cet événement, j'exécute son code. Et quand cet acteur est détruit, nous appelons l'événement et exécutons ce code. Nous pouvons également ajouter des contributions à nos événements. Donc, si nous sélectionnons notre note d'événement ici, vous pouvez voir qu'il existe une option de saisie. Donc, si je clique sur le bouton Ajouter une entrée ici, nous pouvons voir que vous avez une nouvelle entrée booléenne. Et cela ajoute une sortie à notre nœud d'événement et également des entrées à nos nœuds cool d'événement. Nous pouvons maintenant contrôler une variable à l'aide des nœuds principaux. Par exemple, peut-être voulons-nous que notre booléen soit vrai quand le jeu commence, mais faux quand le jeu détruit court. Ensuite, nous pourrions avoir un code différent, selon que la valeur de sortie était vraie ou fausse. Les événements sont également largement utilisés dans le codage pour le multijoueur. Si nous sélectionnons l'événement ici, vous pouvez voir qu'il possède certains paramètres de réplication. C'est pour le multijoueur. Maintenant, je ne vais pas aborder cela dans cette leçon parce que le multiplicateur est un sujet énorme et vous devez vraiment connaître les bases des plans avant de vous lancer dans le codage multipolaire, une autre chose que vous pouvez faire avec les événements est de les appeler à partir d'autres plans, comme nous pouvons le faire avec nos fonctions. Donc, si je peux récupérer mon plan ici, je vais en créer un nouveau. Je vais juste utiliser un acteur et nous allons le vendre pour déclencher. Et je vais ouvrir ça. Je vais juste ajouter une boîte. Collision ira dans le graphique d'événement et nous allons créer un chevauchement de début. L"acteur d"événement commence le chevauchement Encore une fois. Ce n'est qu'un événement. Vous pouvez voir qu'il indique un événement sur le nœud. Mais cela est appelé quand quelque chose se chevauche est un acteur de déclenchement, cela nous donne une sortie de tout chevauchement d' acteur que le déclencheur Todd fera glisser à partir de cela. Nous utiliserons un nœud Cast to ThirdPersonCharacter. Et si vous vous souvenez de nos leçons précédentes, cette vérification est l' autre acteur qui chevauche notre déclencheur, un personnage à la troisième personne. Si c'est le cas, il nous donne accès à ses variables, fonctions et événements. Donc, si je fais glisser à partir d'ici et que j'ai cherché par exemple, vous pouvez voir que je peux appeler mon exemple d'événement. Nous avons également accès à cette variable que nous avons ajoutée. Et quand un acteur se chevauche, est-ce que c'est un ThirdPersonCharacter ? Et si c'est le cas, nous appellerons cet exemple d'événement sur ce Blueprint ThirdPersonCharacter. Et si nous double-cliquons sur cet événement, il nous mènera à notre plan de personnage. Cela nous amène directement à notre code afin que nous puissions facilement trouver ce que nous exécutons. Nous pouvons également utiliser des événements avec des minuteries. Donc si nous nous déconnectons, je commence la note de lecture ici et je la déplacerai juste ici pour un peu plus d'espace. Si nous sortons de mon jeu Begin Play et que nous recherchons définir un minuteur par événement. Vous pouvez voir qu'ils ont une option appelée régler la minuterie. Et cela nous donne ce nœud. Maintenant, si vous pouvez effectuer un sondage, vous obtiendrez une erreur. Ne vous inquiétez pas pour cela, car aucun événement n'est encore connecté. Il existe donc deux façons de procéder. Nous pouvons faire glisser notre épingle d'événement ici, puis rechercher « personnalisé ». Et nous pouvons ajouter un événement personnalisé comme nous l'avons fait auparavant. Cela nous donne un nouveau nœud d'événement. Ou nous pouvons simplement cliquer avec le bouton droit de la souris et rechercher un événement personnalisé et ajouter un événement personnalisé comme nous le faisions auparavant. Et nous pouvons le connecter à l'entrée de l'événement ici. Maintenant, une chose à garder à l'esprit est que si votre événement possède des entrées, vous ne pourrez pas le connecter à ce nœud. Par exemple, si j'ai ajouté un booléen ici et que nous pouvons l'extraire, vous pouvez voir si je fais glisser le curseur depuis mon évent client ici, je ne peux pas le connecter à l'entrée. Et c'est parce que nous avons une variable d'entrée pour déplacer ceci et compiler à nouveau, je pourrai connecter cette sauvegarde. Maintenant, l' événement timer nous permet d' exécuter un événement en fonction de ses paramètres. Donc, actuellement sur Begin Play, nous voulons que notre minuteur s'exécute, disons, toutes les secondes, afin que nous puissions régler le temps sur un et activer la boucle si nous voulons que cet événement se déroule à chaque deuxième. Nous pourrions donc nous occuper de cela. Si on laissait ça de côté, la pièce de départ ne serait pas jouée. Il fonctionnerait au moment où je les achèterais. Cela attendrait 1 seconde, et notre événement se déroulerait une fois, et puis ce serait fini. Mais si nous avons des ticks en boucle, il l'exécutera toutes les secondes. Maintenant, les minuteurs sont une très bonne alternative à l'utilisation de l'événement tick. Donc, si vous vous souvenez, si nous créons l'événement tick, cela exécutera chaque image pendant laquelle notre jeu est rendu. Et beaucoup de débutants ont tendance à y attacher beaucoup de code simplement parce qu'il fonctionne en continu. Le problème est que plupart du code n'a pas besoin d'être exécuté à chaque image et que vous pouvez très facilement ruiner les performances de votre projet en faisant cela. Une bonne alternative consiste donc à utiliser des minuteries. Supposons que si vous avez besoin de code à exécuter toutes les secondes, vous pouvez le connecter comme ceci, au lieu d'utiliser une technique, par exemple. Nous pouvons maintenant utiliser un gestionnaire de minuterie pour contrôler notre minuterie. Donc, si nous sortons de cette valeur de retour ici, nous pouvons créer une nouvelle variable en utilisant l'option Promotes Variable, et cela créera simplement une nouvelle variable type est le handle du minuteur, et je vais juste appeler ça une minuterie. Cette fois-ci, une variable nous permet de contrôler notre minuterie. Supposons, par exemple, que nous voulions exécuter ce client plusieurs fois puis arrêter le minuteur. ce que nous pouvons faire. Nous pourrions donc ajouter, disons, une nouvelle variable. Je vais juste appeler ce numéro. Je vais le définir sur un entier. Nous allons obtenir notre entier et il va juste vérifier, c' est égal à, disons, cinq à cinq ? Et nous allons faire un nœud F. Donc, s'il n'est pas égal à cinq, nous voulons en ajouter un. On va le faire, on va le faire. Nous allons en ajouter un et ensuite nous allons sexer la valeur numérique est à cinq. Nous voulons arrêter notre chronomètre. Donc, ce que nous pouvons faire, c'est que nous pouvons faire glisser depuis R ou nous pouvons obtenir notre temps une variable ici, faire glisser à partir de celle-ci et rechercher un clip et utiliser le handle de temps clair et invalide que j'achète. Donc maintenant, la façon dont ce code fonctionne est quand le jeu commence ou quand le personnage est apparu. Notre minuterie exécutera notre client, puis toutes les secondes, nous réglerons sa référence de minuterie variable de la poignée de la minuterie. Donc maintenant, lorsque notre événement personnalisé s'exécute, nous vérifions si le nombre est égal à cinq. Si ce n'est pas le cas, nous en ajoutons un et le définissons. Et la prochaine fois que cela se produira, bout d'une seconde, nous vérifierons à nouveau. Et une fois qu'il est à cinq heures, nous ordonnons à ce minuteur de s'arrêter. Maintenant, l'utilisation du nœud clear et invalide le minuteur par nœud géré s'arrêtera complètement cette fois-ci. Vous devrez le relancer pour démarrer. Mais si vous voulez pouvoir reprendre ce minuteur, nous pouvons utiliser un autre nœud. Nous pouvons donc faire glisser et rechercher, disons, pause. Et nous pouvons mettre en pause la poignée du minuteur. Nous pouvons donc l'exécuter à la place. Cela nous permet de dire que nous voulions peut-être reprendre le délai d'attente plus tard. Nous pourrions alors utiliser le nœud de pause qui reprendrait notre minuterie en cours d'exécution. Maintenant, nous pouvons tester cela et jouer. Je vais donc simplement supprimer la pause notée. Et j'ajouterai quelques chaînes d'impression juste nous puissions voir ce qui est en cours d'exécution. Nous allons brancher notre numéro deux, j'imprime une chaîne ici, et j'ajouterai une chaîne d'impression jusqu'à mon temps de pause du code. Et je vais régler ça sur timeout. Donc maintenant, quand nous lançons le jeu, tout devrait fonctionner au début du jeu. Nous pouvons donc vérifier que notre temps passe à chaque seconde. Cela augmente la valeur de notre nombre. Une fois qu'il est cinq heures, le port, le délai d'attente est suspendu. Maintenant, si vous voulez trouver les événements intégrés au moteur, vous pouvez le faire en accédant à notre plan de personnage ThirdPersonCharacter ici, cliquant sur Rechercher un événement. Vous pouvez voir une liste de tous les événements intégrés à notre personnage. Maintenant, comme il s' agit d'un personnage, il possède des événements personnalisés que les autres acteurs n'ont pas. Comme par exemple, le débarqué, il se lancera chaque fois que notre personnage atterrit d'un saut. Vous pouvez également le faire avec des acteurs normaux comme par exemple notre déclencheur. Si je clique avec le bouton droit sur la recherche d'un événement, vous pouvez voir qu'il n'y a pas autant d'événements que le personnage, mais qu'il contient des événements intégrés que vous pouvez utiliser pour exécuter votre code. C'est tout pour notre leçon sur les événements. Nous utiliserons également des événements dans nos prochaines leçons, simplement parce qu'ils font partie intégrante du codage et des plans directeurs. 16. Les bases (héritage du plan d'exécution): Salut tout le monde. Dans cette leçon, nous allons parler un peu de l'héritage de Blueprint. Maintenant, nous en avons déjà parlé un peu plus tôt dans acteurs et les objets varient d'un bout à l'autre de la vidéo. Si vous n'avez pas regardé celui-ci, je vous recommande de le regarder. Mais essentiellement, l'héritage de Blueprint nous permet de créer un Blueprint à partir d'un Blueprint existant qu'il utilise ensuite comme plan parent. Cela signifie que notre nouveau Blueprint, lequel l'enfant hérite de toutes les fonctions, variables et code du Blueprint parent. Je vais donc d'abord mettre en place un exemple ici. Si nous créons simplement un plan, je vais simplement cliquer avec le bouton droit de la souris et sélectionner Classe de plan directeur. Vous pouvez voir que lorsque nous sélectionnons l'une de ces options ici, nous choisissons en fait une classe parente. Maintenant, nous utilisons l'acteur pour la plupart parce que c'est juste l'objet le plus basique qui puisse exister au monde. Nous allons donc sélectionner à nouveau un acteur maintenant. Et ce faisant, nous héritons de notre nouveau plan ici, de toutes les fonctions, variables et capacités d'un acteur. Maintenant, si nous ouvrons notre nouveau plan, je peux vous montrer ce que je veux dire. Si nous l'avons juste dans le PEP supérieur, si nous allons dans notre option variables ici, il semblerait que nous n'ayons que notre route vue par défaut, qui vient avec notre acteur. Director est livré avec un tas d'autres variables. Nous ne pouvons tout simplement pas les voir parce qu'ils sont hérités. De la façon dont nous pouvons activer cela, si nous allons à ce petit rouage ici, nous pouvons cliquer sur Afficher les variables héritées. Et vous voyez que maintenant j'ai une tonne de catégories qui viennent d'apparaître. Maintenant. Ce sont toutes des variables que mon nouveau plan ou hérite parce que c'est un enfant de l'acteur. Toutes ces variables ont été créées dans l'acteur. Nous pouvons maintenant utiliser ces variables comme nous le faisons avec les variables que nous créons nous-mêmes. Donc, si je vais dans le graphique d' événement ici, je peux les faire glisser, je peux les obtenir. Je ne peux pas en définir certains. Ainsi, par exemple, seul le propriétaire est réellement désactivé. Je ne peux pas le définir en utilisant du code, mais d'autres que je peux, par exemple, si nous faisons défiler vers le bas, je peux être endommagé si je le fais glisser et vous pouvez voir que je peux obtenir cette variable tout comme nos variables normales. Et je peux également configurer. Et il en va de même pour les fonctions. Nous en avons parlé un peu dans la leçon sur les fonctions, mais lorsque nous cliquons avec le bouton droit de la souris et que nous recherchons , disons, set to transform, ce nœud de transformation set actor est juste une fonction qui existe dans la classe d'acteur à laquelle nous avons accès parce que notre nouveau plan directeur est un enfant de la classe d'acteur. Maintenant, nous ne pouvons pas aller dans le navigateur de contenu et trouver l'acte de plan parce qu'il n'y figure pas. Il est en fait intégré au moteur et toutes ses variables et fonctions sont toutes codées en C plus plus. Je vais maintenant vous montrer comment nous pouvons mettre en place notre propre système d' héritage, comme nous héritons de l'acteur. Nous pourrions avoir notre nouveau plan, y avoir du code, des fonctions, des variables. Ensuite, nous pourrions avoir un autre nouveau plan hérité de notre nouveau plan et avoir accès à ces variables et fonctions. Nous allons donc accéder au navigateur de contenu ici, et je vais simplement renommer mon plan. Je vais juste l' appeler le maître, vais l'appeler BP Underscore Master. Maintenant, pour créer un plan enfant , vous pouvez procéder de différentes manières. Nous pouvons simplement cliquer avec le bouton droit de la souris sur notre plan principal BP. Vous pouvez voir qu' il existe une option appelée Create Child Blueprint class. Si nous cliquons dessus, vous pouvez voir qu'il nous a créé un nouveau plan. Il lui donne le nom de BP master underscore child, et c'est maintenant un plan enfant de notre maître. Si nous l'ouvrons, vous verrez qu' au lieu que la classe parent soit l'acteur comme c'est dans le plan principal ou l'enfant principal est la classe parent est BP master. Maintenant, je vais juste aller dans le navigateur de contenu et renommer en enfant juste pour que nous ne nous confondions pas ici comme ça. Maintenant, vous pouvez également créer des plans enfants en utilisant l'option Créer un plan. Donc si nous allons au cours Blueprint, vous pouvez voir en bas qu'il y a toutes les classes. Et si nous recherchons BP Underscore Master, vous verrez que nous le trouvons réellement. C'est un peu difficile à voir parce que c'est surligné ici. Mais c'est écrit BP Master. Si nous cliquons dessus, nous pouvons cliquer sur Sélectionner. Et cela fera également de nous un enfant du masque. Vous pouvez donc voir qu'un nouveau plan a été créé. Si je l'ouvre, vous verrez que la classe mère est également maître BP. Je vais maintenant revenir à mon navigateur de contenu et supprimer ce nouveau plan, car nous avons déjà un enfant avec qui nous pouvons travailler. Donc maintenant, si nous revenons à notre maître bp et que je vais simplement supprimer ces nœuds pour l'instant. Je vais masquer les variables héritées de show. revenons maintenant à notre vue par défaut. Je vais créer n'importe quelle variable et je vais simplement appeler cela, disons que variable d' exemple créera également une nouvelle fonction. Je vais appeler cette fonction d'exemple. Maintenant, cette variable et fonction sont uniques à notre maître bp. Ainsi, d'autres enfants de l' accès, disons par exemple , notre personnage, qui est également un enfant de l'acteur. Il n'aura pas accès à ces variables parce que notre personnage n'est pas un enfant de notre maître bp, mais notre enfant, je suis désolé. Bp Child Blueprint est un enfant du maître BP. Donc, si nous allons dans le ou si nous revenons à notre master ici et que nous compilons la plupart, sauvez-le également. Ensuite, nous retournons à notre enfant BP. Nous allons dans Event Graph. Nous pouvons activer cela, afficher les variables héritées. OK, donc dans le menu déroulant, vous voyez que nous avons toutes les variables actives parce que même si le maître BP est notre parent, le parent du maître BP est l'acteur. Ainsi, notre enfant a toujours toutes les choses que font les acteurs, toutes ses variables sont d'autres fonctions. Mais ensuite, nous ajoutons ce que nos parents ont reçu également. Vous pouvez donc voir nos exemples de variables que nous pouvons utiliser comme si nous les avions créées. Nous pouvons très bien le régler dans la tension artérielle de notre enfant. Nous pouvons également utiliser la fonction que nous avons créée dans le master. Donc, si je clique avec le bouton droit de la souris et que je cherche une fonction d'exemple, vous pouvez voir que je peux créer la fonction d'exemple et que tout code que nous avions dans notre fonction ici fonctionnerait comme si nous l'avions appelé dans notre plan principal Event Graph car nous pouvons y accéder dans notre plan directeur. Et si vous vous souvenez de notre vidéo sur les fonctions, nous pouvons remplacer les fonctions de nos plans parents. Donc, si nous allons remplacer dans l'onglet Fonctions ici, vous pouvez voir que nous avons toutes ces fonctions que nous pouvons remplacer depuis notre acteur. Mais nous avons aussi le maître BP. Et vous pouvez voir que nous avons notre exemple de fonction ici. Si je clique dessus, nous pouvons prendre le contrôle et changer le code qui sera exécuté chaque fois que notre fonction d'exemple s'exécute, nous avons également cette note supplémentaire ici, et cela rend le code qui se trouve dans l'exécution du Blueprint parent. Ensuite, nous pourrions avoir du code supplémentaire si nous le voulions. Nous pouvons également simplement supprimer ce nœud et exécuter complètement notre propre code personnalisé pour chaque fois que l' exemple fonctionne en tant que RAM. Maintenant, le code qui est exécuté dans le plan principal sera également exécuté pour notre Blueprint enfant. Il vous donne donc un exemple. Je vais aller dans Event Graph et je vais simplement supprimer ces nœuds. Je vais également supprimer ceux-ci. Ils viennent juste avec de nouveaux acteurs qui sont créés. Vous pouvez donc voir que notre enfant n'a plus de code dedans. Nous pouvons supprimer cela, remplacer certains en allant simplement sélectionner fonction d' exemple ici, supprimer cela. Cela ne supprime pas réellement la fonction. Si vous voyez, je peux toujours accéder à la fonction qui supprime simplement le remplacement de celui-ci. Donc tout code personnalisé que nous aurions pu ajouter au remplacement maintenant disparu et nous utiliserons simplement tout ce que notre plan directeur contient dans cette fonction. Donc, si je supprime cela, vous pouvez voir que nous n'avons aucun code chez notre enfant. Bp compilera et sauvegardera cela. Maintenant, si je vais voir mon maître BP et que je vais créer une note de début de jeu. Et je vais ajouter une chaîne d'impression à cela. Donc, juste quelque chose de simple qui nous laisse bonjour. Donc maintenant, le seul code que nous avons dans ces deux plans est le début de ces deux plans est la lecture , puis une chaîne d'impression. Maintenant, si je vais sur la carte à la troisième personne et que je fais glisser mon enfant BP, je vais juste le placer là-dedans. Souvenez-vous que notre enfant n'a aucun code dedans. Mais quand j'appuie sur Play, vous verrez qu'il affiche hello, même s'il n'y a pas de code. C'est parce que l'enfant continuera d'exécuter le code qui existe dans le parent. Alors nos parents ont dit de commencer à jouer à la ficelle d'impression. Alors je vais faire de même, mon enfant. Maintenant, comme pour nos fonctions, nous pouvons également remplacer les événements. Donc chez mon enfant maintenant, si je crée un nouveau début de jeu de m, je ne me connecterai à rien de ce genre. Je voudrais simplement laisser ça comme ça. Je vais compiler. Et maintenant, quand je clique sur play et vois qu'aucune chaîne d'impression ne se produit. Et c'est parce que nous disons au moteur que notre enfant remplace le nœud de début de jeu de ses parents. Cela ne fonctionnera donc plus pour notre enfant. Nous allons exécuter notre propre code personnalisé afin pouvoir ajouter une autre chaîne d'impression et nous pourrions dire ceci, ceci, c'est un test. Et maintenant, ce sera exécuté au lieu de le faire. Donc, si nous appuyons sur Play, vous voyez qu'il s'agit d'un test. Et encore une fois, si je supprime cela, commence à jouer avec mon enfant, vous verrez qu'il recommencera à imprimer le bonjour. Maintenant, vous vous demandez peut-être quel est l'intérêt de l' héritage de Blueprint. Pourquoi ne pas avoir tout ce code et chacun des plans ? Eh bien, la raison principale est que c' plus difficile à maintenir si vous aviez tout ce code et disons 20 plans différents et il y avait un bogue avec ce code. Il faudrait passer en revue et changer 20 plans. Ou encore, si vous voulez ajouter une nouvelle fonctionnalité, vous devrez parcourir ces 20 plans et modifier le code. Désormais, avec l'héritage de Blueprint, vous pouvez avoir un Blueprint maître contenant tout le code dont vous avez besoin. Et puis les plans enfants qui héritent de ce code. Et si peut-être l'un des plans enfants devait faire quelque chose de spécial, mais que la plupart du code devait toujours être le même. Tu pourrais aller voir ce plan enfant. Vous pouvez remplacer, par exemple, une fonction ou un événement et faire exécuter du code personnalisé uniquement dans cet enfant sans affecter tous les autres enfants ni affecter le Blueprint principal. armes en sont un bon exemple. Si vous aviez 20 armes différentes dans votre jeu, vous ne voudriez pas avoir tout le code pour tirer, viser recharger dans chaque plan d'arme, car si vous vouliez modifier ce code ou pour corriger un bogue ou ajouter une fonctionnalité, vous devrez parcourir 20 ou 30 plans faisant la même chose encore et encore. Alors que si vous n' aviez qu' un plan directeur avec tous vos fers de visée , rechargez le code. Toutes les armes sont des enfants de ce plan directeur. Vous pouvez tout modifier en un seul endroit et cela affectera tous les plans enfants. Désormais, l'héritage couvre également les composants des plans directeurs principaux. Donc, si nous ajoutons un nouveau composant à notre plan directeur ici, je vais simplement utiliser un composant de maillage statique. Vous verrez que nous avons un composant de maillage statique. Nous pouvons maintenant définir un maillage. Je vais définir le mien sur un cube par exemple. Et je vais simplement définir un cube et compiler. Nous avons maintenant un cube dans notre plan directeur. Nous allons au Child Blueprint. Vous pouvez voir que nous avons également un cube dans la fenêtre d'affichage. Désormais, vous pouvez également trouver le maillage d'état dans le panneau Composants. Si nous sélectionnons cette option, nous pouvons réellement changer notre cube écrasé. Je peux donc le remplacer par un peigne. Donc, si je recherche un cône, je peux le définir sur un cône. Maintenant, notre enfant a un maillage empilable différent de notre plan directeur. Nous pourrions faire de même avec plusieurs plans enfants de notre plus grand modèle. Supposons que vous possédiez des armes Meli , par exemple, et que vous ajoutiez une arme de mêlée maître avec tout le code. Et vous pourriez alors en avoir des plans enfants, par exemple, un couteau et une lance et ainsi de suite. Et vous pouvez modifier le maillage de la pile pour chacun d' entre eux et conserver le code du plan principal. Ce sera tout pour cette leçon. J'espère que vous avez une meilleure compréhension de l'héritage dans le moteur et de son utilité réelle. 17. Les bases (Casting): Bonjour à tous, Dans cette leçon, nous allons examiner le nœud de coût. Donc, avant de commencer, je vous recommande vivement si vous n'avez pas déjà regardé la leçon sur les variables acteurs et objets. Et aussi notre leçon précédente sur l' héritage de Blueprint en tant que type de casting se connecte avec ces deux systèmes. Pour commencer, nous allons simplement créer un nouveau plan comme nous l'avons fait auparavant. Juste Blueprint Class, on le vendra à un acteur. Et je vais juste appeler ce déclencheur, qui va mettre en place une boîte de base que notre personnage peut chevaucher. Et nous utiliserons ces événements de superposition pour exécuter des notes de casting. Nous allons donc ouvrir notre gâchette. Et je vais juste ajouter un nouveau composant, sera un composant de collision de boîtes. Je vais juste le déplacer vers le haut pour que quand il est dans le monde , il soit possible de le chevaucher. Et je suis également avec notre box sélectionné. Je vais chercher caché. Et je vais décocher la fin de partie cachée ici, juste pour que nous puissions voir notre boîte pendant que nous jouons dans le jeu. Ensuite, dans le graphe d'événements, je vais simplement supprimer ces nœuds bouton droit de la souris et en recherchant le début du chevauchement. Je vais utiliser l' événement pour commencer à se chevaucher. Et si vous ne vous souvenez pas de nos leçons précédentes, ce nœud s'exécutera chaque fois qu'un acteur chevauchera notre acteur. chevauchements sont donc déclenchés. Cela fonctionnera et nous donnera une référence à n'importe quel acteur sur le lactose. La sortie de notre nœud de début de superposition est donc un acte de référence. Et si vous vous en souvenez, nous pouvons l'utiliser pour accéder à l'une de nos fonctions d' acteur, à nos variables ou à nos événements. Mais peut-être voulons-nous accéder aux informations qui se trouvaient dans notre personnage quand elles se chevauchent. Pour ce faire, nous pouvons utiliser le coût. Donc si je m'éloigne de mon autre acteur ici et que je recherche le coût à la troisième personne. Vous pouvez voir que nous pouvons provoquer le caractère BP ThirdPersonCharacter. Je vais donc cliquer dessus et cela nous créera une nouvelle voiture enneigée. Et essentiellement, la neige d'une voiture prend un objet et vérifie si c' est l'objet que nous essayons de déguiser ? Donc, en prenant notre référence d'acteur, qui pourrait être n'importe quoi qui existe dans le monde, ce nœud de coût vérifiera s'il s' agit d'un personnage à la troisième personne ? Si c'est le cas, notre broche d'exécution de sortie supérieure s'exécutera. Et nous pouvons exécuter du code ou le coût a échoué, et nous pouvons également exécuter un code différent. Cela nous donne également accès à un type de variable de caractère à la troisième personne. Désormais, cela ne sera valide que si le Cast réussit. Et ce que je veux dire par valide, c'est que nous ne pouvons obtenir des informations via cette variable que si le Cast réussit. Donc, si par exemple, vous aviez un véhicule lorsque le niveau qui a dépassé notre déclencheur, s'il ne s'agissait pas d'un personnage à la troisième personne le coût a échoué. Et si nous essayons d'obtenir informations à partir de notre sortie variable ici, en utilisant du code exécuté à partir de cost failed, nous obtiendrons des erreurs parce que le coût a échoué. Nous ne pouvons donc pas récupérer d'informations à partir de cette sortie ThirdPersonCharacter. Ainsi, un exemple de la façon dont nous pouvons accéder aux informations de notre caractère à la troisième personne l'aide de cette sortie variable à l'aide de cette sortie variable est notre ThirdPersonCharacter. Je vais juste créer une nouvelle histoire qui était un accident, une nouvelle variable. ce que nous appellerons la santé actuelle. Et nous allons le définir sur un entier. Je vais simplement supprimer cette nouvelle macro. Et nous allons enregistrer cela maintenant et revenir à notre plan de déclenchement. Et si nous traînons, nous pouvons maintenant rechercher la santé actuelle. Vous pouvez voir que nous pouvons désormais accéder à notre variable d'intégrité actuelle via la broche de sortie de notre nœud de coût. Et si nous ajoutons, disons, une chaîne d'impression telle que dans une chaîne d'impression ici. Et remarquez que je le connecte au PIM supérieur parce que nous voulons uniquement que cette chaîne d'impression s'exécute. Si nos coûts réussissent, nous sortirons de l'état actuel et connecterons simplement à notre chaîne d'impression ici. Et je vais revenir à mon personnage de troisième personne, sélectionner mon état de santé actuel. Je vais juste régler la santé actuelle à 50. Donc maintenant, quand nous jouons et que je passe sur mon déclencheur, il affichera la valeur de notre santé. Alors appuyez sur Play. Nous passons en revue mon déclencheur et vous pouvez voir qu'il affiche la valeur 50. Maintenant, si vous vous souvenez de nos leçons précédentes sur les événements et les fonctions, nous pouvons également les appeler à l'aide de notre nœud de coût. Donc, si nous quittons l'éditeur d'avion, revenons à notre personnage. Je vais juste créer une nouvelle fonction ou refroidir cet exemple de fonction. Et nous ajouterons quelque chose comme la selle, la ficelle d'impression et les cheveux parce que c'est facile à voir et une fonction d'exemple de jeu. Il s'agit donc d'une fonction dans notre plan ThirdPersonCharacter, que nous pouvons appeler à partir de notre déclencheur. Donc je vais juste compiler, revenir à mon déclencheur ici, vais supprimer ce code pour l'instant. Nous allons faire glisser le curseur depuis l'épingle ThirdPersonCharacter ici et rechercher, par exemple, function. Vous voyez que nous pouvons maintenant accéder à notre fonction même si elle est dans ThirdPersonCharacter. Et quand nous avons appuyé sur Play, nous avons dépassé notre gâchette. Vous verrez que le code qu'il contient est en fait exécuté comme si cette fonction était exécutée dans ThirdPersonCharacter. La même chose peut également être faite avec les événements. Donc, si nous revenons à notre ThirdPersonCharacter, allons dans le graphique d'événements et créons un nouveau client. Ensuite, je vais zoomer ici et appeler cet exemple. Et nous allons simplement ajouter une autre chaîne d'impression ici. Et nous allons mettre la chaîne deux exemple d'événement. Maintenant, revenons à notre déclencheur. Nous pouvons supprimer la fonction d'exemple, faire glisser vers l'extérieur et effectuer une recherche, par exemple. Vous voyez que je peux maintenant accéder à cet exemple. Ensuite, lorsque nous appuyons sur play, que nous passons sur notre déclencheur, vous verrez qu' il est en train d'imprimer la chaîne d'impression d' événement d'exemple. Maintenant, je voudrais également vous donner un exemple d'échec d'un casting. Pour ce faire, nous allons quitter le jeu. Et je vais juste créer une nouvelle classe de plan, qui l'enverra à l'acteur. Et je vais juste l' appeler exemple de soulignement EP. Et nous allons l'ouvrir et le compiler et l'enregistrer. Je vais le faire glisser. C'est donc dans l'onglet supérieur ici avec le reste de nos plans. Et je vais créer une nouvelle variable. Et je vais juste appeler ça Test. Et nous allons compiler. Suivant. Nous allons accéder à notre déclencheur ici, et nous allons supprimer ces notes. Le coût du personnage à la troisième personne que nous retirons de notre autre sortie d'acteur et coûtera à notre exemple de plan bp. Et nous allons faire glisser la variable d'exemple BP. Et nous passons des tests. Je vais juste lancer une chaîne d'impression. Et nous allons imprimer une chaîne, que cette valeur soit vraie ou non. Donc maintenant, lorsque nous compilons et que nous parcourons notre boîte, vous verrez que rien ne se passe. Et la raison en est que notre personnage est ce qui chevauche notre boîte et ce n'est pas un exemple de BP. Notre coût est donc défaillant. Si nous devons quitter maintenant, revenez à notre déclencheur et ajoutez une nouvelle chaîne d'impression au coût échoué. Vous verrez que la chaîne d'impression s'imprime. Donc si nous le passons en revue maintenant, vous pouvez voir qu' il est en train d'imprimer Bonjour, et c'est parce que le cartilage est défaillant. L'objet d'entrée de notre nœud de coût n'est pas un exemple de BP. Le coût a donc échoué. Maintenant, si je devais essayer d' obtenir des informations de notre poil d'épingle variable pb quand le plâtre échoue. Nous obtenons donc une erreur et je vais vous montrer à quoi cela ressemble si nous essayons d'accéder à notre variable de test ici, lorsque le coût échoue, nous compilons et nous allons parcourir la boîte. Et gay, vous pouvez voir que le nœud de chaîne d'impression est toujours en cours d'exécution et qu'il exécute false parce que c'est juste la valeur par défaut pour les variables. Mais si nous quittons maintenant, vous pouvez voir que je reçois une erreur. Et essentiellement, cela nous indique simplement que notre coût a échoué. Nous essayons toujours d'accéder aux informations qu'il contient même s'il a échoué. Nous savons donc que nous accédons à notre variable d' exemple bp ici, mais le coût échoue. C'est donc quelque chose à garder à l'esprit lorsque vous travaillez avec des notes de coûts. Je vais juste revenir à notre ThirdPersonCharacter afin que nous puissions faire encore quelques choses. Donc, le coût à la troisième personne, et nous allons le connecter comme ça et nous allons compiler. Maintenant, nous pouvons vouloir stocker une référence à l'acte qui chevauche le déclencheur pour l' utiliser plus tard avec du code. Il y a donc plusieurs façons de procéder. Nous pourrions nous éloigner de notre autre acteur et promouvoir une variable. Cela nous créera une nouvelle variable. Et je vais juste le laisser appelé autre acteur et c'est réglé sur un numéro à taper parce que c'est le type de broche que c'est. On pourrait régler ça ici. Et plus tard, peut-être que nous avons eu un autre code que nous exécutions. Plus tard, nous pourrions alors accéder à notre ThirdPersonCharacter en récupérant simplement notre autre variable acteur, en faisant glisser le coût à la troisième personne, encore une fois, pour coûter le personnage à la troisième personne. Et encore une fois, nous pouvions accéder à ces variables et fonctions et aux éléments dont nous avions besoin. Mais nous pouvons aussi simplement stocker la référence à notre troisième personne au lieu de l'acteur. Et la raison en est que nous ne voulons pas vraiment appliquer notre plan directeur chaque fois que nous avons besoin d'informations. C'est bien une ou deux fois, mais ils peuvent commencer à s'additionner et affecter les performances. Ce que nous pourrions faire à la place, c'est nous débarrasser de notre autre variable acteur ici. Parce que je veux que mon code ne l'exécute que s'il s'agit d'un caractère à la troisième personne de toute façon. n'y a donc aucune raison réelle de stocker la référence réelle. Nous pouvons simplement stocker la référence du personnage. Pour ce faire, nous pouvons supprimer notre variable précédente. Je vais juste faire glisser de mon ThirdPersonCharacter, faire des promotions variables. Et nous allons le laisser appelé ThirdPersonCharacter et nous verrons qu'il est également défini sur le type de variable caractère de troisième personne BP. Nous allons donc simplement l'enregistrer et le compiler. Nous pouvons maintenant accéder à toutes les variables et fonctions utilisant cette variable. Désormais, nous n'avons plus à payer de frais supplémentaires pour accéder à ces informations. Je pourrais donc faire glisser et obtenir mon état de santé actuel, par exemple, ou accéder à ces fonctions ou événements d' exemple. Maintenant, jusqu'à présent, nous avons juste coûté directement au plan de personnage ThirdPersonCharacter parce que c'est ce qu'est notre personnage. Mais comme notre plan de personnage, il existe également un enfant des types de caractères, sorte que sa classe parente a caractère. Nous pourrions également coûter cher au personnage. Donc, si je supprime ces notes ici pour l'instant, nous allons faire glisser notre acteur global et coût pour le personnage. Utilisera une note de caractère de coût. Et je vais juste ajouter une autre chaîne d'impression ici au stylo supérieur. Et ce sera le cas si nos coûts sont couronnés de succès, donc j'en ai fini. Donc je vais imprimer l'écran dm fonctionnera si notre coût réussit, et échouera, fonctionnera si nos voitures tombent en panne, et si nous renversons notre boîte maintenant dans le monde a du caractère. Vous pouvez voir que Don court parce que notre personnage ou notre ThirdPersonCharacter est également un personnage et ses murs et notre personnage sont également importants. Nous pourrions donc revenir à notre déclencheur et le remplacer par un coût de ****. Et comme avant, je vais connecter le succès jusqu'à W1 et l'échec jusqu'à la chaîne d'impression de fichier. Et vous verrez quand nous retrouverons la boîte, qu'elle réussit toujours, parce que notre personnage est un enfant du dieu. Maintenant, si nous revenons à notre déclencheur et que nous essayons d'accéder, disons, à notre variable de santé à partir du coût **** ici. Donc si je traîne et que je ne l'ai pas obtenu. Santé actuelle, vous pouvez voir que nous ne pouvons pas accéder à cette variable parce que cette variable n' existe pas dans la classe ****. Il n'existe que dans notre personnage à la troisième personne. Nous ne pouvons donc pas accéder à tout cela, aucune des fonctions, événements ou variables que nous y avons créés via le ****. Et il en va de même pour nos coûts de personnage. Donc, si je fais glisser et que je dépense à nouveau le caractère, encore une fois, nous ne pourrons accéder qu'aux variables, aux fonctions et aux événements. Ils existent dans la classe character, pas dans tout ce qui existe dans notre ThirdPersonCharacter. Et cela est utile parce que vous aviez peut-être cinq personnages différents dans votre jeu et qu'ils avaient tous leurs propres plans individuels. Vous vouliez juste que votre déclencheur vérifie si le personnage me chevauche, au lieu d'avoir un coût pour chaque plan de personnage possible qui se chevauche, vous pouvez simplement faire un nœud de coût, Disons que c'est un personnage ou est-ce que le plan qui nous chevauche ? Est-ce qu'il hérite d'un personnage ? Si c'est le cas, alors super, nous pouvons réussir. Nous pouvons définir une variable, et si nous en avons besoin plus tard, nous pouvons même utiliser cette sortie. Nous pouvons le définir sur une variable de type caractère. Et puis plus tard dans notre code, si nécessaire, nous pourrions ensuite lancer un blueprint plus spécifique afin que nous puissions faire en sorte que ThirdPersonCharacter et nous puissions accéder à toutes ses informations comme nous C'était déjà fait. Nous pouvons donc être à jour et nous pouvons le connecter à notre chaîne d'impression. Donc maintenant, lorsque nous superposons une case, il va vérifier si l' objet est un personnage ? Si c'est le cas, nous le définirons comme une variable. Ensuite, nous vérifierons le personnage que nous avons superposé. Est-ce un personnage de troisième personne ? Et si c'est génial, alors nous imprimerons la chaîne à son état actuel. Ainsi, lorsque nous superposons la boîte, vous vous attendez à ce que leur état de santé actuel s'imprime. Le casting nous permet donc de coûter ou de faire en sorte que les Blueprints enfants coûtent à leur parent et le coût continuera de réussir. Je peux donc vous en donner un exemple. Nous pouvons cliquer avec le bouton droit sur notre ThirdPersonCharacter et créer une classe de Blueprint enfant. Je vais juste appeler cette troisième personne, en fait, garder ce nom. Je vais ouvrir cette émission Blueprint Class up. Je vais sélectionner le maillage du personnage et je vais juste le changer pour dire, l'argent est simple ici. Nous pouvons donc faire la différence entre les deux caractères différents ou compiler. Nous pouvons également modifier la valeur actuelle de la santé. Donc, si je recherche le courant, changera la valeur de santé actuelle à 25. Et nous allons entrer dans notre niveau ici, et je vais aller aux fenêtres. Et nous voulons les paramètres du monde. Et cela me permettra simplement de changer le personnage que nous utilisons dans le jeu. Je vais donc simplement le changer de ThirdPersonCharacter à ThirdPersonCharacter child. C'est maintenant que nous appuyons sur Lecture, vous pouvez voir que nous utilisons maintenant le personnage enfant au lieu du personnage d'origine. Et si je passe en revue cette case, vous pouvez voir que l'intégrité est toujours imprimée même si nous n'utilisons pas ThirdPersonCharacter. Et c'est parce que notre enfant ThirdPersonCharacter est un enfant du ThirdPersonCharacter. Donc, dans notre déclencheur, quand il arrive à notre coût ThirdPersonCharacter, il réussira parce que notre enfant ThirdPersonCharacter est toujours un ThirdPersonCharacter est juste un enfant de cela. Personnage à la troisième personne. Tous ses coûts seront donc toujours couronnés de succès. Et si nous le voulions, nous pourrions même ajouter code et des variables personnalisés à notre Child Blueprint. Ensuite, nous avons voulu y accéder. Il faudrait alors lancer. Ou nous pourrions coûter à notre autre acteur ici, nous pourrions coûter au plan enfant pour accéder à ces variables. Par exemple, si je vais voir mon enfant à la troisième personne ici, j'ajouterai une nouvelle variable, une variable, pas une macro. Et nous allons le régler sur, le régler sur un flotteur, et nous appellerons cela des dégâts. Maintenant, quand nous compilons et que nous revenons à notre déclencheur, si je déconnecte ce code pour l'instant, si je fais glisser mon autre acteur et que je fais Cast to ThirdPersonCharacter. Nous avons notre note originale ThirdPersonCharacter ici. Si je fais glisser et que j'essaie d'obtenir ce rallye de dégâts, vous pouvez voir que je ne peux pas y accéder car cette variable n'existe pas dans le ThirdPersonCharacter, n'existe que dans l'enfant ThirdPersonCharacter. Donc, si nous avons eu besoin d'accéder à cette variable, nous devrons payer le coût de notre enfant ThirdPersonCharacter. Cela coûtera donc à ThirdPersonCharacter enfant. Et à partir de là, nous pouvons endommager la vallée comme ça. Nous pouvons également accéder à cette valeur de santé actuelle parce que notre enfant a hérité de cette valeur du modèle de personnage à la troisième personne. Maintenant, une autre caractéristique des coûts. Remarquez que nous pouvons les changer pour qu'ils soient purs. Donc, si vous vous souvenez de notre leçon sur les fonctions, nous avons des fonctions impures et pures. Et essentiellement si une fonction pure est exécutée, alors c'est, désolé, une fonction impure. Il s'agit d'une fonction impure. Le calcul ne sera effectué que lorsqu'il sera exécuté, puis il stocke ce type de référence dans le stylo afin que nous puissions y accéder plusieurs fois, et ce nœud ne s'exécutera qu'une seule fois lorsque nous exécuterons réellement ça. Maintenant, si je déconnecte ce nœud d'ici et que je clique avec le bouton droit de la souris, je le convertis en coût pur. Et vous voyez qu'il devient un nœud qui n'a pas broches d'exécution, de plug-in ou d'autre acteur ici. Donc maintenant, chaque fois que des informations seront passées par ce coût, ce coût sera à nouveau exécuté. Si je devais imprimer la chaîne, nous imprimons la chaîne de la santé actuelle, et nous imprimons les dommages actuels. Ce nœud de coût s' exécuterait en fait deux fois pour chaque broche de sortie qui lui est connectée. Alors que si nous reconvertissons cela en un coût impur, comme ça. Désormais, notre note de coûts ne sera exécutée qu'une seule fois. Il s'exécutera une fois lorsque nous l' exécuterons via les broches d'exécution. Ensuite, il stocke cette référence à notre enfant ThirdPersonCharacter dans ce stylo. Et même si nous utilisons deux fois une chaîne d'impression, ce nœud de coût ne s'exécutera qu'une seule fois. C'est donc la différence entre les coûts purs et impurs. La plupart du temps, vous utiliserez NPR simplement parce qu'ils sont un peu plus optimaux. Et vous ne voulez pas vraiment qu'un coût soit facturé pour chaque stylo que vous y êtes connecté. N'oubliez pas que vous pouvez toujours simplement promouvoir votre broche de sortie en variable. Cela signifie qu'il ne sera exécuté qu'une seule fois. Ensuite, vous pouvez accéder à ces variables de blueprints à l'avenir sans avoir à payer de frais. C'est donc tout pour notre leçon de casting. Nous utiliserons les causes un peu plus dans les leçons à venir simplement parce qu'il y a une partie assez intéressante du codage et du moteur. Dans notre prochaine leçon, nous allons examiner les répartiteurs d'événements. 18. Les bases (organisateurs d'événements): Salut tout le monde, Dans cette leçon, nous allons examiner les répartiteurs d'événements. Donc, si vous suiviez notre dernière leçon, j'avais quelques plans supplémentaires et je changeais certaines choses dans les paramètres. Tout ce que j'ai fait pour cette leçon est créer un nouveau modèle de troisième personne. Nous avons donc pris un nouveau départ pour cette leçon. Donc, pour commencer, Event Dispatcher permet de refroidir le code sur Blueprints sans avoir à connaître le Blueprint spécifique sur lequel nous appelons l'événement. Je vais mettre en place un exemple ici afin que nous puissions l'essayer. Je vais donc commencer par créer une classe de plan. Je vais régler ça sur un acteur et je vais appeler ça un déclencheur. Et nous allons également créer une autre classe Blueprint, et je vais simplement l'appeler ainsi. Nous allons donc ouvrir notre gâchette. Et comme nous l'avons fait auparavant, je vais simplement ajouter un composant de boîte de collision et nous allons compiler. Ensuite, je vais déplacer un peu ma boîte de collision vers le haut afin que nous puissions la parcourir et le jeu. Et je vais chercher caché et décocher caché dans le jeu. Ensuite, nous allons accéder au graphique d'événements. Et je vais juste supprimer ces nœuds, cliquer avec le bouton droit de la souris et rechercher l'événement commence à se chevaucher. Comme avant. Cet événement s'exécute lorsque quelque chose se chevauche. Je vais donc déclencher et cela nous donne accès à l'acteur qui nous a chevauchés. Maintenant, nous allons accéder à notre cube que nous venons de créer. Ouvrez donc le plan de file d'attente. Et ici, je vais juste ajouter un nouveau composant et je vais juste chercher cube. Nous allons ajouter un cube. Je vais juste le déplacer un peu plus haut comme ça. Et nous allons aller sur notre graphique d'événements et compiler. Ensuite, nous allons créer une nouvelle variable. Je vais simplement cliquer sur le bouton Nouvelle variable. Je vais appeler ça un déclencheur. Et nous allons définir le type de variable sur le plan de déclenchement que nous venons de créer. Donc, pour moi, c'est l'option de déclenchement ici. Je vais le sélectionner et les compiler. Nous allons sélectionner notre variable de déclenchement et nous allons prendre une instance modifiable. Et si vous vous souvenez, cela nous permettra de changer cette valeur lorsque nous sélectionnerons notre cube dans le niveau. Nous allons donc compiler à nouveau, aller sur notre carte à la troisième personne ici. Je vais juste ajouter trois cubes, donc je vais les dessiner comme ça. Et je vais également ajouter un déclencheur. Je vais donc mettre ça ici. Je vais maintenant sélectionner chacun de mes cubes et vous pouvez voir que nous avons notre option Trigger ici. Maintenant. En effet, lorsque nous avons sélectionné notre déclencheur, nous avons coché l'instance modifiable. Donc, si le vôtre ne l'est pas, vous devez vous assurer que c'est coché et ensuite vous compilez. Nous pouvons maintenant sélectionner un déclencheur. Je vais simplement cliquer sur le menu déroulant et sélectionner notre déclencheur ici. C'est donc le plan de déclenchement ici. Je vais le faire pour chacun de nos plans de cube. Et tout ce que nous faisons, c'est simplement définir cette variable de déclenchement dans nos cubes sur ce déclencheur spécifique. Maintenant, nous allons revenir à notre déclencheur et créer un nouveau répartiteur d' événements. Donc, si nous allons ici et qu'ils peuvent voir le panneau des plans, vous pouvez voir que nous avons répartiteurs d' événements et nous pouvons cliquer sur le bouton Nouveau répartiteur d'événements ici ou nous pouvons ajouter et sélectionner un événement répartiteur. Je vais donc simplement cliquer dessus. Je vais nommer cet exemple de répartiteur comme ça. Et nous allons compiler. Maintenant, nous allons appeler notre répartiteur d'événements chaque fois qu'un personnage se chevauche ou se déclenche. Je vais donc m' éloigner des autres acteurs. Je vais juste payer pour le personnage. Et cela nous permettra de vérifier l' objet ou le caractère d'entrée. Si c'est le cas, nous pouvons exécuter le reste de notre code. Et je vais faire glisser mon répartiteur d'événements ici. Vous pouvez voir que nous avons différentes options. Je vais vérifier, Clic cool. Et si nous cliquons dessus, vous pouvez voir que nous obtenons ce nœud et que cela entraîne notre répartiteur d'événements. Maintenant, je vais compiler et accéder à notre cube ici. Je vais juste supprimer ces deux-là, noter et je veux juste garder le nœud de jeu de début parce que nous allons l'utiliser. Je vais récupérer la variable de déclenchement ici. Je vais me traîner. Je vais faire un signe. Nous allons faire défiler vers le bas et nous voulons trouver le répartiteur d'exemple de sinus. Je vais cliquer dessus. Vous pouvez voir que cela crée quelques nœuds pour nous. Il crée donc d'abord puis attribue un nœud. Et cela nous crée un nouvel événement personnalisé. Et je vais relier ça au début de la pièce. Donc, ce que cela fait essentiellement, c'est sur Begin Play, nous affectons, eh bien, nous utilisons notre référence de déclencheur ici pour assigner notre événement à exécuter chaque fois que l'exemple de distribution qu'il est appelé. Et si vous vous souvenez dans notre déclencheur, chaque fois qu'un personnage se chevauche ou se déclenche, nous appelons ce répartiteur d'événements. Et ce que cela va faire est maintenant nos cubes, tous les trois exécuteront cet événement lorsque l'événement, l' exemple de répartiteur est appelé à l'intérieur du déclencheur que nous avons sélectionné. Je peux donc exécuter du code ici. Disons qu'on pourrait définir l'emplacement, l'emplacement. Nous voulons que l'emplacement de Sac soit mappé à l'emplacement L plus une certaine valeur. Nous allons donc faire un ajout. Maintenant, je dirais 100 en hauteur et je me connecte à l'emplacement des actualités. C'est maintenant que nous entrons dans notre déclencheur parce que nous avons lié cet événement. Deux exemples, le répartiteur ou le déclencheur seront cool et amusants avec le répartiteur et nos cubes se déplaceront vers le haut, donc nous allons appuyer sur play. Maintenant, quand je passe sur ma gâchette, vous pouvez voir que les trois cubes ont été déplacés vers le haut. Ceci est utile parce que notre déclencheur n'a pas besoin dire à chacun de ces cubes de faire quelque chose. Tout ce que notre déclencheur fait est d' appeler un exemple de répartiteur. Ensuite, nos cubes sont configurés pour faire quelque chose lorsque ce déclencheur spécifique exécute l'exemple de répartiteur. Voilà donc les bases du fonctionnement des répartiteurs d' événements. Maintenant, si vous vous souvenez quand nous étions dans notre déclencheur ici et que j'ai glisser mon exemple de répartiteur, nous avons plusieurs options différentes. Nous avons donc essayé le nœud cool. C'est ce qui exécute le répartiteur d' événements et exécute tous les événements qui sont affectés à l'exemple de répartiteur. Nous avons également des liens. Donc, si nous le créons en C, il s'agit en fait du même nœud que celui que nous avions dans notre cube. Cela n'a tout simplement pas créé l'événement pour nous. Peut-être avons-nous déjà eu un événement client que nous voulons simplement y intégrer. Nous pouvons utiliser un nœud Bind. Si je le fais glisser à nouveau, tu peux voir qu'on a délié. Cela nous permet de nous connecter à un événement et de lui indiquer que nous ne voulons plus que cet événement soit exécuté pour notre exemple de répartiteur. Donc, par exemple, si nous compilons à nouveau et que je clique sur Play quand je rencontre ce cubing et que je les vois monter. Et si je les croise à nouveau, vous pouvez voir qu'ils ajoutent de la hauteur. Maintenant, peut-être que je voulais que ça ne soit diffusé qu'une seule fois. Et ensuite, si le joueur rencontre la pupe, il ne se déplacera plus. Et je peux le faire. Je peux donc accéder à mon cube et faire glisser depuis mon déclencheur et le délier. Nous voulons trouver unbind all events from Event Dispatcher, ou nous pouvons utiliser unbind events. Nous allons donc utiliser la dissociation. Et nous pouvons dire que nous voulons que cet événement soit dissocié de notre exemple de répartiteur. Donc maintenant, cela ne fonctionnera qu'une seule fois et ensuite il ne fonctionnera plus. Donc, si je le rencontre maintenant et que je reviens en arrière, vous pouvez voir que maintenant notre événement n'est plus lié à notre exemple de répartiteur. Ainsi, même s'il est toujours en cours d'exécution, cet événement n'est plus en cours d'exécution. Maintenant pour en revenir à notre gâchette, nous pouvons à nouveau traîner. Et il existe également une option Tout délier. Maintenant, ça fait à peu près la même chose. La seule différence est que nous ne spécifions pas d'événement. Donc, si je fais glisser et que je délie tout, nous pouvons tout dissocier de notre exemple de répartiteur ici. Vous pouvez voir qu' il n'y a aucune entrée d'événement. Cela va simplement dissocier tous les événements de tous les Blueprints liés à cet exemple de répartiteur. Désormais, les répartiteurs d'événements peuvent également avoir des entrées variables similaires aux fonctions et aux événements. Donc, si nous revenons à notre plan de déclenchement ici, et que nous sélectionnons notre exemple de répartiteur dans le panneau Détails. Je vais juste me débarrasser de cette recherche cachée. Vous verrez que nous avons des entrées. Et si nous cliquons sur le bouton Nouveau paramètre ici, nous pouvons ajouter de nouvelles variables. Nous pouvons donc ajouter des nombres flottants, des booléens, n'importe quel type de variable de votre choix. Je vais juste ajouter un float et je vais le définir pour qu'il soit appelé, disons float. Nous allons compiler. Vous pouvez voir que cela me donne une erreur ici et que nom de la variable n'a pas été mis à jour. Cela peut parfois se produire avec les répartiteurs d'événements. Ne t'inquiète pas trop. Vous pouvez simplement cliquer avec le bouton droit sur le nœud et nous allons actualiser les nœuds. Et vous voyez qu' il a maintenant changé de nom pour devenir ce qu'il devrait être et nous pouvons simplement compiler. Et maintenant, nous n'avons plus d'erreur. Maintenant, cette entrée variable a été ajoutée à notre super répartiteur. Si nous allons maintenant dans notre cube et que nous compilons, vous pouvez voir qu' il est automatiquement ajouté cette variable flottante à notre événement ici. Maintenant, tout ce que nous définissons dans notre Event Dispatcher est ce qui sera affiché ici dans notre événement. Donc si, par exemple, je voulais que ce soit cinq, et que je suis allé dans notre cube, je vais juste le faire, j'avais une chaîne d'impression. Je vais donc simplement ajouter une chaîne d'impression ici. Et nous allons connecter la chaîne d'impression à la valeur flottante, ce qui les déplace légèrement. Nous avons donc un peu plus d'espace comme ça. Maintenant, lorsque cet événement s'exécute, il affichera la valeur de notre valeur flottante, et elle est définie par notre répartiteur d'événements. Donc, si je le compile et que je rencontre mon cube, vous pouvez voir que ces trois cubes exécutent le code, donc il affiche des chaînes 53 fois. intéressant à propos des répartiteurs d' événements, c'est que nous pouvons avoir de nombreux autres plans qui utilisent également ce répartiteur d'événements que nous venons de configurer. Ainsi, lorsqu'un personnage entre dans une pièce, vous avez un déclencheur qu'il traverse. Et peut-être que tu voulais que cette chambre change d'une certaine façon. Vous vouliez que certains objets disparaissent. Vous vouliez que certains objets bougent, peut-être un son à jouer. Vous pouvez avoir toutes ces choses en utilisant un seul répartiteur d'événements qui s'exécute lorsque votre personnage chevauche une boîte. en revenir à notre plan de déclencheur, si vous vous souvenez quand nous avons sélectionné notre répartiteur d'événements ici, nous avons également une option appelée copie la signature depuis. Et si je clique dessus, vous pouvez voir que nous avons différentes options. Maintenant, cela vous permet simplement de copier les variables d'entrée d' un autre répartiteur d'événements. Il y en a donc une grande liste ici parce que le moteur est livré avec un tas de répartiteurs d'événements intégrés. C'est donc juste utile si vous le souhaitez, au lieu d'avoir à ajouter manuellement des entrées variables. Supposons que vous disposiez déjà d'un répartiteur d'événements avec les mêmes entrées que celles que vous souhaitez utiliser. Vous pouvez utiliser Copier la signature depuis et les ajouter immédiatement. Maintenant, pour vous donner un exemple de certains répartiteurs d' événements intégrés au moteur. Nous pouvons cliquer avec le bouton droit et rechercher bind. Et si nous le faisons défiler, vous pouvez voir que nous avons des événements de liaison intégrés. Par exemple, nous en avons pour les entrées de souris, nous en avons pour les dégâts et nous en avons également pour les collisions. Vous pouvez effectivement voir qu'il y a un événement Bind à un acteur qui commence à se chevaucher. C'est la même chose que notre événement ici. Nous pourrions donc configurer cela différemment. Donc, si je clique aussi sur Bind event. Sur les actes ou commencer le chevauchement obtiendra un nœud de jeu. Connectez-la ici. Maintenant, nous pouvons supprimer cet événement et créer notre propre événement personnalisé qui s'exécutera chaque fois qu' un acteur se chevauche, je vais le déclencher à l'aide de ce répartiteur d'événements. Je peux donc cliquer avec le bouton droit de la souris ou faire glisser l'événement ici, rechercher personnalisé. Vous verrez qu'il vient de créer un événement pour nous et qu'il y a en fait ajouté les acteurs superposés et les autres acteurs ici. Donc je peux appeler ça, disons. Et maintenant on peut connecter ça. Nous pouvons prendre la broche de l'autre acteur, mettre dans notre vérification de caractère. Donc maintenant, ce code fait essentiellement sur Begin Play, nous lions un événement, qui est notre événement de superposition ici, au moment où un acteur commence à chevaucher notre déclencheur. Et puis quand un acteur se chevauche, je déclencherai ou l' événement de superposition s'exécutera. Cela nous donnera l'autre acteur. On peut vérifier si l'autre acteur qui se chevauche, je déclenche un personnage. Si c'est le cas, nous l'appelons notre exemple d'envoi. Nous pouvons tester si cela fonctionne, donc nous allons simplement compiler et enregistrer, appuyez sur Play. Et maintenant, lorsque nous passons en revue notre déclencheur, vous pouvez voir que ce code est toujours en cours d' exécution comme avant. Mais à la place, nous utilisons maintenant un répartiteur d'événements intégré au moteur. Jusqu'à présent, je n' ai utilisé le répartiteur d'événements que pour refroidir des événements sur un autre Blueprint. Par exemple, un cube exécute cet événement lorsque l'exemple de répartiteur est rhum, mais nous pouvons également utiliser notre répartiteur d'événements dans le même Blueprint. Peut-être que je voulais qu'un événement s' exécute lorsque j'appelle mon répartiteur d' événements, en fait, dans mon déclencheur, je pourrais le faire également. Je pourrais donc faire glisser mon répartiteur d'événements. Je pourrais le faire, si nous cliquons sur Assigner ici, cela fait la même chose que l'événement Bind, mais cela crée également nos événements personnalisés. Donc, si je clique sur assigner, vous voyez qu'il a créé notre événement Bind et l'événement client. Alors que si je fais glisser et que je lie, vous pouvez voir que cela crée simplement la liaison. Il suffit donc d'un clic créer les deux nœuds ensemble. Nous pouvons donc le faire. Je peux connecter ça ici. Et je vais déplacer mon événement ici en c qui nous donne une sortie flottante. Parce que si vous vous en souvenez, nous avons une entrée flottante sur notre exemple de répartiteur. Cool. Et nous pouvons exécuter du code à l'intérieur de notre déclencheur, et cela s'exécutera chaque fois que notre exemple de répartiteur est appelé. Je pourrais donc ajouter un écran d'impression ici, dire bonjour. Maintenant, lorsque nous rencontrons notre cube, vous verrez qu'il imprime les cinq valeurs de R cubed. Et puis il ne fonctionne qu'une seule fois. Bonjour, parce que nous n' avons qu'un seul déclencheur et que ce code est en cours d'exécution dans notre déclencheur. Maintenant, quelque chose à garder à l'esprit avec ces événements, dépêches, c'est que si j'ai déjà un événement personnalisé, disons que je vais en créer un personnalisé, et peut-être qu'il a des entrées différentes. Je vais donc simplement ajouter une entrée flottante. Si j'ai essayé de le connecter au répartiteur d'événements pour qu'un acteur commence à se chevaucher et que je ne peux pas le brancher. Si je le déconnecte, vous pouvez voir que je ne peux toujours pas le brancher. Et c'est parce que cet événement personnalisé ne possède ni les entrées ni les sorties. Ce nœud de liaison nécessite. Ainsi, chaque événement client auquel nous nous connectons doit avoir ces deux variables. Je ne peux donc pas relier ça à ça. Je peux le connecter à notre exemple de répartiteur comme ceci, car il a une valeur flottante et c'est ce qui est requis, par exemple, le répartiteur. Normalement, le moyen le plus simple si vous n'avez qu'un événement Bind, disons comme ceci, est de simplement faire glisser vers l'extérieur, rechercher Customer them. Et cela créera un événement personnalisé pour vous. Et il ajoutera toutes les variables dont vous avez besoin pour pouvoir vous connecter à ce répartiteur. Comme vous pouvez probablement l'imaginer, si vous en aviez beaucoup, vous auriez ces longs fils partout et cela pourrait être un peu salissant. Ce que vous pouvez faire au lieu d'avoir à passer le fil à l'événement ici, elle peut faire glisser et vous pouvez rechercher Créer un événement. Et vous obtenez ici ce petit mot qui nous permet de sélectionner un autre événement. Nous pouvons donc cliquer dessus et vous pouvez voir que cela ne me donne que l'option pour le soulignement de l'événement client 0 et l'exemple d'événement de soulignement du répartiteur. Et cela ne me donne ces options que parce que ce sont les seuls événements qui ont notre valeur flottante. Et je peux dire que select sélectionnera notre exemple de répartiteur comme ça. Vous pouvez maintenant voir que notre fil rouge n'est plus connecté à cet événement. Mais je vais bonjour à la montre de chaîne, ils fonctionnent toujours parce que cette note de création d'événement connecte essentiellement le répartiteur d'événements à l'événement ici sans réellement connecter de fil. Donc, si nous le compilons, je tombe sur notre déclencheur ici. Vous pouvez voir que notre chaîne d'impression Hello est toujours en cours d'exécution même si elle n'est pas directement connectée à ce nœud Bind. Maintenant que créer un nœud d'événement nous permet également d' utiliser des fonctions avec les répartiteurs d'événements. Donc, si nous cliquons sur l'option déroulante ici, vous pouvez voir que nous pouvons la définir sur aucun. Nous pouvons également créer une fonction ou un événement correspondant. Si vous cliquez sur l'événement correspondant, cela créera simplement un nouvel événement personnalisé ici. Et il ajoutera les sorties variables appropriées dont le répartiteur d'événements a besoin, puis le définira automatiquement sur ce nouvel événement. Donc, maintenant, lorsque les exécutions par lots d'événements sont habituées, l'événement s'exécutera. Mais nous pouvons également créer des fonctions qui vont refroidir. Au lieu de cela, nous pouvons cliquer sur Créer une fonction correspondante pour créer une nouvelle fonction. C'est juste une fonction normale comme nous l'avons déjà utilisée, c'est juste que celle-ci s'exécutera maintenant chaque fois que notre exemple de répartiteur s'exécute. Vous pouvez donc voir qu' un flotteur est automatiquement ajouté pour nous. Cela fonctionnera comme une fonction normale. Nous pourrions donc ajouter du code à cela si nous le voulions . J'avais un écran d'impression. Maintenant, pour que cela fonctionne, nous savons que c'est cette chaîne d'impression qui est en cours d'exécution. Et maintenant, quand on appuie sur Play, je passe sur ma gâchette. Vous pouvez voir que cela les maintient en mouvement en imprimant ces cinq valeurs. Et c'est aussi une fonction d'impression parce que cette fonction à l'intérieur de notre déclencheur est maintenant exécutée parce qu'elle est définie pour être liée à l'exemple de répartiteur. C'est donc tout pour notre leçon sur les répartiteurs d' événements. Il existe un excellent outil permettant d' appeler un événement et un plan et d'appliquer de nombreux autres plans et différentes manières sans avoir à spécifier chaque plan que vous souhaitez appliquer. 19. Les bases (interfaces): Salut tout le monde. Dans cette leçon, nous allons parler des interfaces Blueprint. Les interfaces Blueprint nous permettent d'appeler des fonctions et des événements sur d'autres Blueprints sans avoir à payer pour ce type de Blueprint. Vous avez peut-être remarqué que j'ai toujours le cube et les plans de déclenchement de la leçon précédente. Je vais simplement les conserver parce que je vais les réutiliser pour un exemple un peu plus tard. Pour commencer, nous allons créer une nouvelle interface Blueprint. Si je fais un clic droit ici et que j' accède aux plans , je les ouvre et nous descendons à l'interface du plan directeur. Je vais juste appeler mon BP sur interface d'exemple de score comme ça. Et nous allons double-cliquer dessus pour l'ouvrir. Et je vais juste faire glisser le mien et l'ajouter à l'onglet en haut. Comme vous pouvez le constater, nous avons une nouvelle interface utilisateur. Nous avons ce grand graphique d'événements que nous n' allons pas vraiment utiliser. Nous ne pouvons pas apporter de modifications ici ou ajouter code, c'est juste un aperçu des fonctions que nous ajoutons. Et vous pouvez voir que nous avons notre onglet Fonctions ici où nous pouvons créer et supprimer des fonctions. Et si une fonction est sélectionnée, nous pouvons ajouter des entrées et des sorties. Nous allons donc commencer par renommer la fonction par défaut fournie avec notre exemple d'interface. Je vais donc simplement renommer le mien pour diminuer la santé de cette façon. Nous allons compiler et nous reviendrons ici dans un instant. Mais je veux vous montrer à quoi la fonction de diminution de la santé ressemble la fonction de diminution de la santé dans notre plan de personnage. Nous allons donc passer au ThirdPersonCharacter. Je clique avec le bouton droit de la souris et je recherche une santé diminuée. Et vous pouvez voir que cela augmente ou diminue le nœud de message d'intégrité. Maintenant, comme nous l'avons créé dans notre exemple d'interface, apparaîtra dans chaque plan si nous cliquons avec le bouton droit de la souris et que nous le recherchons. Donc, si je crée ceci, vous pouvez voir qu'il ressemble beaucoup au nœud cool que nous utilisons avec les événements. Avec quelques différences. Nous avons cette icône dans le coin supérieur droit, et nous avons également l'entrée cible, mais elle ne dit pas «  self » à côté. Nous devons en fait fournir une cible. Et ce n'est que le plan directeur ou la référence au plan que nous voulons appeler notre diminution. Comment fonctionne sur. Maintenant, si je devais exécuter ce nœud maintenant, donc si j'obtiens le Plano et que je le connecte pour réduire notre fonction, rien ne se passerait parce que nous n'avons pas fourni de cible. Mais si nous traînons et nous faisons de nous une cible, rien ne se passera encore, car nous n'avons pas réellement implémenté cette fonction dans notre personnage à la troisième personne. Pour ce faire, nous devons d'abord compiler, nous allons aller dans les paramètres de classe. Et sous Implementation Interfaces, il n'y a pas d'interface actuellement, mais nous pouvons en ajouter une nouvelle. Nous allons donc cliquer sur Ajouter et nous rechercherons par exemple. Et nous allons sélectionner l' exemple d'interface ici. Ensuite, nous allons compiler. Maintenant, si nous allons à l' interface de l'option a, vous pouvez voir que nous avons une santé diminuée . Maintenant, si nous double-cliquons dessus, cela créera un événement de diminution de la santé. Maintenant, quand nous courons, quand notre Begin Play s'exécute et qu'il exécute ce nœud cool de diminution de la santé avec nous-mêmes comme cible. Cet événement se déroulera ici. Je vais juste le déplacer plus près notre nœud de jeu de début ici, qui se déplace ici comme ça. Nous pouvons donc le tester rapidement. Je vais simplement lancer une chaîne d'impression et nous allons appuyer sur lecture et voir que l'écran d'impression que nous venons d'ajouter est en cours d'exécution. Désormais, nous pouvons également ajouter des entrées et des sorties à nos fonctions d'interface. Donc, si nous revenons à l'exemple d'interface, sélectionnez notre diminution de santé. Je vais d'abord ajouter une entrée, donc j'en ajouterai une nouvelle. Je vais le laisser en booléen. Et je vais juste dire que c'est le cas, nous allons simplement appeler ça un test pour l'instant. Vous pouvez voir que l' aperçu est mis à jour. Il dit que le test va compiler et revenir à notre ThirdPersonCharacter. Et vous pouvez voir maintenant que notre note intéressante ici, le nœud de rappel de la fonction d'interface de diminution de la santé a maintenant une entrée de test et notre événement a une sortie de test. Quelle que soit notre entrée de test, ce sera la sortie de notre nœud d'événement. Si je le prends et que je le branche dans notre chaîne ici, quand nous appuierons sur play, vous verrez qu'il affichera la chaîne true, true. Maintenant, nous pouvons également ajouter des sorties à notre exemple de fonction Interface. Donc, si nous y allons, je vais simplement appuyer sur Echap pour accepter que l'éditeur de plan sélectionne Diminuer la santé. Et ici, nous pouvons ajouter une nouvelle sortie. Je vais donc ajouter une sortie. Il y a un bug en ce moment où tout a disparu, en grisé. Je dois compiler, puis sélectionner la diminution de notre fonction à nouveau, vous pouvez voir que je peux maintenant la renommer et accéder à ces informations. Peut-être qu'au moment où vous suivrez cette leçon, ce sera réglé. Mais pour l'instant, c'est ce que tu dois faire. Quatre sorties. Je vais juste nommer cet état de santé actuel comme ça. Nous allons le définir sur un entier et le compiler. L'ajout de sorties à une fonction d'interface va entraîner des changements dans notre plan de personnage. Donc, si nous revenons à notre personnage, vous pouvez voir que notre nœud d' événement a reçu un avertissement et qu'il s'est converti en client, alors ce n'est plus une interface événements jusqu'à jouer maintenant. Et vous pouvez voir que notre chaîne d'impression n'est plus en cours d'exécution parce que cet événement n'est pas réellement refroidi. Et si nous allons dans notre section Soins de santé diminués et que nous double-cliquons dessus, vous pouvez voir que cela nous amène à ce qui ressemble à une fonction. Maintenant, il n'a pas ajouté notre nœud de sortie. Nous pouvons ajouter cela simplement en cliquant avec le bouton droit de la souris et en faisant retour. Nous voulons ajouter un nœud de retour. Et vous voyez qu' il nous donne maintenant un stylo d'exécution de sortie avec notre état actuel de sortie. Variable. Tu n'auras peut-être pas à le faire. Il peut simplement ajouter automatiquement le nœud renvoyé pour vous, mais parfois ce n'est pas le cas. Si ce n'est pas le cas, vous pouvez le démarrer vous-même. Donc maintenant, cette fonction s' exécutera à la place Begin car nous appelons toujours la fonction d' interface de diminution de la santé. Donc, si nous connectons cela à notre sortie, maintenant, peut-être que je veux qu'il produise une valeur de santé actuelle. Nous allons donc créer une nouvelle valeur pour la santé. Santé. Nous le remplaçons par un entier. Je vais compiler, je vais régler ça sur 100. Maintenant, parce que c'est une diminution, la fonction que je l'ai appelée la fera diminuer d'un certain montant. Nous allons soustraire et définir la santé. Maintenant. Nous allons soustraire cinq de notre santé, puis nous produirons la valeur de santé actuelle. Comme vous pouvez le voir, vous pouvez simplement écrire code ici comme une fonction normale. Il se comporte exactement comme les fonctions que nous avons utilisées auparavant. Donc maintenant, si nous allons sur notre graphique d'événements, si vous vous souvenez de Begin Play ou si vous diminuez la santé, la fonction de l'interface va être refroidie. Nous avons des tests cochés, mais nous ne faisons rien avec cela et diminuons le fonctionnement, comme vous pouvez le voir, il ne les a pas branchés. Ensuite, nous voulons qu'il renvoie une valeur de santé actuelle. Et je peux ajouter une contrainte à cela, qui a commencé à imprimer la chaîne ici. Maintenant, la fonction de santé diminuée que nous avions auparavant. Ça ne fait plus rien. Il vient d'être converti en client normal, alors nous pouvons simplement le supprimer maintenant. Et si je peux tirer et que j'appuie sur Jouer, vous pouvez voir que notre santé actuelle a diminué de cinq. Cela a commencé à 100 et c'est maintenant 95. Vous vous demandez peut-être quel est l'intérêt de l'interface. Nous utilisons simplement ces événements et fonctions normaux. Ce qui est cool avec eux, c'est que nous pouvons les utiliser dans d'autres plans sans avoir à choisir un personnage à la première personne. Donc ce que je vais faire c'est que je vais appuyer sur ma gâchette ici. Et je vais maintenant passer au graphique d'événements, ce code provient de la leçon précédente, donc je vais juste le mettre en surbrillance et le supprimer. Je vais également supprimer cette fonction . Et nous allons simplement compiler. Maintenant, normalement, si je voulais dire diminuer ma valeur de santé et mon personnage ThirdPersonCharacter, nous créerions un événement, commençons le chevauchement ou commençons le chevauchement des acteurs. Et cela fonctionne chaque fois que quelque chose se chevauche, je déclenche et cela nous donne accès à l'acteur qui chevauche notre déclencheur et nous coûtons au ThirdPersonCharacter comme nous l'avons fait dans notre vidéo de casting. Ensuite, soit nous obtiendrions nos fonctions, disons que je diminue la fonction de santé, soit nous obtiendrions notre variable de santé. Ensuite, nous le diminuions et fixions la nouvelle valeur en utilisant notre voiture enneigée. Mais ce que les interfaces Blueprint nous permettent de faire, c'est qu'au lieu d'avoir à lancer, nous pouvons simplement nous éloigner d'un autre acteur et rechercher une fonction d' interface de diminution de la santé et créez-le et ce sera notre objectif Quels que soient les chevauchements que je déclencherai, nous appellerons la fonction de diminution de la santé dans ce plan. Et cela ne fonctionnera réellement dans ce plan que si nous avons implémenté l' interface comme nous l'avons fait dans notre ThirdPersonCharacter. Vous vous souvenez, nous avons défini l'interface et ici, si un objet qui n' utilise pas l'interface d'exemple RPP se chevauche, donc je vais déclencher, ce code sera toujours exécuté, mais rien ne se passera. Nous n'aurons aucune erreur, nous n' aurons aucun problème. Cela sera simplement ignoré et le reste du code sera exécuté. Maintenant, comme notre ThirdPersonCharacter utilise une fonction de diminution de la façon dont nous chevauchons notre déclencheur, il sera exécuté. Donc, si nous allons voir notre personnage à la troisième personne ici, je vais juste ouvrir la fonction de cellule diminuée et j'ajouterai, ou en fait, nous reviendrons à notre déclencheur ici. Nous allons ajouter une chaîne d'impression et ici à la place, donc j'ai dû imprimer une chaîne et nous allons imprimer notre état de santé actuel. Et parce que nos personnages, ce qui va se chevaucher ou le déclencher diminuera leur santé dans notre personnage, puis nous obtiendrons santé actuelle de nos personnages afin que nous puissions le compiler. Maintenant, lorsque nous dépassons notre gâchette, vous pouvez voir que notre santé diminue. La bonne chose à ce sujet est que nous ne sommes pas limités à le faire dans notre ThirdPersonCharacter. Si nous voulions d'autres plans, par exemple un véhicule, lorsqu'il appuie sur cette gâchette, nous voulons également réduire sa santé. ce que nous pouvons faire. Donc, si nous ouvrons notre plan de cube ici, par exemple, je vais simplement supprimer ce code de notre leçon précédente. Nous ajoutons une variable de santé. Nous le dirons également à un entier. Et nous allons définir la valeur sur 50. Maintenant, si notre cube devait chevaucher nos cheveux de détente, rien ne se passerait parce que notre cube n'a pas l'interface d'exemple implémentée. Nous allons donc le faire maintenant. Nous allons ajouter l'exemple d'interface et compiler. Maintenant, comme vous pouvez le voir, la fonction de santé diminuée est maintenant dans l'onglet Interfaces ici. Mais si j'étais un cube qui devait chevaucher notre déclencheur, maintenant, il ne ferait toujours rien parce que nous n'avons ajouté aucun code à la fonction de diminution de la santé à l'intérieur de notre cube. Si nous l'ouvrons, juste en double-cliquant dessus, vous pouvez voir que nous avons notre nœud de retour et notre note r ici. Et nous pouvons exécuter du code. Donc, si je le voulais, je pourrais m'occuper de la santé. On va faire moins. Et nous disons, bien moins cinq. Ensuite, nous définirons et nous retournerons la santé actuelle ici. Donc maintenant, lorsque nos chevauchements de cube sont déclenchés, cette fonction s'exécute. Il prend la valeur de santé actuelle moins cinq, définit la valeur de santé actuelle, puis la renvoie. Donc, si nous appuyons sur Play, si je le écrase avec mon personnage, vous pouvez voir que cela diminue toujours notre valeur de santé. Mais si j'appuie sur F8, ce qui m'empêche de contrôler mon personnage et me permet de me déplacer librement. Mais le jeu est toujours en cours. Je peux sélectionner mon cube si je le place dans le déclencheur, vous pouvez voir que lorsqu' il entre dans le déclencheur, il affiche sa valeur de santé et la diminue également. J'espère que cela vous donnera une idée du fonctionnement des interfaces Blueprint. Ils nous permettent essentiellement de créer des fonctions qui peuvent être exécutées dans différents plans sans avoir à payer pour ces plans. Et c'est utile dans les cas d'utilisation comme notre déclencheur ici où si vous voulez une boîte de déclenchement endommage tout ce qui y est présent et qui a de la santé, vous pouvez le configurer à l'aide des interfaces de plan directeur. 20. Les bases (composants): Salut tout le monde. Dans cette leçon, nous allons examiner les plans des composants. Maintenant, si vous suivez la leçon précédente, tout ce que j'ai fait ici est de créer un nouveau modèle à la troisième personne. Nous avons donc pris un nouveau départ pour cette leçon. Pour commencer, nous utilisons des composants pour ajouter nouvelles fonctionnalités aux plans d' acteurs. Ainsi, par exemple, dans notre niveau ici, si je sélectionne le sol, par exemple, et dans le panneau Détails, nous avons l'onglet Composants qui nous montre les composants de cet acteur. Nous pouvons donc voir qu'il possède un composant de maillage statique. Et c'est ce qui nous permet de définir un maillage statique à afficher dans le monde pour cet acteur. Maintenant, il existe de nombreux types de composants différents. Donc si je vais dans mon plan de personnage par exemple, et que nous allons dans la fenêtre d'affichage. Vous pouvez voir dans le panneau Composants que nous avons également différents types de composants ici. Pour commencer, notre personnage possède un composant capsule, qui est cette zone de collision en forme de capsule. Et c'est ce qui empêche notre personnage de tomber à travers le sol ou de traverser les murs. Ensuite, nous avons un composant flèche, qui est simplement configuré pour pointer vers l'avant pour notre personnage. Nous avons le composant de maillage, qui est un composant de maillage squelettique. Cela nous permet de définir un maillage squelettique. Et le maillage squelettique n'est qu'un maillage qui peut être animé. Ensuite, nous avons notre perche de caméra, et la caméra qui est fixée à la perche de la caméra. Et la façon dont cela fonctionne est si entre la fin de la perche de la caméra et le début du bord commun, il y a un objet bloquant qui va raccourcir. Et comme notre caméra est fixée à l' extrémité de la caméra, boum, cela rapprochera notre caméra du personnage. S'il y a un objet qui bloque notre caméra, boum. Ensuite, nous avons notre appareil photo. Et notre caméra est exactement ce qui nous permet de choisir la perspective que le joueur voit lorsqu'il contrôle ce personnage. Maintenant, tous les composants de expliqué jusqu'à présent voient des composants. Ce sont des composants qui peuvent exister dans le monde. Ils ont un emplacement et parfois ils ont un objet visible pour eux. Mais nous avons également un type de composant différent qui n'est que du code. Ils n'ont pas de lieu. Alors, par exemple, s'il s'agit notre composant de mouvement de personnage ici, de notre composant de mouvement de personnage ici, qui est intégré au moteur et intégré à notre plan de personnage. Et si nous le voulions, nous pourrions également ajouter ce composant à d'autres plans. Et c'est ce qui gère le mouvement de notre personnage. La différence importante entre un composant sink et un composant standard est qu'un composant standard n'existe pas dans le monde, n'a pas d'emplacement et ne peut pas être visible par le joueur. Alors que les composants de vision peuvent exister dans le monde. Ils ont un emplacement sur une rotation. Et certains d'entre eux, comme notre composant de maillage , ont un objet physique dans le monde. Maintenant, la raison pour laquelle nous utilisons des composants au lieu de simplement mettre tout ce code et fonctionnalités directement dans un Blueprint Actors Blueprint est que nous pouvons réutiliser des composants sur plusieurs plans qui peuvent nous épargnons beaucoup de temps à écrire du code encore et encore ou à le copier et coller alors que nous pouvions le faire une seule fois dans un composant, puis le réutiliser dans plusieurs plans. De la même manière que les fonctions sont utiles, car nous pouvons modifier le code à un endroit et cela l' affecte dans tous les endroits où la fonction est utilisée. Si nous modifions le code dans notre Blueprint de composant, le Blueprint qui utilise ce composant sera également mis à jour et obtiendra ces modifications. Nous pouvons créer nos propres composants de plan directeur. Tous ceux que nous avons examinés jusqu'à présent sont intégrés au moteur. Si vous cliquez dessus, vous pouvez parcourir et voir tous les composants fournis avec le moteur. Mais si nous voulons créer le nôtre, nous devons accéder au navigateur de contenu. Nous allons cliquer avec le bouton droit et accéder à la classe Blueprint. Ensuite, vous pouvez voir en bas que nous avons le composant actif et le composant récepteur. Maintenant, si vous vous souvenez de la scène complète , des composants peuvent exister dans le monde. Ils ont un emplacement, est pas le cas des composants actifs. Ils sont purement codés. Nous allons commencer par créer un composant actif. Je vais juste appeler ce vice-président pour souligner composante acteur comme ça. Et nous allons double-cliquer dessus pour l'ouvrir. Ensuite, je vais simplement faire glisser l'onglet vers le haut jusqu' à la barre supérieure avec les plans. Vous avez peut-être remarqué que cette interface utilisateur est un peu différente de notre éditeur de plan normal. Comme vous pouvez le constater, nous n'avons pas de panneau Composants car les composants peuvent avoir leurs propres composants. Seuls les acteurs le peuvent. Nous n'avons pas non plus de fenêtre d'affichage car il s'agit d'un composant actif. Il n'a pas de composants de parties visibles. C'est donc purement du code. Nous n'avons donc accès qu' à l'interface utilisateur pertinente au code. Passez ces différences. Il n'y a pas grand-chose de différent entre le codage et un composant par rapport au calcul et au codage dans un plan directeur. Nous avons notre nœud de jeu ou nœud de début, exemple, ils sont juste ici par défaut, mais nous pouvons accéder à la plupart des événements et des fonctions que nous pouvons dans notre Blueprint actif normal à l'intérieur d'un composant. Maintenant, parce que c'est un composant actif, je ne peux pas faire quelque chose comme get location et nous ne pouvons pas trouver le nœud GetLocation parce que cet acteur, ce composant désolé, n'a pas d'emplacement. Je peux donc vous donner un exemple de la façon dont nous pouvons exécuter du code et du composant I. Maintenant, si je sors de mon gros jeu ici, je vais juste ajouter une chaîne d'impression. J'ai donc ajouté du code à mon composant. Et si je peux sonder et appuyer sur Play, tu verras que rien ne se passe. Maintenant, c'est parce que je n'ai pas ajouté mon nouveau composant actif aux plans existants dans mon niveau. Ce code ne sera donc pas exécuté. Mais si je vais à mon ThirdPersonCharacter ici et que je vais ajouter, et je recherche le composant acteur. Vous pouvez voir que nous avons notre BPR, son composant, c'est là que nous venons de le créer ou de l'ajouter. Et vous pouvez voir qu'il est ajouté à cette seconde moitié du panneau avec le mouvement du personnage. C'est parce que ce ne sont que des composants actifs, ne voient pas de composants. Mais maintenant, si je compile et que nous revenons au jeu et à l'éditeur, vous pouvez voir que maintenant le code de notre composant est en cours d'exécution parce qu'il est maintenant attaché à ThirdPersonCharacter et son début de jeu se déroulera lorsque le personnage à la troisième personne est généré ou lorsque la partie commence. Désormais, nous pouvons également accéder aux fonctions, aux événements et aux variables de notre composant actif dans le Blueprint auquel nous les avons ajoutés. Donc, si nous sortons hors jeu d'un éditeur et que je reviens à mon composant actif ici. Je vais juste ajouter , disons, une nouvelle variable. Nous allons simplement appeler ça Test. Je vais également créer une nouvelle fonction, et nous appellerons cette fonction d' exemple. Et je vais également créer un événement ou créer un événement, je vais simplement appeler cet exemple. Nous avons maintenant notre événement, notre fonction et notre variable, et tout cela se trouve dans notre composant acteur. Maintenant, si je reviens à mon personnage à la troisième personne, je peux accéder à ces variables et fonctions très facilement en faisant glisser mon composant BPS depuis le panneau Composants. Faites glisser. Et je peux simplement rechercher un test, par exemple. Et je peux définir toutes ces variables de test si je le veux. Je peux également accéder aux fonctions afin pouvoir faire glisser et rechercher par exemple. Et vous pouvez voir que je peux accéder à ma fonction d'exemple et à mon exemple d'événement. Juste comme ça. Un bon exemple de système que vous pourriez vouloir intégrer à un composant est quelque chose comme un système de santé. Et la raison en est que vous pouvez avoir plusieurs acteurs dans votre jeu que vous vouliez avoir un système de santé. Maintenant, au lieu d'avoir à ajouter une variable et des fonctions qui affectent leur santé à chacun de ces acteurs. Nous pourrions simplement créer une composante santé et ajouter cette composante santé aux multiples acteurs. Ensuite, parce que nous pouvons simplement accéder aux fonctions et aux variables de notre composant facilement dans n'importe quel Blueprint auquel nous l'ajoutons. Nous pourrions alors utiliser ce système de santé sans avoir à recréer toutes les fonctions et variables dans le plan directeur. Désormais, nous pouvons également accéder aux composants d' autres plans et les acteurs. Donc, si je mets rapidement en place un plan de déclenchement, je vais simplement en créer un nouveau. Il y aura un acteur. Je vais juste appeler ça, le déclencheur va ouvrir ça. Je vais ajouter un composant de collision de boîtes. Collision de boîte On y va, je vais monter ça un peu. Et je vais désactiver le mode caché dans le jeu. Ensuite, nous allons accéder au graphique d'événements et supprimer ces nœuds. Et je vais créer un «  start over lap ». Si vous vous souvenez, ce nœud s'exécute chaque fois que quelque chose se chevauche, je le déclencherai et il nous donne accès à l'acteur qui nous chevauche. Nous pouvons donc accéder à notre composant à partir de notre ThirdPersonCharacter et de différentes manières. Si je sors d'un autre acteur et que la recherche coûtera à la personne. Nous avons maintenant notre nœud des coûts, sur lequel, si vous vous souvenez, nous avons fait une leçon séparée. Et si on traîne, on peut y accéder. Ou je parlerai des caractères à la troisième personne, des variables et des fonctions. Mais nous pouvons également accéder à ses composants. Donc, si je recherche le composant acteur, nous faisons défiler vers le bas, généralement en bas, vous pouvez voir que je peux obtenir notre composant actif qui nous permet d'accéder à l'une des fonctions et variables de notre composant X via notre ThirdPersonCharacter. Si je traîne quand je cherche des tests, par exemple, obtient un test, on y va. Je peux accéder à cette variable. Je peux également accéder si je recherche, par exemple, vous pouvez dire que je peux accéder à mon exemple d'événement et à ma fonction d'exemple. Maintenant, il existe un autre moyen d'accéder aux composants de nos acteurs sans casting. Et nous pouvons le faire en utilisant un nœud qui, si nous sortons de notre acteur, recherchera un composant en entrant en conflit. Voyez ici, si je crée ce nœud. Maintenant, essentiellement, cela prend une entrée d'acteur et nous définissons une classe de composant afin que je puisse rechercher un composant acteur. Et je vais régler cela sur le composant BP act. C'est celui que nous avons créé. Cela va vérifier, est-ce que notre contribution d'acteur a cette composante ? Si c'est le cas, il affichera une référence à ce composant ici. Et si je fais glisser vers l'extérieur, je peux effectuer une nouvelle recherche uniquement à partir de ma variable de test. Je peux également accéder aux événements et aux fonctions que nous avons créés. Maintenant, si r n'a pas de composant actif, alors cette référence ne sera pas valide. Donc, chaque fois que nous utilisons ce nœud, nous nous assurons simplement que nous utilisons et qu'il s'agit d'un nœud valide comme celui-ci. Maintenant, lorsqu'un chevauchement d'objets est déclenché, cet événement s'exécute. Il va vérifier, est-ce que cet acteur a notre composant BP Act ? Si c'est le cas, nous afficherons une référence valide. Donc R est valide, serait valide. Et si ce n'est pas le cas, alors nœud valide s'exécuterait, n'est pas valide. Nous pouvons maintenant avoir plusieurs du même composant dans les mêmes plans. Donc, si je vais à mon personnage à la troisième personne ici et que j'ajoute l' application de soulignement BP au composant. Encore une fois, vous allez voir que j'ai maintenant deux de ce composant dans mon ThirdPersonCharacter. Maintenant, nous pouvons vouloir accéder à ceux qui utilisent un nœud comme celui-ci. Pour supprimer ce nœud à la place, nous pouvons utiliser le composant Get par classe. Et c'est un nœud qui fonctionne à peu près exactement de la même manière que notre nœud précédent, mais au lieu d'une sortie variable unique, il s'agit d'un tableau. Maintenant, si nous recherchions composant acteur non scolarisé BP, cela retournerait chaque composant correspondant à notre classe de composant de notre personnage. Et il le renvoie dans un tableau. Et si vous vous souvenez de notre vidéo sur les tableaux , nous pouvons simplement stocker plusieurs variables du même type dans une seule variable. Et si nous voulions accéder à l'une de ces variables à partir de notre tableau, nous aurions besoin de faire glisser et l'utilisateur obtiendrait le nœud. Nous devons fournir un indice. C'est donc à quelle variable de notre tableau nous voulons accéder. Ensuite, à partir de notre nœud get, nous pouvons simplement faire glisser et rechercher, disons, obtient test. Et comme ce stylo est un stylo composant BP act, nous pouvons obtenir notre variable de test ou nous pouvons obtenir les exemples de fonction et d' événement que nous avons créés précédemment. sont donc que quelques façons d'accéder aux composants d' un acteur à l'aide de ces nœuds. Une autre fonctionnalité intéressante des composants est que nous pouvons définir leurs variables pour chaque Blueprint auquel nous ajoutons le composant. Donc, si nous allons voir notre plan de composant d'application ici, je vais simplement créer une nouvelle variable et je vais l'appeler santé maximale. Comme ça. Nous allons le définir sur un entier. Maintenant, si nous compilons ce plan et revenons à notre plan ThirdPersonCharacter. Je vais juste supprimer ce composant actif supplémentaire et j'ai ajouté comme le premier. Et vous pouvez le voir dans le panneau Détails, nous avons une catégorie par défaut. Et voici notre variable de test. C'est le booléen que nous avons créé au début. Et nous avons également notre variable de santé maximale, que nous pouvons utiliser pour définir les valeurs de départ pour notre composant d'application. Je pourrais donc définir cela sur 100. Et peut-être que j'avais un deuxième plan de personnage. Je vais juste utiliser le déclencheur comme exemple. Donc, si nous ajoutons un autre trait de soulignement BP, BP, composant BP act, vous n'avez pas besoin d' utiliser des traits de soulignement. Et ici, vous pouvez voir si j'utilise un trait de soulignement, il ne le trouve pas. Donc, si je fais le composant BP x et que nous nous débarrassons de ce chercheur, et que je sélectionne ce composant. Vous pouvez voir que nous avons encore une fois nos variables de test et de santé maximale ici et la catégorie par défaut. Et vous voyez qu'il est défini par défaut sur 0 parce que c'est ce qu'il est défini dans notre composant x. Ensuite, ici, nous pourrions définir cela comme un millier. Maintenant, si nous configurons Begin Play, nous imprimerons notre santé maximale. Par exemple. Nous mettons notre gâchette et le niveau et nous appuyons sur Play. Vous pouvez voir qu'il imprime un millier et que c'est notre déclencheur qui fait 100, et c'est notre composant d' acte de personnages qui le fait. Ensuite, je voulais simplement vous montrer comment créer rapidement un composant de puits. Nous allons donc simplement sortir des planètes pour cliquer avec le bouton droit de la souris et créer un nouveau plan. Et au lieu de composant actif, nous allons cliquer sur composant vu. Je vais simplement appeler ce composant vu de soulignement BP. Et nous allons double-cliquer dessus pour l'ouvrir. Comme vous pouvez le voir, c'est à peu près le même que notre plan de composant actif. La seule différence réside dans notre classe par défaut. Vous pouvez donc voir que nous avons réellement un emplacement, une rotation et une échelle. Et si nous allons dans notre ThirdPersonCharacter ici, ajouter un nouveau composant, puis nous ajouterons notre composant bp seen. Vous pouvez voir que nous avons un emplacement dans, dans la fenêtre d'affichage ici. On peut le déplacer. Si nous sélectionnons le composant, vous voyez que je peux le déplacer, positionner, le faire pivoter et le mettre à l'échelle. Et si nous revenons à notre composant puits, parce que c'est le même composant, nous pouvons accéder à son emplacement afin de pouvoir rechercher un emplacement sauvage. Vous pouvez voir que nous avons notre nœud Get World Location. Nous avons également notre rotation mondiale get. Si je l'épelle correctement, rotation que nous allons obtenir rotation du monde. Et ceux-ci fonctionnent de la même manière que nos nœuds dans nos plans actifs. Il obtient juste l'emplacement et rotation de notre composant péché. Jusqu'à présent, nous n'avons ajouté composants qu'à l'aide du panneau Composants, mais nous pouvons également ajouter des composants pendant le jeu en utilisant du code. Donc, si je clique avec le bouton droit ici et sur mon plan de personnage ThirdPersonCharacter, je cherche commencer à jouer. Si nous sortons des parents, recherchez add puis le nom de nos composants. Donc BP, vous pouvez voir que j'ai des options pour composant BP x et notre BPC et composant. Donc, si je clique sur notre composant x ici, nous arrivons à ce nœud. Cela signifie essentiellement qu'au début du jeu ou lorsque notre personnage apparaît, il ajoutera un nouveau composant d'acte BP à notre personnage. Nous pouvons utiliser la valeur de retour ici comme nous le pourrions avec si nous glissons une référence comme celle-ci, nous pouvons simplement faire glisser et rechercher, par exemple, obtenir, tester, nous pouvons accéder à notre variable. Nous pouvons également accéder à ces exemples de fonction et l'événement que nous avons créé précédemment. Et si nous le voulions, nous pourrions créer une variable pour stocker cette référence. Donc, si nous voulions accéder à cette nouvelle variable plus tard dans notre code, nous pourrions le faire. Nous faisons simplement la promotion d'une variable qui crée une nouvelle variable qui définit un type de composant BP acts. Nous pouvons l'appeler « nouvel ordinateur ». Cela nous permet maintenant d'accéder au nouveau composant que nous avons créé plus tard, puis de l'utiliser. Il obtient donc une valeur maximale. Lors de la sélection de cette action ajouter BP, HE peut réellement voir que nous avons accès à ses variables de départ. Nous pouvions donc définir notre moi maximum à ce que nous voulions dire 99. Et maintenant que cet acte a créé son maximum utile, bénin. Enfin, nous pouvons également détruire des composants pendant le jeu. Donc, si je fais glisser ma référence de composant actif ici, vais simplement supprimer ce code. Maintenant, pour détruire un composant, nous devons le faire glisser, rechercher, le détruire. Vous pouvez utiliser le nœud de composant de destruction qui supprimera complètement le composant du plan pendant le jeu. Bien sûr, cela n' affecte pas vraiment le plan ici. Ce n'est donc pas comme si vous l'aviez supprimé, cela détruisait simplement le composant pendant cette session de jeu. C'est donc à peu près tout pour les composants. J'espère que vous avez une meilleure compréhension de leur fonctionnement et de leur utilisation actuelle. 21. Les bases (contrôleur de lecteur): Salut tout le monde. Dans cette leçon, nous allons examiner le plan du contrôleur de joueur. Maintenant, au contrôleur de jeu, le plan est créé lorsque nous appuyons sur play et que nous démarrons le jeu. Et il est créé pour chaque joueur qui existe dans le niveau. Et le but d'un contrôleur de joueur est de prendre le contrôle d'un plan tel que des personnages ou des véhicules, et de leur fournir les entrées lesquelles le joueur appuie. Désormais, la manette du joueur reste la même pour chaque joueur à moins qu'un nouveau niveau ne soit ouvert, auquel cas l'ancienne manette est détruite et une nouvelle est créée pour l'ouverture du nouveau niveau. Maintenant, dans le modèle de personnage à la troisième personne que nous avons ouvert ici, il n'inclut pas de contrôleur de plan. Et c'est parce que par défaut, il utilise simplement le contrôleur de lecteur intégré fourni avec le moteur, qui est codé en C plus plus. Vous ne trouverez donc pas la manette du joueur dans notre panneau de plans. Si nous ouvrons notre mode de jeu, nous pouvons voir où nous pouvons réellement configurer notre manette de joueur. Donc, si nous descendons et les classes, vous pouvez voir que nous avons la classe de contrôleur de peste actuellement configurée pour jouer à la manette. Il s'agit de notre manette de lecteur C plus intégrée au moteur. Vous pouvez également voir que nous avons la classe de pion par défaut ici, qui est définie sur notre bp ThirdPersonCharacter. Et essentiellement, ce que fait un mode de jeu c' est qu'il indique au moteur que nous voulons démarrer chaque joueur du jeu avec cette manette de joueur, qui est actuellement la manette de joueur C plus. Et ce personnage, qui est notre ThirdPersonCharacter sur lequel nous avons travaillé , dans les leçons précédentes. Mais nous pouvons créer nos propres plans de contrôleur de joueur. Pour ce faire, je vais fermer mon mode de jeu pour l'instant, cliquer avec le bouton droit sur le navigateur de contenu et accéder aux plans. Et nous allons sélectionner la manette du joueur. Et nous allons nommer cet exemple de BP, contrôle comme ça. Et nous allons double-cliquer dessus pour l'ouvrir. Et je vais juste faire glisser le haut d'ici vers le haut avec nos autres plans. Maintenant, je vais jouer aux manettes. Blueprint ressemble à peu près à un acte de Blueprint. Et c'est parce que c' est en fait un acteur qui n'est qu'un enfant de la manette du joueur. Dans la fenêtre d'affichage , vous pouvez le voir, mais nous n'avons aucun objet visible. En général, vous n' ajouterez pas d'éléments tels un maillage ou quoi que ce soit d'autre dans la fenêtre d'affichage d'un contrôleur de joueur. Nous avons également un appareil photo ici. Maintenant, cet appareil photo n'est utilisé que lorsque nous ne possédons pas d' autre Blueprint. Ainsi, lorsque nous possédons un personnage à la troisième personne , par exemple, nous utilisons l'appareil photo fourni avec celui-ci. Si nous voulons posséder des plans, alors cette caméra est utilisée. Il existe également quelques paramètres supplémentaires dans les paramètres par défaut de la classe, exclusifs à la manette du joueur. Nous avons donc des éléments relatifs au curseur de la souris et aux événements tactiles pour mobile, ainsi que certains outils de gestion de caméra ici également. Et si nous nous dirigeons vers le graphique d'événements, vous pouvez voir que nous avons à peu près la disposition par défaut que vous attendez. Maintenant, qu'est-ce que vous vous demandez peut-être, qu'est-ce que nous utilisons réellement sur notre forum de contrôleur de joueur, qu'est-ce que nous coderions ici au lieu de simplement coder à l'intérieur de notre personnage ? Maintenant, comme je joue aux manettes qui restent les mêmes quel que soit le personnage que nous contrôlons, nous pouvons y stocker des informations que nous voulons garder identiques pour contrôler différentes choses. Par exemple, si vous aviez un système de mission et que vous vouliez que vos missions soient disponibles en permanence, que vous possédiez un personnage, un véhicule ou quelque chose d' autre, vous souhaitez stocker ces informations dans votre contrôleur, soit directement en créant le code à l'intérieur du contrôleur, soit en ajoutant des composants à ce contrôleur. Une autre chose pour laquelle les contrôleurs sont utiles est d'ajouter des entrées que vous voulez garder identiques, quel que soit le personnage que vous contrôlez. Un exemple de ceci serait si vous aviez, par exemple, un menu d'échappement dans votre jeu où tous vos paramètres et commandes, ou vous voudriez probablement que ce bouton fonctionne quel que soit le personnage que vous êtes contrôlant. Donc, au lieu de faire ou d'ajouter ce code dans chaque plan de personnage, nous pouvons ajouter immédiatement et le contrôleur, et ainsi l'entrée sera toujours disponible pour le joueur quel que soit le personnage qu'ils contrôlent. Donc, pour vous donner un exemple de ce que je veux dire par les informations, peu importe le caractère que nous contrôlons , cela créera une nouvelle variable. Et je vais dire que cette mission est terminée. Et nous allons le laisser comme une valeur booléenne. Et je vais compiler. Maintenant, je vais revenir au navigateur de contenu et nous allons créer un déclencheur. Ce déclencheur définira la valeur booléenne de cette mission sur true. Nous allons donc simplement créer un acteur. Je vais l'appeler « Mission Trigger ». Comme ça. Nous allons ouvrir ça. Je vais ajouter une collision de boîtes juste pour que nous puissions chevaucher notre actrice. Je vais le déplacer vers le haut. Maintenant, réglez « C'est caché dans le jeu » sur « false » pour que nous puissions nous asseoir Ensuite, dans notre graphique d'événements, je vais utiliser l' acteur commence le chevauchement. Et si vous vous souvenez, cela s'exécutera lorsque quelque chose chevauchera notre déclencheur et nous indiquera quel acteur l'a chevauché. Donc ça va traîner à partir de là, je vais payer pour le personnage. Et à partir de là, nous pouvons sortir et obtenir un contrôleur. Cela nous donne accès à n'importe quel contrôleur qui contrôle ce personnage. Maintenant, cela sera soit valide, soit non valide. Donc, si un personnage n'est pas contrôlé, il renverra un stylo non valide. Nous voulons donc créer un nœud valide. De cette façon, si un personnage qui n'est pas contrôlé, les chevauchements sont déclenchés, nous n' aurons aucune erreur. Donc, à partir de notre contrôleur, nous devons faire notre mission variable. Donc, si nous traînons et que les recherches accomplir la mission, cela ne fonctionnera pas car il s'agit simplement d'une référence d' objet contrôleur, pas d'une référence à notre exemple de contrôleur réel. Donc, ce que nous pouvons faire, c'est parce que notre exemple de contrôleur est un enfant du type de contrôleur que nous pouvons faire glisser, nous pouvons lancer l'exemple, contrôleur va le connecter jusqu'à ce que ce soit valide. Et puis, à partir de là, nous pouvons sortir et nous pouvons définir la mission, une mission terminée. Et nous pouvons définir cela sur true. Donc, juste pour passer en revue cela, quand un acteur se chevauche. Donc notre déclencheur, nous vérifions qu'il agit là où un personnage, si c'est le cas, alors nous obtenons comme contrôleur et vérifions s'il est valide ? Donc, en gros, nous vérifions ce personnage est réellement contrôlé par quelque chose ? Si c'est le cas, alors nous vérifierons ce contrôleur est un exemple de contrôleur BP ? Si c'est le cas, alors nous définissons la variable done de la mission un des contrôleurs d'exemple BP sur true. Nous voulons maintenant pouvoir accéder à des informations pour voir si notre mission a été accomplie. Nous allons donc accéder à notre ThirdPersonCharacter , puis au Graphe d'événement. J'ajouterai de nouvelles entrées qui rechercheront l'événement d'entrée un. Et cela fonctionnera chaque fois que j'appuierai sur l'un de mes claviers. Maintenant, nous pouvons obtenir notre manette de la même façon que nous l'avons fait pour le déclencheur de mission. Je vais donc le chercher , obtenir le contrôleur. Et en utilisant ce nœud, il vérifiera lui-même s'il y a un contrôleur. Nous sommes donc dans le ThirdPersonacaracter, le travailleur indépendant en tant que **** et notre personnage est un poème. Nous pouvons donc vérifier nous-mêmes si nous avons un contrôleur qui coûtera à l' exemple de contrôleur de soulignement BP. Et à partir de là, nous pouvons mener à bien notre première mission. Et nous allons simplement imprimer une chaîne, que ce soit fait ou non. Nous allons utiliser un nœud de chaîne d'impression et le connecter en chaîne. Comme ça. Je vais simplement compiler ça. Nous allons maintenant revenir à notre carte à la troisième personne, et je vais simplement ajouter le déclencheur de mission à notre niveau. Je vais l'agrandir un peu, donc je vais simplement utiliser l'outil de redimensionnement. Et il y a une dernière chose que nous devons faire avant de tester cela, c'est de changer notre manette. Donc, actuellement en mode de jeu à la troisième personne, si je l'ouvre, vous pouvez voir que la manette du joueur est toujours réglée sur la manette du joueur. Nous devons maintenant changer cela pour notre contrôleur d'exemple bp. Maintenant, comme cette manette est un enfant de la manette du joueur, elle fera tout ce que cette manette fait par défaut. Bell dispose également de notre nouvelle variable que nous avons ajoutée. Donc, si je clique sur Play, si j'appuie sur un, vous pouvez voir que l' impression est fausse. Mais si je tombe sur ma gâchette, maintenant, quand j'appuie sur une, vous pouvez voir qu'elle s'imprime vrai. C'est ainsi que nous pouvons définir et obtenir des informations à partir du contrôleur des joueurs OCT. Ensuite, je vais vous montrer comment nous pouvons réellement changer le personnage que nous contrôlons. Pour ce faire, je vais créer un deuxième plan de déclenchement. Donc nous allons cliquer avec le bouton droit de la souris et faire un cours de Blueprint pour un acteur, je vais appeler cela changement de carotte. personnage. Déclencheur vais ouvrir ça et nous ferons la même chose. Nous allons ajouter une nouvelle boîte de collision, nous allons la déplacer vers le haut. Je l'ai réglé sur false dans le jeu. Et nous allons le compiler et accéder au graphique d'événements. Je vais utiliser le chevauchement d'acteur débutant ici. Pour commencer, nous allons contrôler un autre personnage que j'ai placé dans un niveau. Je vais aller sur la carte de la troisième personne ici, et je vais simplement faire glisser un ThirdPersonCharacter. Je suis là. Ensuite, nous allons revenir à notre déclencheur de changement de personnage ici. Et nous sortirons de l'autre acteur et nous retrouverons le personnage. À partir de là, nous voulons que son contrôleur obtienne , obtienne le contrôleur. Ensuite, nous allons faire glisser depuis Get Controller et rechercher possder et utiliser le nœud de processus. Maintenant, vous remarquez que je ne suis pas en train de lancer mon exemple de contrôleur BP. Et c'est parce que nous n'en avons pas besoin, car cet événement de possession existe dans le contrôleur du joueur qui est le parent de notre manette exemple. n'y a donc pas besoin de lancer. Nous pouvons déjà y accéder. Et nous allons le connecter à notre nœud de coût. Cela nous permet de prendre le contrôle d'une pompe. Ce que nous allons faire, c'est sortir de l' entrée et promouvoir la variable. Cela créera une nouvelle variable **** pour nous. Et avec cette variable ponctuelle sélectionnée, je vais juste me débarrasser du chercheur. Et nous allons prendre une instance modifiable. Ainsi, lorsque nous sélectionnerons notre personnage, le modifierons, changerons de déclencheur de personnage et ensuite le niveau sera capable sélectionner un contrôle de point. Il va donc simplement le faire. Maintenant, je vais faire glisser ma gâchette de changement de carottes. Je vais le mettre ici et je vais l' agrandir un peu plus comme ça. Maintenant, dans mon panneau de détails ici, par défaut, vous pouvez voir dans ****, je peux sélectionner un point de contrôle et je choisirais simplement notre ThirdPersonCharacter. C'est donc le personnage ici, comme ça. Et maintenant, nous pouvons revenir à notre personnage de changement et nous assurer que c'est compilé. Maintenant, nous pouvons tester cela, alors nous allons appuyer sur Play. Nous avons donc retrouvé notre caractère normal comme avant de pouvoir courir partout. Si je rencontre mon déclencheur de mission et que j'appuie sur un, vous pouvez voir que cela revient à vrai. Mais si je rencontre mon personnage changeant, vous verrez que nous avons pris contrôle de cet autre personnage ici. Vous voyez notre ancien personnage là-bas qui court toujours. Si j'appuie sur une, vous verrez que notre variable de mission est toujours vraie même si nous contrôlons un personnage différent. C'est parce que notre manette de joueur est toujours la même. Ça l'était. Quand nous contrôlons ce personnage par dessus ça. Désormais, nous pouvons également prendre le contrôle des personnages qui ont été générés pendant le jeu. Et pour ce faire, si nous allons notre déclencheur de changement de personnage ici, nous allons supprimer cette variable poème pour le moment, car nous allons créer un nouveau-né en utilisant le nœud spawn actif depuis la classe. Nous allons maintenant examiner plus en détail l'utilisation de ce nœud à l'avenir. Mais essentiellement, cela vous permet de créer nouveaux acteurs et le niveau pendant le jeu, nous arrivons en classe. C'est donc le plan que nous voudrions créer. Donc pour nous, ce sera le ThirdPersonCharacter. Et nous obtenons, disons, un lieu d'apparition. Je vais donc faire glisser et rechercher make. Nous ne voulons pas celui-là, désolé, nous voulons transformer comme ça. Cela nous permet de définir un emplacement et une rotation. Nous devons fournir un lieu d' apparition de nos personnages. Donc je vais juste retourner sur place maintenant. Nous allons faire glisser à partir de cela et ajouter un nœud juste pour ajouter certaine distance entre notre apparition de personnage et changer le code pour le déclencher. Donc j'ajouterai 200 et le Z et peut-être 400 et le X comme ça. Cela indique à notre personnage où nous voulons qu'il apparaisse. Ensuite, nous avons cette valeur de retour qui nous donne une référence au nouveau personnage que nous venons de générer. Maintenant parce que notre personnage est un enfant d'un type de personnage, et que les personnages sont des enfants du type pion. Nous pouvons intégrer cela directement à l'option importante ici. Donc maintenant, quand je compile et que je clique sur Jouer, nous pouvons lancer notre déclencheur de changement de personnage et vous verrez qu'il apparaît, je dis « nouveau personnage » à leur emplacement. Nous avons dit que nous avions pris le contrôle de ce personnage. C'est ainsi que vous pouvez faire apparaître de nouveaux personnages et en prendre le contrôle avec votre manette de joueur. Maintenant, ce que vous voudrez peut-être détruire ce personnage restant que lorsque je ne contrôle plus. Ce que nous pouvons faire, c'est revenir au déclencheur de personnage, un élément inhérent. Nous devons faire encore quelques choses. Nous devons donc d'abord stocker une référence de variable de contrôleur. Et la raison en est que, si vous vous en souvenez, il s'agit d'une fonction pure. Les fonctions pures exécuteront toutes les connexions dont elles disposent. Maintenant, si nous essayons de détruire notre personnage avant d'en générer un nouveau et de le posséder, ce qui se passera c' est quand nous essaierons de le posséder ou nœud du contrôleur fonctionnera et qu'il utilisera la cible d'un personnage. Mais si nous avons détruit ce personnage, il n' aura plus de manette à utiliser pour posséder le nouveau personnage. Elle est un peu difficile à comprendre, mais nous allons, nous allons sortir de get controller et allons le promouvoir en variable. Nous l'appellerons contrôleur de chevauchement, comme ça, qui se connecte ici. Maintenant, nous stockons simplement une référence au contrôleur dès que nous le chevauchons. Et nous pouvons déconnecter la cible maintenant d'ici. Ensuite, à partir de notre contrôleur de chevauchement, nous pouvons simplement faire glisser et contrôler ****. Cette note nous permet simplement d'obtenir une référence au pion que notre contrôleur contrôle. Donc on peut s'en sortir et on va le détruire. Parce que c'est toujours une référence à notre vieux personnage que nous n'avons plus. Nous pouvons donc le faire. Ensuite, nous prenons notre variable de contrôleur de chevauchement et la branchons dans la cible de notre possession. Votre code doit donc ressembler à ceci. Et nous pouvons compiler ça. Maintenant, lorsque nous passons dans le niveau et que nous appuyons sur Jouer, si je tombe sur mon déclencheur, vous pouvez voir que j'ai créé un nouveau personnage. J'en ai le contrôle, mais l' ancien caractère que nous rencontrons dans la largeur de la boîte a disparu. Et si nous recommençons, vous pouvez voir que nous créons un autre personnage. Ce vieux personnage a encore disparu. Ce sont donc les bases de la façon dont vous pouvez créer de nouveaux personnages et détruire les anciens. Il y a une autre note dont je voudrais vous parler, à savoir les notes non traitées. Donc, si vous revenez au déclencheur de changement de caractère ici, je vais simplement supprimer ce code maintenant parce que nous n'en avons plus besoin. Et nous pouvons réellement nous débarrasser de ce contrôleur de chevauchement parce que nous n'en avons pas besoin non plus. Maintenant, lorsque nous sortons du contrôleur, vous vous souvenez de ce nœud de possession. Il y a également le nœud non traité. Donc, si nous créons un nœud non traité, il indique simplement au contrôleur d'arrêter de contrôler le personnage, véhicule, les balles qu' il contrôle. Donc si nous connectons ça maintenant, quand nous atteindrons cette boîte de collision, nous perdrons le contrôle de notre personnage. Donc quand je tombe sur ça, vous pouvez voir que mes personnages ont continué à courir sur place. Je ne peux pas le contrôler. Je ne peux pas déplacer mon appareil photo. Et c'est parce que nous ne contrôlons plus ce personnage ni aucun personnage de notre niveau. Ce sera tout pour notre leçon de manette de joueur. J'espère que vous avez un peu mieux compris leur fonctionnement. 22. Les bases (GameMode): Salut tout le monde. Dans cette leçon, nous allons examiner de plus près le type de plan du mode jeu. Donc, essentiellement, le mode de jeu indique au moteur avec quel contrôleur nous voulons que chaque joueur commence, ainsi que le personnage avec lequel nous voulons que chaque joueur commence dans notre niveau. Donc, si nous passons au mode de jeu à la troisième personne que nous avons dans notre navigateur de contenu et que nous l'ouvrons. Vous pouvez voir que les valeurs par défaut des classes sont ouvertes ici, et cela nous donne quelques options différentes sous les classes. Maintenant, nous allons simplement nous concentrer sur la manette et la classe de pion par défaut pour cette leçon, car ce sont les principaux que vous allez modifier. Nous aborderons les autres paramètres dans une prochaine leçon. Mais pour la classe de contrôleur de joueur, il s'agit du plan de contrôleur de joueur qui sera généré pour chaque joueur qui rejoint la partie. Maintenant, il est réglé sur le contrôleur d' exemple BP de notre dernière leçon. Mais si nous le voulions, nous pourrions cliquer dessus et le remplacer un autre contrôleur. Si on le voulait. Ensuite, nous avons la classe de pion par défaut. Actuellement, il est défini sur le caractère BP, à la troisième personne, car c'est la valeur par défaut. Il s'agit du modèle à la troisième personne. Mais si nous le voulions, si nous ajoutons un autre personnage, disons un véhicule, par exemple, avec lequel nous voulions commencer. Au lieu de cela, nous pouvons le sélectionner ici dans le menu déroulant. Maintenant, comme ce plan ne contient aucun code, il nous a donné cette vue. Mais si vous voulez accéder à l'éditeur de plan complet principal, vous pouvez toujours cliquer sur cette option ici pour ouvrir l'éditeur de photos principal. Cela nous donne accès à tous les paramètres que vous attendez, aux composants, au graphique d' événements, etc. Maintenant, le mode de jeu existe dans le niveau, est un enfant des types d'acteurs, il peut donc avoir des composants. Nous pouvons également y écrire du code comme n'importe quel autre plan. Nous pouvons également créer notre propre mode de jeu. Donc, si nous allons dans le navigateur de contenu et que nous cliquons simplement avec le bouton droit de la souris, nous allons dans Classe Et nous avons une option pour le mode de jeu de base ici, mais c'est un peu plus une version réduite du mode de jeu. Donc, si nous allons dans toutes les classes et que nous recherchons le mode Jeu, vous pouvez voir qu'il existe une option de mode de jeu ici. Je préfère utiliser celui-ci simplement parce qu'il est doté d'un peu plus de fonctionnalités intégrées. Nous allons donc cliquer sur Sélectionner pour créer un nouveau plan en utilisant le mode de jeu. Et je vais juste appeler cet exemple BP Game Mode. Si nous double-cliquons dessus, nous pouvons l'ouvrir. Et je vais juste faire glisser l'onglet vers le haut ici. Maintenant, en plus d'être le plan où nous pouvons définir notre contrôleur de départ et nos classes de pions, nous pouvons ajouter du code à notre mode de jeu. Maintenant, en général, vous ajoutez du code au mode de jeu qui fait avancer le jeu d'une certaine manière. Par exemple, si je commence à jouer, vous vouliez un compte à rebours pour terminer la partie ou ouvrir une nouvelle carte. Vous le feriez généralement dans le plan de votre mode de jeu. Une chose utile à propos du plan camouflage est que vous pouvez y accéder à peu près n'importe où. Un exemple de ceci est si nous devions aller à notre hanche ThirdPersonCharacter. Maintenant que j'ai quelques restes de code de nos leçons précédentes, nous allons donc simplement le supprimer. Et si nous cliquons avec le bouton droit de la souris et que nous le recherchons, Nous pouvons utiliser ce nœud pour obtenir une référence à notre mode de jeu actuel. Et actuellement, il s'agit d'une sortie de base en mode jeu. Donc, ce que nous pouvons faire, c'est simplement faire glisser le coût vers notre exemple de mode de jeu. Et la raison pour laquelle nous pouvons le faire est parce que notre exemple de mode de jeu est un enfant du mode de jeu. Et le mode jeu est un enfant de la base du mode jeu. Nous pouvons donc utiliser ce nœud de coût pour accéder à nos fonctions et variables depuis notre exemple de mode de jeu. Donc, si je reviens à mon mode de jeu ici et que je crée une nouvelle variable, je vais simplement appeler ce nom de jeu. Et je vais définir le mien sur un type de nom. Et je vais régler cela pour dire beaucoup par exemple. On peut tirer ça. Si nous revenons à notre ThirdPersonCharacter, nous pouvons faire glisser et rechercher, oublier le nom du jeu. Nous pouvons accéder à cette variable. Si j'ajoute, disons une chaîne d'impression, nous pouvons simplement l'imprimer lorsque nous appuyons sur une sur notre clavier. Et nous allons compiler. Maintenant, si nous devions jouer tout de suite, cela ne marcherait pas et il y a quelques raisons plates. Nous n'avons pas encore configuré notre jeu pour utiliser notre exemple de mode de jeu. De plus, nous n'avons pas configuré notre mode de jeu pour utiliser notre personnage à la troisième personne. Donc, si nous revenons à notre exemple de moteur de jeu, puis que le coût par défaut est défini, nous pouvons définir notre classe de contrôleur par défaut et notre classe **** par défaut. Je vais donc définir le **** par défaut sur le BP ThirdPersonCharacter. Et nous allons définir la classe du contrôleur. Nous pouvons le changer pour notre manette depuis notre dernière leçon ou simplement la laisser en tant que manette de joueur. Je vais laisser le mien en tant que contrôleur de joueur pour l'instant. Nous allons simplement compiler. Ensuite, nous devons accéder aux paramètres du projet. Donc, si je vais modifier ici en haut et que nous allons dans Paramètres du projet, je vais simplement le faire glisser depuis mon autre écran. Ensuite, nous devons passer aux cartes et aux modes. Maintenant, en ce qui concerne les cartes et les modes, nous pouvons définir le mode de jeu par défaut pour notre gang, et ce sera le mode de jeu pour chaque carte que nous créerons. Il est donc actuellement réglé sur le mode de jeu à la troisième personne. Si je change cela ici, je veux sélectionner mon exemple de mode de jeu BP. Donc maintenant, lorsque nous créons un nouveau niveau ou que nous cliquons sur Jouer et notre niveau actuel, il utilisera le mode de jeu exemple au lieu d'un mode de jeu à la troisième personne. Maintenant, à partir de là, nous pouvons également définir notre classe **** par défaut et notre contrôleur par défaut si nous le voulions, personnellement, je préfère simplement aller au plan lui-même. Allez donc dans notre exemple de mode de jeu et modifiez-le ici. Mais si vous le souhaitez, vous pouvez modifier ces paramètres et ici également. Il existe maintenant un autre endroit où nous pouvons définir le mode de jeu, c'est dans les paramètres de notre monde. Donc, si nous fermons les paramètres de notre projet et que nous allons sur la carte à la troisième personne, je vais aller dans Windows et je vais cocher les paramètres du monde. tien est peut-être déjà coché, mais pas le mien. Je vais donc m' occuper de ça. Et puis il y a des paramètres pour ce niveau spécifique. Vous pouvez voir que nous avons une catégorie de mode de jeu et que nous pouvons remplacer un mode de jeu. Et cela signifie simplement que pour ce niveau uniquement, nous voulons utiliser un mode de jeu différent de notre mode de jeu par défaut que nous venons de définir dans les paramètres de notre projet. Vous pouvez voir que c'est en fait réglé sur notre mode de jeu à la troisième personne. Donc, si je devais appuyer sur Play, même si nous avons défini notre exemple mode de jeu dans les paramètres du projet, ce niveau utiliserait toujours le mode de jeu à la troisième personne. Ce paramètre est utile car vous pouvez vouloir obtenir un mode qui autorise l'utilisation des niveaux, à l' exception de quelques-uns que vous pouvez avoir un mode de jeu spécifique que vous souhaitez utiliser pour ces niveaux. Vous pouvez donc utiliser ce paramètre pour prendre le contrôle du mode de jeu et le vendre à ce que vous voulez pour ce niveau spécifique. Donc pour l'instant, je vais simplement régler cela sur aucun, ou nous pouvons simplement cliquer dessus et sélectionner aucun. Et cela effacera le mode de jeu. Donc maintenant, lorsque nous appuyons sur play et que nous appuyons sur un, vous pouvez voir qu' il affiche Death Match, qui est la variable que nous avons définie dans notre exemple de mode de jeu. Mais nous pouvons y accéder très facilement en utilisant simplement le nœud get Game Mode casting dans notre mode de jeu , puis nous pouvons accéder à cette variable. Et cela montrera également le travail pour les événements et les réceptions. Maintenant, enfin, je veux juste aborder certaines des fonctions intégrées qui accompagnent le plus. Donc, si nous passons à notre exemple de mode de jeu, maintenant, si vous vous souvenez des fonctions, nous pouvons remplacer les fonctions de nos plans parents. Donc, si nous cliquons sur cette option de remplacement ici, vous pouvez voir que nous avons un certain nombre de fonctions ici, la plupart provenant de notre base de modes de jeu. Maintenant, si vous vous souvenez de notre leçon sur les fonctions, lorsque vous remplacez une fonction, cela indique au moteur que vous ne voulez pas que le code qui se trouve dans cette fonction dans la base du mode jeu s'exécute, vous souhaitez utiliser votre propre code. Maintenant, en guise d'avertissement, vous devez être prudent lorsque vous surchargez ces fonctions , car le fait de les surcharger peut casser votre projet. Donc, par exemple, si je devais remplacer, générer Default, Pawn that transform, si je clique dessus, vous pouvez voir que nous avons cette fonction intégrée dans la base du mode de jeu. Et cette fonction est responsable de l'apparition dans le personnage. Donc si je compile ceci et que je clique sur Play maintenant, vous pouvez voir que je n'ai plus de personnage et que je n'ai plus aucun contrôle. Et c'est tout parce que je viens de le remplacer. Fonction qui fait réellement apparaître notre personnage. Je ne vais donc pas passer en revue toutes ces fonctions. Il y en a pas mal. Certaines d'entre elles sont explicites, sont un peu plus complexes, mais soyez vigilant lorsque vous surchargez ces fonctions. Si vous choisissez de le faire, soyez prudent. Ils peuvent casser votre projet assez facilement car ce sont comme fonctions essentielles pour s'assurer que le jeu fonctionne réellement. De plus, si vous survolez ces fonctions, vous pouvez voir que vous obtenez des info-bulles raisonnablement décentes qui vous indiquent exactement ce que chacune de ces fonctions fait info-bulles raisonnablement décentes qui vous indiquent exactement ce que chacune de et dont elles sont responsables. Ce sera donc tout pour notre leçon sur les modes de jeu. J'espère que vous comprenez maintenant un peu plus ce que les modes de jeu font réellement dans le moteur et comment vous pouvez les utiliser dans vos projets. 23. Les bases (nœuds d'utilité): Salut tout le monde. Dans cette leçon, nous allons examiner de près les nœuds utilitaires. Les nœuds utilitaires sont utiles pour différentes choses. Ils nous permettent de choisir le code à exécuter, fréquence d'exécution de ce code. Et ils peuvent également nous aider à mettre de l'ordre dans le code de notre projet. Comme vous pouvez le voir dans notre dernière leçon, j'ai recommencé avec un tout nouveau modèle à la troisième personne. Vous voudrez peut-être faire de même. Ensuite, je vais juste ouvrir le ThirdPersonCharacter. Et j'ai ajouté ici quelques-uns des nœuds utilitaires les plus couramment utilisés que nous allons simplement aborder dans cette leçon. Pour commencer, nous allons jeter un coup d'œil à la note de séquence. Donc, si nous le déplaçons ici pour l' instant, une note de séquence prend en charge une entrée d'exécution et possède plusieurs sorties d'exécution. Nous pouvons ajouter de nouvelles sorties en cliquant sur le bouton Ajouter une épingle ici. Et nous pouvons les supprimer simplement en cliquant avec le bouton droit de la souris et en sélectionnant l'option Supprimer la broche d'exécution. La façon dont le nœud de séquence fonctionne est qu'il prend une entrée, par exemple, un début de jeu. Remarque. On peut connecter ça ici. Et il exécutera n'importe quel code connecté au 0 PM alors. Une fois que tout ce code est exécuté, il exécute le code Than One, puis le code suivant et le code suivant et ainsi de suite jusqu'à ce que toutes les broches aient été exécutées. Maintenant, l'utilisation principale du nœud de séquence est simplement de garder votre code un peu plus organisé. Avec des plans. Si vous avez beaucoup de code, vous pouvez avoir tendance à avoir de très longues lignes de code. Un nœud de séquence vous permet diviser simplement afin d'avoir plusieurs lignes et de garder les choses un peu plus organisées. Vous pouvez également utiliser le nœud de séquence dans une fonction. Donc, si je crée une nouvelle fonction, je fais glisser lorsque je cherche une séquence courte en C, je peux créer un nœud de séquence. La façon dont cela fonctionne à l'intérieur d'une fonction, c'est quelque chose dont vous devez être conscient. Cela dit que j'avais du code ici, disons que j'imprime une chaîne, puis si un nœud, et puis si j'avais un nœud de retour. Souvenez-vous maintenant que lorsque vous exécutez un nœud de retour, il termine la fonction. Donc, si ce nœud de retour où exécuter un code que vous avez connecté à l'une de ces autres broches votre fonction ne s'exécutait pas. C'est donc quelque chose dont il faut être conscient lorsque l'on utilise des séquences dans une fonction. Nous allons maintenant revenir à notre graphe d'événements et nous allons examiner le nœud de la porte. Donc, si nous supprimons sur ceux qui montent, encore une fois, vous permet d'exécuter du code qui est connecté à la sortie à une fréquence de toutes les entrées de l'entre-nœud. Donc ce que je veux dire par là, c'est que si je connecte un tick à l'entre-nœud ici, alors notre code de sortie exécutera toutes les technologies. Et le portail nous permet essentiellement d' ouvrir et de fermer cette sortie PM. Donc, si j'ajoute un, si je clique avec le bouton droit de la souris et quelle entrée, entrée d'eux, un, nous pouvons créer une entrée d'eux, un. Connectez-le pour l'ouvrir, le copier et le coller. Maintenant, sélectionnez la note ici, cette petite icône de clavier et appuyez sur deux, et changez simplement cela en une entrée 2 maintenant. Et je connecte ça et je vais juste ajouter une chaîne d'impression ici que nous faisons tout cela à l'intérieur du caractère à la première personne, à la troisième personne. Désolé. Nous allons compiler et aller sur la carte. Ça joue. Vous pouvez maintenant voir que ma chaîne d'impression n'est pas en cours d'exécution. Et si je reviens au personnage à la troisième personne ici et que j'utilise l'option de débogage. Vous pouvez voir que le code de mon tick est en cours d'exécution. Il passe par la porte, mais la sortie ne fonctionne pas. Maintenant, si je reviens à mon niveau, j'appuie sur un. Vous pouvez voir que cette chaîne d'impression est en cours d'exécution. Et si nous allons à nouveau voir notre troisième personne, vous pouvez voir que le code de sortie est en cours d'exécution. Et c'est parce que j'en ai appuyé une et j'ai ouvert la porte. Si j'appuie sur deux, je peux fermer le portail. Si je reviens en arrière, vous pouvez voir que le code n'est plus en cours d'exécution et que cette chaîne d'impression ne fonctionne pas non plus. Il existe maintenant quelques autres options sur notre nœud de porte. Nous pouvons utiliser le bouton bascule. Donc, en gros, ce sera juste les portes actuellement ouvertes et nous voulons basculer, cela va le fermer. Si les portes sont actuellement fermées et que nous lançons toggle, toggle, il s' ouvrira et nous aurons alors une option pour démarrer la fermeture. Donc, actuellement, il commence à être fermé. Mais si je décoche cette case, nous cliquons sur Play, vous verrez qu'elle commence à fonctionner à la place. Maintenant, j'ai ouvert la porte avec une techno. Donc, si je quitte le jeu ici, nous pourrions utiliser un minuteur au lieu d'un nœud technologique, ce qui est probablement meilleur pour les performances. Nous allons donc simplement faire un plug-and-play, connecter une minuterie. Donc, si vous vous souvenez du nœud SetTimeout by event, nous en sortons et créons un événement personnalisé appelé timer. Nous pouvons le connecter à notre portail au lieu d'une technologie, c'est-à-dire 0,5. Donc, chaque 2,5ème cette fois va courir, va prendre en boucle. Maintenant, lorsque nous appuyons sur play, vous pouvez voir que notre chaîne d'impression Hello ne fonctionne que tous les 2,5 parce que c' est ce minuteur qui contrôle notre sortie de sortie. Nous allons maintenant passer à notre prochain nœud. Nous allons donc simplement sortir de l'éditeur d'avion. Et nous utiliserons la note « à faire une fois ». Maintenant, le D veut savoir ce qu'il dit. Il prend une entrée, exécute un code complet, puis s'il est exécuté à nouveau, il n'exécutera pas le code complet. Nous pouvons donc essayer ça. Si je supprime simplement ma note de portail, elle la connectera à notre minuterie que nous venons d'utiliser et la branchera à terminé. Nous devrions donc voir notre chaîne d'impression 1. Bonjour une fois et puis rien d'autre ne se passe. Je vais donc appuyer sur Play et voir ce qui se passe. Et même si je vais sur mon ThirdPersonCharacter ici, vous pouvez voir que mon temps passe, mais le D le bloque une fois. Maintenant, nous pouvons réinitialiser ce nœud do once. Si je prends la broche ici et que je la branche pour la réinitialiser, je peux la retirer et appuyer sur Play. Vous pouvez voir des hellos imprimés, mais ils ne sont plus imprimés. Si j'appuie sur un, vous pouvez voir qu'il est à nouveau imprimé, mais maintenant il l'a arrêté. Je devrais donc continuer à appuyer sur un pour continuer à ouvrir et à réinitialiser ce que je veux enneigé. Comme notre nœud de porte, il dispose d'une option de fermeture d'actions. Donc, si je prends cela et que nous appuyons sur Play, vous verrez que nous n'obtenons aucune chaîne d'impression tant que j'en appuie sur une, ce qui réinitialise ce nœud. Maintenant, si nous quittons l'éditeur de plan, nous allons passer au nœud suivant, qui est do n. Et n fait essentiellement la même chose que je veux être enneigé. Mais cela nous permet de contrôler combien de fois ce nœud s' exécutera avant de bloquer le code. Donc, si je supprime ceci, je branche le timer enter two ici et la sortie de notre chaîne d'impression et je dis, nous voulons que ce code s'exécute cinq fois, puis nous voulons qu'il s'arrête. Nous pouvons donc brancher le compteur dans notre chaîne d'impression ici, et cela affichera simplement le nombre de fois que cela est exécuté. Si on peut tirer, on appuie sur Play. Vous pouvez voir qu'il imprime les chiffres, mais une fois qu'il arrive à cinq, il est arrêté parce qu'ARRA le fait, un nœud bloque la sortie. Et nous pouvons également réinitialiser ce nœud. Donc, si je prends la broche de réinitialisation, que je la branche sur une, que je clique sur play, nous pouvons la réinitialiser, ou désolé, compter jusqu'à dix ou cinq, désolé, puis nous appuierons sur un et vous verrez que je peux la réinitialiser à nouveau. Nous allons maintenant revenir à notre ThirdPersonCharacter et examiner le nœud suivant, qui est le nœud flip-flop. Maintenant, en gros, juste au moment où il sera exécuté, nous exécuterons a. Ensuite, si ce nœud est à nouveau exécuté, il exécutera B. Et il continuera simplement à passer entre ces deux broches chaque fois que vous l'exécuterez. Donc, si je connecte cela à notre événement d'entrée unique ici, et que j'imprime une chaîne à partir de a, nous pouvons le faire, je vais simplement le définir sur un copier-coller et le définir sur. Nous allons compiler et jouer. Vous pouvez voir que notre minuterie est toujours en cours d'exécution. Mais si j'appuie sur un et que vous voyez a, B, B, vous pouvez donc l'utiliser pour basculer entre deux parties de code. En passant, avec la bascule, vous ne l'utiliserez probablement pas lorsque vous serez un peu plus confiant avec le codage. Mais cela peut être pratique si vous créez un prototype rapide ou autre. Mais en général , vous devriez utiliser une branche, un nœud et un booléen. Et cela vous donnerait beaucoup plus de contrôle sur le fonctionnement de ce code. Et puis, enfin, nous avons nos nœuds latents. Et si vous vous souvenez, c'est la latente parce qu'ils ont ces petits symboles d'horloge et les coins. Maintenant que nous avons utilisé le nœud de retard auparavant, nous permet essentiellement maintenir le code pendant un certain temps. Donc, si nous devions supprimer ce code avec delete this, je le supprimerai également. Donc, lorsque nous appuyons sur un, nous pouvons avoir un délai et ensuite nous pouvons faire certaines choses. Donc je pourrais dire « appelez le saut d'eux ». Cela va réellement faire sauter notre personnage. Je vais régler le délai sur deux secondes. Maintenant, quand j'appuie sur play et que j'appuie 12 secondes plus tard, vous voyez que le personnage saute. Il existe maintenant un autre type de nœud. Donc si nous sortons hors jeu ici et revenons au ThirdPersonCharacter. Nous pouvons utiliser le re-trigger sont tous les deux retardés. Maintenant, la différence ici est que si je devais simplement continuer à appuyer sur un pendant que mon nœud de retard rebours que la durée, ce nœud ignorerait simplement l'entrée et cela compterait deux et puis sauter courrait. Désormais, un re-trigger ou un delay continuera de se réinitialiser chaque fois qu'il reçoit une entrée. Donc, si j'utilise le mot délai de déclenchement au lieu du nœud de retard, elle et moi appuyons sur Play et je commence à appuyer sur un. Vous avez vu que mes carottes ne sautent pas même après deux secondes parce que je continue de réinitialiser ce minuteur. Si j'arrête d'appuyer dessus, il attendra deux secondes et notre personnage sautera. Maintenant, il y a une dernière note que je voulais vous montrer, c'est le délai jusqu'au prochain nœud de tick. Donc, si je fais glisser ceci vers le haut ici, vous pouvez voir qu'il s' agit également d'un nœud latent, et que ce n'est que des blocs de code pour une image ou que le code pèse une image avant que le pinna terminé ne s'exécute. Donc si nous devions l'utiliser avec celui-ci et que je vais sauter la fonction ici, vous ne remarquerez aucune différence car j'appuie sur un, il semblera que c'est instantané, mais il attend en fait une image avant qu'il indique à la fonction de saut de fonctionner. Maintenant, cela peut parfois être utilisé dans les plans, vous devrez peut-être attendre un cadre avant une variable soit définie ou quelque chose comme ça. Ce nœud peut donc être utile pour ce genre de choses. C'est tout pour notre leçon sur les nœuds utilitaires, nous utiliserons à nouveau la plupart d'entre eux dans les prochaines leçons, afin que vous puissiez vous familiariser avec eux. 24. Les bases (exemple de jeu): Salut tout le monde. Dans cette leçon, nous allons examiner le plan de l'instance de jeu. Désormais, le plan d'instance de jeu est créé au premier démarrage du jeu et y reste jusqu'à ce que nous le fermions. Et contrairement aux autres plans, si nous changeons de niveau, notre instance de jeu n'est pas détruite. Il est permanent tant que nous gérons le jeu. Cela en fait un plan très utile pour stocker les informations que vous devez transférer à d'autres niveaux. Par exemple, vous pouvez avoir des variables que vous souhaitez transférer depuis le niveau de votre menu principal vers votre monde de jeu. Eh bien, vous pouvez utiliser une instance de jeu pour cela. Pour commencer, nous allons créer un nouveau plan. Et ce plan va faire passer notre personnage à un niveau différent. cliquons donc avec le bouton droit de la souris, allons Classe de plan, créez un acteur. Je vais appeler téléportation de mon score de soulignement DP . Téléportation. Allons-y. Et nous allons ouvrir ça. Je vais juste faire glisser le mien jusqu'à la barre supérieure. Maintenant, ce sera le plan qui enverra notre joueur à un niveau différent. Nous allons donc ajouter une collision de boîtes juste pour savoir quand ils entrent dans cet acteur, je vais juste déplacer la mienne un peu comme ça. Ensuite, nous nous dirigerons vers le graphique d'événements. Et nous allons simplement utiliser le nœud de superposition de début d'acteur. Donc, il supprimera ces deux-là et nous ferons glisser l' acteur à partir d'un autre acteur et nous allons simplement coûter au personnage pour nous assurer que nous n'exécutons ce code que si l' acteur qui se chevauche est un personnage, alors nous allons utiliser les notes de niveau ouvert. Nous allons donc faire glisser et rechercher le niveau ouvert, et nous allons utiliser Open level par son nom. Et cela nous permet simplement de dire au moteur d'ouvrir un nouveau niveau. Et cela ouvrira le niveau pour lequel nous avons défini le nom. Je vais juste faire glisser et créer des variables. Nous allons donc promouvoir la variable et la laisser comme nom de niveau et comme type de variable de nom comme celui-ci. Je vais également prendre instance modifiable, puis nous allons compiler. Ensuite, nous devons créer un nouveau niveau vers lequel nous allons nous téléporter. Nous allons donc nous diriger vers le navigateur de contenu, puis vers les cartes à la troisième personne. Et ici, nous avons nos cartes à la troisième personne, nous allons donc simplement les dupliquer. Maintenant. Je peux cliquer avec le bouton droit de la souris et cliquer sur Duplicate Mais ce que nous pouvons faire, c'est simplement glisser sur le dossier des cartes. Vous pouvez voir que nous pouvons faire une copie ici. Maintenant, créez-nous une copie de notre carte actuelle. Nous allons maintenant ouvrir notre trait de soulignement à la troisième personne sur la carte. Je vais juste sélectionner Save actors. Maintenant, nous sommes sur cette deuxième carte et je vais simplement supprimer quelques éléments afin de pouvoir faire la différence entre les deux. Donc nous sélectionnons simplement toutes ces choses ici, supprimez-les. Nous savons donc que lorsque nous entrons sur cette carte, nous sommes sur notre deuxième carte. Revenons maintenant à notre carte à la troisième personne. Nous allons donc double-cliquer pour l'ouvrir. Je vais sélectionner, Enregistrer, le sélectionner. Maintenant, nous sommes de retour sur notre carte à la première personne. Et nous allons ajouter notre téléportation à cette carte. Nous allons donc aller sur les plans et en faire glisser un. Je vais agrandir un peu le mien. Nous pouvons également accéder à notre plan de téléportation, sélectionner la boîte et simplement désactiver le mode caché dans jeu afin de voir la collision comme ça. Et maintenant, nous devons utiliser la variable que nous avons créée lors notre téléportation pour lui indiquer niveau vers lequel nous voulons nous téléporter. Nous allons donc aller dans Détails et vous verrez que nous avons le nom de notre niveau ici. Ce que nous allons faire, c'est aller sur maps, cliquer avec le bouton droit de la souris ou souligner à la troisième personne deux, faire Renommer, puis contrôler C, et cliquer ailleurs. Ensuite, nous allons coller ce nom dans le nom de notre niveau ici. Ensuite, nous pourrons le tester. Donc je vais appuyer sur Play ou courir dans la boîte. Et vous pouvez voir que nous sommes maintenant transportés vers notre nouveau deuxième niveau. Maintenant, lorsque nous ouvrons un nouveau niveau, tout le niveau précédent est détruit. Nos modes de jeu de contrôleur de personnage sont tous détruits. Et quand le nouveau niveau est ouvert, notre personnage est en train d'apparaître. Une nouvelle manette et un nouveau mode de jeu sont également créés pour notre nouveau niveau. Cela signifie que toutes les variables que vous aviez définies dans votre personnage avant que nous ne transportions dans ce nouveau niveau, toutes seront perdues et nous recommencerons avec un nouveau personnage. Et pour vous donner un exemple de ce qui sortira de l'éditeur d'avion, dirigez-vous vers nos plans plutôt que le personnage à la troisième personne. Je vais juste créer un nouveau booléen. Nous l'appellerons exemple, et nous utiliserons un nœud tick. Je vais donc simplement cliquer avec le bouton droit de la souris et rechercher une technologie. Sur la technologie, nous allons simplement afficher si notre variable d'exemple est vraie ou non. Nous utilisons donc une chaîne d'impression. Nous allons connecter ça jusqu'ici, comme ça. Et maintenant je vais ajouter une entrée, nous allons donc appeler cet événement input un. Donc, lorsque nous appuyons sur un, je veux définir cette variable sur true. Nous allons donc le faire , puis nous allons compiler. Maintenant, lorsque je clique sur Jouer, vous pouvez voir que nous sommes actuellement sur notre première carte à la troisième personne. Si j'appuie sur un, vous pouvez voir que notre variable devient vraie. Mais si je tombe dans notre boîte et que nous passons à un nouveau niveau, vous pouvez voir que cette variable passe maintenant à false parce que nous avons un nouveau plan de personnage. Nous pouvons maintenant utiliser notre instance de jeu pour enregistrer cette variable pour nous et la reporter au niveau suivant. Ce que nous allons faire, c'est sortir. Nous allons créer une nouvelle instance de Blueprint. Nous allons cliquer avec le bouton droit de la souris et nous allons accéder aux plans. Nous voulons un cours de Blueprint. Et dans les options ici, il n'y a pas de classe d'instance de jeu. Nous allons donc aller dans toutes les classes et rechercher par exemple. Ensuite, nous allons sélectionner l'instance de jeu ici et cliquer sur Sélectionner. Cela nous a permis de créer un nouveau plan d'instance de jeu. Nous allons donc appeler cet exemple de soulignement BP, instance de jeu comme ça. Alors on peut ouvrir ça. Et vous pouvez voir qu'il ne s' agit que d'un plan de base. Il n'a même pas de variables intégrées. Vous pouvez voir si je clique sur les valeurs par défaut de la classe, il n'y a pas de variables ici. s'agit simplement d'un plan assez simple que nous pouvons utiliser pour stocker des variables. Nous pouvons également créer des fonctions, des macros comme d'autres plans. Il y a quelques fonctions doubles de remplacement ici, donc vous pouvez remplacer l'init, qui est essentiellement la fonction qui s' exécutera lorsque nous créerons notre instance de jeu pour la première fois, nous avons une erreur réseau, dont je ne parlerai pas dans cette leçon. Nous avons arrêté et cela fonctionnera lorsque nous aurons terminé notre jeu. Ensuite, nous avons une erreur de voyage. Et cela fonctionnera si nous avons un problème de transport vers un nouveau niveau. Pour l'instant, nous voulons que notre instance de jeu stocke une variable pour nous. Nous allons donc créer cette variable. Je vais juste reprendre cet exemple. Et nous allons compiler. Avant d' ouvrir notre nouveau niveau, nous devons définir cette variable. Il ira donc à notre ThirdPersonCharacter ici et nous créerons une nouvelle fonction. Je vais juste appeler cette instance de gain de mise à jour , comme ça. qui est intéressant avec les instances de jeu, c'est que vous pouvez y accéder à peu près à partir de n'importe quel plan, de la même manière que le mode de jeu. Nous pouvons donc simplement cliquer avec le bouton droit de la souris sur Game Instance Et vous pouvez voir que nous pouvons utiliser l'instance de jeu get et cela renvoie simplement une référence à notre instance de jeu. Maintenant que nous avons créé notre propre plan d'instance de jeu, nous devons le lancer pour pouvoir accéder à ses variables. Vous pouvez également configurer une interface Blueprint si vous le souhaitez. Mais nous allons simplement nous en tenir au casting. Je vais donc utiliser un coût pour l'exemple, puis nous voulons un exemple, instance de jeu comme ça. Nous allons maintenant déplacer ces nœuds vers le bas et les connecter à l' entrée de notre fonction. Ensuite, nous voulons utiliser la variable d' exemple que nous avons suffisamment créée. Nous allons donc donner l'exemple, connecter cela ici. Ensuite, nous récupérerons notre variable d'exemple dans notre personnage, et nous la brancherons à set. Le nœud set sera compilé. Nous devons maintenant exécuter cette fonction avant d' ouvrir notre nouveau niveau. Nous allons donc nous téléporter et nous hériterons de cette fonction. Nous allons donc devoir modifier notre note de coûts pour une troisième personne. Nous allons donc traîner et faire des coûts. Troisièmement, nous voulons le ThirdPersonCharacter parce que c'est le plan qui a notre nouvelle fonction qui va faire glisser et rechercher une instance de jeu de mise à jour. Et cela définira notre variable dans notre instance de jeu sur ce qu' elle provient de notre personnage. Ensuite, nous connecterons cela à notre niveau ouvert comme ça. Maintenant, lorsque notre personnage apparaît, nous avons besoin pour lire l'exemple de variable que nous avons créé dans l' exemple d'instance de jeu. Donc, pour ce faire, qui peut aller au graphique d'événement, va créer un début de planètes. Donc, cela recommencera à jouer, ce qui peut obtenir l' instance ou désolé, obtenir l'instance de jeu. Et cela nous donnera accès au plan, coûtera à l' exemple d'instance de jeu. Ensuite, nous obtiendrons sa variable d'exemple. Nous allons donc faire glisser et obtenir un exemple. Et nous l'utiliserons pour définir notre variable d'exemple de caractères. Nous allons donc régler ça comme ça. Et nous allons l'exécuter sur la place Begin. Ainsi, chaque fois que notre personnage l'affiche, lisez la variable d' exemple dans notre instance de jeu, puis définissez-la sur sa variable d'exemple. Maintenant, il y a encore quelques choses que nous devons faire avant de pouvoir tester cela. La première chose est que nous n'avons pas demandé au moteur d'utiliser notre nouvel exemple d'instance de jeu. Maintenant, nous ne faisons pas cela en mode jeu comme dans la plupart des cas, nous le faisons dans les paramètres de notre projet. Nous allons donc devoir modifier les paramètres du projet. Et nous allons rechercher une instance de jeu. Et vous voulez la classe d' instance de jeu ici, et nous allons la remplacer par l'exemple d'instance de jeu BP. Le moteur sait maintenant qu'il doit utiliser cette instance de jeu. Ensuite, nous allons revenir à notre deuxième carte que nous avons créée. Je vais donc l'ouvrir et nous allons cliquer sur Enregistrer ici. Et ici, je vais également ajouter notre plan de téléportation ici. Je vais donc simplement le faire glisser, le mettre à l'échelle pour qu' il soit un peu plus grand. J'ajoute cela juste pour que nous puissions faire des allers-retours entre nos deux niveaux. Nous devons définir un nom de niveau. Ce sera donc le nom de notre première carte, qui est carte à la troisième personne. Je vais juste cliquer avec le bouton droit de la souris sur Sélectionner, Renommer , copier ceci, puis le coller dans notre variable de niveau ici comme ça. Ensuite, nous allons revenir à notre première carte à la troisième personne. Nous allons donc simplement l'ouvrir , puis nous allons cliquer sur Sélectionner, Enregistrer, sélectionnez-le. Ensuite, nous sommes prêts à tester cela. Je vais donc appuyer sur Play. Vous pouvez voir que la valeur est actuellement fausse parce que nous venons de commencer et que je n'ai pas défini la valeur. Mais si j'appuie sur une, cela devient vrai. Maintenant, si nous sommes allés dans la téléportation, cela restera vrai même une fois que nous serons dans notre deuxième niveau. Et c'est parce que notre personnage est en train de lire cette variable dans notre exemple d' instance de jeu, puis de la configurer. Et peu importe le nombre de fois que nous passons d'un niveau à l'autre, il lira toujours cette valeur car notre instance de jeu n'est pas détruite contrairement à notre personnage et à notre manette. Bien entendu, il s'agit d'un exemple assez simple, qui consiste à stocker une variable dans notre instance de jeu. Ensuite, en lisant le personnage, vous pouvez stocker autant de variables que vous le souhaitez dans le plan de votre instance de jeu. Et vous pouvez accéder à ces variables à partir de n'importe quel plan. Nous avons donc utilisé notre ThirdPersonCharacter, mais si nous le voulions, nous pouvions accéder notre instance de jeu dans la téléportation. Nous pouvons donc obtenir une instance de jeu. Nous pouvons également accéder à notre instance de jeu ici. C'est donc tout pour cette leçon. J'espère que vous comprenez maintenant les utilisations de l'instance de jeu et comment vous pouvez l'utiliser dans vos futurs projets. 25. Leçons supplémentaires (traces): Salut tout le monde. Dans cette leçon, nous allons examiner les traces. Les traces nous permettent de prendre un lieu de départ et d' arrivée, puis de vérifier ce qui se trouve entre ces deux lieux. Pour commencer, nous allons créer quelques exemples de plans. Je vais simplement cliquer avec le bouton droit de la souris et créer une nouvelle classe de plan. Ce sera un acteur, je vais juste appeler ce tracé de tension artérielle cubique. Nous allons ouvrir ça. Et je vais juste faire glisser l'onglet vers le haut de la paire. Et nous allons ajouter un nouveau composant. Je vais juste ajouter un composant cube qui compilera cela. Et nous allons accéder au graphique d'événements. Nous allons donc configurer ce cube de façon à ce qu'il trace un autre cube à chaque image. Il commencera donc par supprimer ces nœuds de début de jeu et l'acteur commencera à se chevaucher. En fait, utilisez le nœud tech et nous allons créer une nouvelle variable et nous appellerons simplement ce cube. Et je vais définir son type sur Trace de soulignement BP, Trace Cube. Et nous allons ensuite compiler dans le panneau Détails qui va prendre instance modifiable comme ça. Et nous allons compiler à nouveau. Ensuite, nous allons sortir et nous récupérerons notre autre cube. Nous voulons vérifier qu'il est défini, donc nous allons utiliser un nœud israélien juste pour nous assurer qu'il n'y a pas d'erreur. Et puis à partir de r est valide, nous allons faire glisser et nous rechercherons trace. Maintenant, si nous faisons défiler la page vers le haut, vous pouvez voir que nous avons de nombreux nœuds de trace différents. Ils sont tous en collision ici. Nous allons commencer par un simple tracé de ligne par canal. Je vais donc créer ça. Maintenant. Une trace linéaire est essentiellement une ligne d'un seul pixel qui va du début à la fin, en vérifiant si elle touche quelque chose en cours de route. Maintenant, il existe quelques autres options sur ce nœud, mais nous allons d' abord configurer notre exemple , puis je vais les expliquer. Ce que nous allons faire, c' est sortir de notre autre cube. Nous voulons nous rendre sur place. Et nous allons le brancher à l'emplacement final. Ensuite, pour l'emplacement de départ, nous allons simplement utiliser l'emplacement actuel de nos cubes. Alors, obtenez l'emplacement de l'acteur. Notre trace commencera donc à cet emplacement de conservation et se dirigera vers l'autre emplacement du cube. Quand je dis voyage, traçage se fait dans une image, ce n'est pas comme s'il se déplaçait lentement. Tout se passe dans une image et vérifie simplement s' il y a un objet entre les emplacements de début et de fin ? Je vais également activer le Draw Debug ici. Je vais le régler sur une image, ce qui nous permet essentiellement de voir la trace dans notre jeu, généralement les traces sont invisibles, mais cette option nous permet de voir une trace pendant que nous jouons dans le jeu. Une image signifie que le tracé ne sera visible que pour une seule image. La durée signifie que la trace sera visible quelle que soit la durée définie pour le tiroir, elle est donc de cinq secondes par défaut. Et puis persistant signifie que la trace sera visible pour toujours. Comme nous dessinons notre trace à chaque image, nous pouvons simplement le définir pour une image. Maintenant, nous allons simplement compiler ce plan et passer à notre niveau. Je vais juste le faire glisser dans un cube. Et nous allons faire glisser un second cube. Et je vais, avec mon second cube sélectionné, je vais simplement utiliser l'autre option Cube ici dans les détails. Et nous allons sélectionner R d'un cube. Et je vais juste les déplacer tous les deux vers le haut pour que nous puissions les voir un peu mieux quand nous jouerons. Ainsi, lorsque j'appuie sur lecture, vous pouvez voir que nous avons cette ligne de pixel unique qui va de ce cube au cube que nous avons sélectionné. Si j'appuie sur F1 pour passer en mode filaire, vous pouvez voir que le tracé commence au centre de notre paire de clés et est lu. Et une fois qu'il touche l'autre cube, nous obtenons ce carré rouge et la ligne passe au vert. Cela signifie essentiellement que jusqu'à ce carré rouge, la trace n'a rien touché. Ensuite, le carré rouge indique qu'il a touché quelque chose, puis le voyant devient vert parce que c'est le cas, les traceurs ont touché quelque chose au-delà de ce point. Maintenant, vous vous demandez peut-être pourquoi sont tracés et frappés le cube d'où il provient. Et si nous sortons du mode éditeur de plan et revenons à notre cube de trace, vous pouvez voir qu'il existe en fait une option appelée ignore self sur le tracé linéaire. Cela signifie que la trace ignorera simplement l'acteur qui a fait la trace. Puisque nous sommes dans notre cube, si je décoche cette case et que je compile puis que je clique sur Play, vous pouvez voir que la ligne est déjà verte. Et si nous touchons F1, vous pouvez voir que notre trace atteint notre cube dès qu'elle commence et que le reste de la ligne passe au vert. Tu vois, ça n' atteint pas notre deuxième cube. C'est parce qu'il s' agit d'une trace sur une seule ligne. Il va heurter un objet et ensuite il ne se soucie plus du reste. Pour en revenir à notre suivi de trace, il y a quelques autres options pour que nous puissions définir les acteurs à ignorer. Cela nous permet essentiellement de définir simplement les acteurs que nous voulons notre ligne tracée ignore complètement. Donc, si je devais faire glisser et faire un make array, cela nous permettrait simplement d' ajouter des acteurs individuels à un tableau, puis de l'ajouter à notre trace de ligne. Donc, si je devais brancher mon autre Cubain ici et le brancher dans le tableau, je vais cocher ignore self parce que nous voulons que notre trace ignore le cube qui fait la trace compile quand j'appuie sur play, vous pouvez voir si j'appuie sur F1 ou si trace ne touche plus rien parce que nous lui avons dit que nous ne le voulons pas ou désolé, nous voulons qu'il ignore notre deuxième cube. Maintenant, revenons à notre plan de cube de trace, il existe une autre option appelée canal de trace. Les canaux de trace sont maintenant un peu comme des couches sur lesquelles nous pouvons utiliser nos traces. La raison pour laquelle nous avons ceci est que vous pouvez avoir un objet dont vous voulez bloquer un type de trace mais pas un autre. Donc, pour l'instant, vous pouvez voir que nous l' avons réglé sur visibilité. Il s'agit d'un canal de traçage intégré au moteur. Si je vais sur mon cube dans le niveau et que je le sélectionne, je vais sélectionner le composant cube. Je vais juste l' agrandir un peu pour que nous puissions voir ce que je vais faire défiler jusqu'à la catégorie collision. Sous Préréglages de collision, vous pouvez voir qu'il est actuellement configuré pour bloquer toutes les dynamiques. Cliquez sur le menu déroulant ici. Vous pouvez voir que ces options sont grisées. C'est parce que nous avons sélectionné un préréglage. Donc, si nous cliquons sur le menu déroulant ici et que nous cliquons sur Personnalisé, cela nous permettra de personnaliser les paramètres. Vous pouvez donc voir que pour les réponses de suivi, nous avons une visibilité et une caméra. Maintenant, si je règle notre paire de clés pour ignorer le canal de trace de visibilité, et que je retourne à mon cube. Je vais juste déconnecter l'autre cube ici de notre Make Array. Alors maintenant je vais tracer, vais frapper l'autre cube. Je vais cliquer sur Compiler et sur Play. Vous pouvez voir que si j'appuie sur F1, la trace n' atteint toujours pas le cube, il faut donc revenir en arrière avec notre cube sélectionné ici. Sélectionnez notre cube et réglez-le pour bloquer à nouveau la visibilité, puis appuyez sur Jouer. Vous voyez qu'il est en train de toucher ce cube. Et c'est parce que nous demandons à ce maillage cubique ignorer ou de bloquer ce type de trace. Maintenant, les traces sont utilisées pour toutes sortes de choses dans le développement de jeux. Ils sont utilisés pour l'interaction afin de déterminer ce que le personnage regarde. Vous pouvez les utiliser pour des éléments tels que systèmes d' empreintes afin de détecter type de sol sur lequel se trouvent les personnages. Vous pouvez les utiliser comme armes. Alors appuyez sur Scanner les armes, vous utilisez des traces. Donc, n'importe quel jeu où il n'y a pas de temps de trajet de balle qui utilise généralement des traces pour les calculs de balle. Les traces ont donc une très grande variété d'utilisations dans le développement de jeux. Mais ce qui est important à propos des traces, nous pouvons obtenir des informations sur l'objet qu'elles ont touché. Donc, si je quitte notre éditeur de plan ici, nous revenons à notre cube de trace. Vous pouvez voir que nous avons quelques sorties. Maintenant, si je m'éloigne de ma tenue, on peut la casser. Et c'est parce que c'est en fait juste une structure. Vous pouvez voir la structure des résultats des hanches. Nous pouvons donc rompre ça. Et cela nous donne ce nœud ici avec toutes les informations sur quel objet, la tête de trace. Maintenant, nous avons également une valeur renvoyée ici, et cela indique simplement si la trace atteint réellement quelque chose ou non. Donc, généralement, vous voudrez probablement faire et si nœud ici et obtenir informations sur l'objet uniquement si la trace a réellement atteint quelque chose. Je vais maintenant passer en revue certaines de ces variables. Je ne les couvrirai pas tous parce qu'il y en a pas mal, mais je vais passer en revue les plus couramment utilisés en haut. Ici, nous avons un blocage ici. Cela fait essentiellement la même chose qu'une valeur de retour. Il indique si le tracé de la ligne a touché quelque chose, et c'est une valeur booléenne. Ensuite, en descendant, on a de la distance. Maintenant, c'est à quelle distance de l'étoile le trait touche quelque chose. Donc, si la distance entre, disons, début et la fin était de 500 centimètres et le tracé heurtait quelque chose à 100 centimètres du début, alors cette valeur de distance serait de 100. Ensuite, nous avons l' emplacement et le point d'impact. Maintenant, pour un tracé linéaire, elles auront exactement la même valeur, mais elles seront différentes pour certains de nos autres nœuds de trace que nous examinerons dans un instant. Ensuite, nous avons l'une des épingles les plus importantes, qui est notre acteur à succès. Cela nous donne une référence à l' acteur ou à la trace de ligne qui frappe. Et c'est très utile pour des choses comme si vous créez un pistolet, ce tracé de ligne Pfizer ou un système d'interaction, vous voulez savoir quel acteur le trait a réellement touché et utiliser l'épingle Hit Actor voici comment vous y prendriez. Nous avons également accès au composant hanche. Ce sera donc le composant à l'intérieur de l'acteur que nous toucherons. Ainsi, par exemple, notre cube, nous frapperons le composant cube. Ce composant de hit serait donc une référence au cube à l'intérieur de notre acteur de cube. Ces épingles fonctionnent comme nous avons déjà utilisé épinglettes d' acteur et des stylos composants. Nous pourrions sortir de là, nous pourrions utiliser un coût pour déterminer s'il s'agit par exemple de Cast to ThirdPersonCharacter. Et si la trace touchait un personnage à la troisième personne, nous serions en mesure d'accéder à ces informations l'aide de nos nœuds de coûts. Nous pouvons également utiliser nos nœuds d'interface, et nous pouvons obtenir des informations auprès de l'acteur. Nous pourrions donc faire quelque chose comme GetLocation. Et nous pouvons utiliser cet acte de broche, comme nous l'avons fait avec les types dépendants d'actes précédents . Nous avons également accès au nom de l' os touché par la trace. Donc, si je trace touche un maillage squelettique, il s'agit d'un maillage de masque animé qui a un squelette. Cela renverra le nom d'os réel de la partie de collision touchée par la trace. Vous pouvez donc les utiliser pour accéder aux noms des os. Et puis ici, nous avons notre trace, notre début et notre traçage. Et ce serait exactement la même chose que nos entrées ici pour le début et la fin. présent, nous n'avons examiné que le tracé de la ligne par canal. Il existe maintenant un autre nœud de trace de ligne. Donc, si nous recherchons une trace couchée, vous pouvez voir que nous avons également une trace linéaire par profil et une trace d'alignement pour les objets également. Donc, si je crée une trace de ligne pour les objets, il s' agit essentiellement du même nœud. Cela fait la même chose que nous avons ici. Nous avons le début et la fin. Nous avons les mêmes paramètres, mais au lieu d'un canal de trace, nous avons cette entrée de tableau qui est un type d'objet. Si je fais glisser d' ici et que je les utilise créez un tableau qui nous permet définir les valeurs qui seront dans ce tableau d'entrée. Vous pouvez donc voir que par défaut a un monde statique ici. Je clique sur le menu déroulant. Vous pouvez voir qu'il nous donne certains types d'objets. Maintenant, si nous revenons à notre cube avec notre cube sélectionné ici, et que nous allons au composant cube. Cela fait référence au type d'objet répertorié ici. Vous pouvez donc voir que c'est réglé sur world to dynamic, qui signifie que ce cube est maintenu uniquement par des traces qui ont une entrée de dynamique du monde. Cette trace linéaire ici avec la statique mondiale ignorerait complètement ce cube. C'est donc à cela que font référence les types d' objets en entrée. Il s'agit de ce type d'objet dans nos préréglages de collision. Nous pourrions rapidement le brancher pour voir si je le branche simplement dans mon nœud valide, je vais supprimer notre nœud de trace de ligne précédent. Nous allons le brancher à notre étoile et écouter notre fin. Et nous allons connecter ça. Nous pouvons laisser ça pour l'instant. Nous avons juste défini le type de débogage Draw deux pour qu'une image soit compilée, puis nous allons appuyer sur Play. Vous pouvez voir que si j'appuie sur F1, cette trace ignore complètement le cube. Mais si nous revenons à la trace, au cube de trace et que nous changeons cela en dynamique mondiale. Appuyez sur Compiler, puis sur Play. Vous pouvez voir que maintenant cette trace touche un cube parce qu' elle touche ce Q parce que c'est le même type d'objet. Et ce qui est cool avec ça, c'est que nous pouvons définir plusieurs types. Nous pouvons donc simplement ajouter un nouveau stylo et nous pouvons également ajouter du statique sauvage. Nous pourrions ajouter une autre contribution. Nous pouvons définir ce paramètre sur ****, par exemple. Nous pouvons en ajouter autant que nous voulons que cette trace soit branchée. Maintenant, la dernière note de traçage de ligne que nous allons examiner est la trace de ligne par profils. Donc, si je recherche le tracé de ligne par profil, les entrées sont les mêmes que celles de nos nœuds précédents, mais nous avons ce nom de profil. Cela fait référence aux réponses de l'objet que l'objet que nous essayons de toucher. Revenons donc à notre carte ici, sélectionnons notre cube, et dans les paramètres de collision, vous pouvez voir que nous avons des réponses d'objets. Maintenant, je vais utiliser **** comme exemple. Vous pouvez donc voir que **** est réglé sur bloquer. Donc, si je retourne à mon traceur, je vais définir le nom du profil pour le connecter comme nous l'avons fait auparavant. Connectez-vous pour obtenir une position active et finissez par accéder à nos autres cubes, emplacement de l"acteur. Nous allons activer le Draw Debug Type deux pour une image. Nous allons cliquer sur Compiler. Et quand nous appuyons sur play, vous pouvez voir que notre trace de ligne atteint celle d'un cube là-bas. Mais si nous acceptons et que je sélectionne le cube et que nous sélectionnons notre composant de cube et que nous définissons notre objet **** pour qu'il soit ignoré. Ensuite, j'ai appuyé sur Play. Vous pouvez voir que notre trace n'atteint plus le cube parce que notre trace est effectuée dans la réponse de l'objet de ce profil. Et notre cube ne bloque plus cette trace. Ensuite, nous allons examiner les traces multiples. Maintenant, si vous vous souvenez, lorsque notre trace touche quelque chose, elle ne se soucie plus de rien d'autre sur son chemin, elle passe au vert et ne touche aucun autre objet. Mais avec multi-trace car cela nous permet de toucher plusieurs objets en une seule trace. Donc, si nous revenons à notre cube de trace, je vais maintenant supprimer cette note de trace que nous utilisons et je vais payer le loyer. Si je recherche un tracé linéaire, vous pouvez voir que nous avons versions de traçage multiligne des nœuds que nous avons examinés. Nous pouvons donc effectuer un traçage multiligne par canal. Et vous pouvez voir que toutes les entrées sont identiques, mais au lieu d'une seule ici, nous avons un tableau de sorties. Et cela fonctionne comme un tableau habituel. Nous pouvons dire obtenir le résultat getter à un certain index. Nous pouvons donc utiliser l' entrée du nœud get , un index auquel nous voulons accéder à partir du tableau et la sortie sont des résultats d'accès. Donc, si nous sortons de notre nœud get, nous faisons une pause. Vous pouvez voir que nous avons la même note de rupture que nous avions auparavant. Et maintenant, nous accédons au premier résultat de succès de notre gamme de tenues. Maintenant, nous pouvons également parcourir ces résultats en boucle. Nous pouvons donc utiliser un nœud de boucle a pour chaque note de boucle, et si vous vous en souvenez, cela parcourra tous les résultats ou toutes les entrées de notre tableau. Et cela nous donnera accès à chacun eux à l'aide de nos éléments de tableau. Encore une fois, nous pouvons utiliser un nœud de résultat de kit de frein, accéder à toutes ces informations sur chacun des objets que nos tracés de ligne ont heurtés. Maintenant, en plus d'avoir plusieurs sorties pour nos résultats de hanche, la trace multiligne fonctionne exactement de la même manière qu' une trace de ligne normale par nœud de canal, nous fournissons un emplacement de départ et lieu final. Nous pouvons dire un canal sur lequel nous voulons effectuer le traçage. Il est donc actuellement défini sur une certaine visibilité. Nous pouvons définir si nous pouvons voir la trace ou non. Je vais juste régler le mien pour, pour une image. Donc maintenant, si nous compilons et que nous appuyons sur Play, vous pouvez voir que notre trace fonctionne. Mais ce qui est cool avec les traces multilignes, c'est que nous pouvons avoir plusieurs accès. Pour ce faire, je vais faire glisser un nouveau cube ici. Je vais configurer mon premier cube pour qu'il trace sur celui-ci à la place. Maintenant, si je clique sur play, vous pouvez voir que nous sommes toujours en mode filaire avec F1. Vous pouvez voir que je ne touche toujours qu'un seul de nos cubes. Si je reviens à notre code et que je peux réellement faire glisser des tenues, je vais faire en sorte que length supprimera cette trace, le nœud de boucle pour l'instant. Cela nous indiquera réellement combien de résultats se trouvent dans notre tableau de résultats d'accès. Donc, si nous compilons et que nous appuyons sur Play, vous verrez qu'il ne touche qu' un seul objet même s' il suit ce cube. La raison en est que ce cube bloque toujours la trace de visibilité, qui signifie que la trace ne peut pas traverser et heurter d'autres objets. Pour cela, nous devons définir notre cube pour qu'il se chevauche réellement. La trace. Nous passons donc à la visibilité ici avec notre cube sélectionné, et je vais le définir pour qu'il se chevauche. Maintenant, lorsque nous appuyons sur Lecture, vous pouvez voir que nous touchons deux objets. Si nous entrons dans notre structure filaire, vous pouvez voir que nous touchons ce premier cube, puis nous voyons notre deuxième cube. C'est donc quelque chose à garder à l'esprit si vous travaillez avec des traces multilignes. Et l'avenir, c'est si vous voulez que la trace puisse traverser un objet tout en percutant d'autres objets. L'objet doit être défini pour se chevaucher au lieu de le bloquer. S'il est défini sur Bloquer, tous les objets la trace après cet objet ne seront pas affichés dans nos résultats partir de notre nœud de trace multiligne. Il existe maintenant d'autres types de nœuds de trace. Jusqu'à présent, nous n'avons utilisé que le tracé linéaire. Si nous cliquons avec le bouton droit de la souris et que nous recherchons trace, nous allons Vous pouvez voir que nous avons une boîte de suivi par canal, multidiffusion, trace par canal. Nous avons la trace de la sphère par canal. Et essentiellement, ils feront la même chose que notre chaîne. Trace linéaire par canal, trace linéaire par profil et ligne tracée par des objets, des nœuds. Mais au lieu d' une seule ligne de pixel nous donne une forme. Donc, si nous devions sélectionner, par exemple, la trace carrée par canal, vous pouvez voir que nous avons le même type d'entrées. La seule différence, c'est que nous avons un rayon. C'est la taille de la sphère qui est traçable bit. Donc, si je supprime notre traceur multiligne, nous pouvons agir sur notre canal de trace de sphère. Je vais juste connecter ça à la fin, au début et à la fin. Et nous allons définir le rayon sur dix. C'est la taille de la sphère qui ira du début à la fin. Nous allons donc définir le bucket draw D deux pour une image qui sera compilé, puis nous allons appuyer sur Play. Vous pouvez voir qu' au lieu d'une seule ligne, il s'agit d'une trace en forme de sphère. Cela vous permet simplement de tracer une plus grande surface. Supposons que vous ne vouliez pas qu'une balle une taille d'un pixel quand un pistolet la tire, peut-être que vous vouliez qu'il s' agisse d'une sphère 55 centimètres de diamètre, alors vous pourriez le faire à la place. Maintenant, comme notre trace de ligne, il existe une version multiple de ce nœud. Donc, si je clique avec le bouton droit de la souris et que je recherche trace de sphère, vous pouvez voir que nous avons une trace multi-scalaire par canal, maltaise, une trace équitable par profil et trace multi-sphères pour les objets. Nous pouvons donc créer une version multi-sphères de ce nœud. Vous pouvez voir que c'est exactement la même chose, mais nous avons notre entrée radius et nous pouvons générer plusieurs résultats de hanche. Maintenant, je ne vais pas passer en revue tous les nœuds de trace parce que la plupart d' entre eux sont identiques. Ce sont juste des versions différentes pour le multi-trace , puis les différents tracés par types et ensuite les différentes formes. Mais si vous voulez les trouver, vous pouvez toujours rechercher trace et rechercher par exemple, boîte qui vous donnera accès à l'ensemble de la boîte. Tracez les meilleurs ici avec une seule trace, puis vous obtenez les multitraces. Vous pouvez également rechercher une sphère. Cela vous donne accès à toutes les traces de la sphère. Vous pouvez rechercher une ligne, une trace, une ligne. Cela vous donnera accès à d'autres traces de ligne. Enfin, vous avez la capsule. Ils vous donneront accès à tous les types de traces de capsules. Enfin, j'ai dit que je vais vous indiquer la différence entre le point d'impact et l' emplacement de notre pause maintenant, donc si nous cliquons sur la flèche vers le bas ici et que nous l'ouvrons vers le haut. Maintenant, sur un tracé linéaire l'emplacement et point d' impact seront exactement les mêmes, mais avec une sphère, par exemple, le point d'impact et l' emplacement différent, le point d'impact sera est le point exact où la sphère touche la surface du cube. Donc, si vous imaginez juste sur le bord de la sphère où se trouvent les cases rouges, c'est le point d'impact. Le point même où la sphère chevauche la boîte. Alors que l'épingle de localisation ici est l'emplacement de cette sphère. Notre sphère, le centre de celle-ci, est donc en fait plus éloignée de la surface du cube. C'est donc la différence entre le point d'impact. C'est le point exact où la sphère se chevauche, le cube et l' emplacement est le centre du cube lorsque ce chevauchement se produit. Maintenant que c'est moins pour nos traces qu'à l'heure actuelle, nous allons cependant revenir à l'utilisation de traces dans certaines de nos futures leçons. 26. Leçons supplémentaires (tableaux de données): Salut tout le monde. Dans cette leçon, nous allons examiner les tableaux de données. Nous utilisons des tableaux de données pour stocker des informations que nous n'avons pas besoin de modifier pendant le jeu, mais nous pouvons récupérer ces informations à l'aide de plans. Par exemple, vous pouvez utiliser un tableau de données si vous créez un RPG ou un jeu de survie dans lequel vous avez des centaines, voire des milliers de types d' objets différents et que vous obtenir chacun de ces objets contiendra une sorte d'information qui ne changera pas réellement pendant le jeu, comme par exemple son nom, son objet, sa description et son poids. Ces valeurs peuvent ne pas changer en cours de jeu. Un tableau de données serait donc un bon moyen de stocker ces informations et de pouvoir ensuite les récupérer facilement dans le code. Commençons donc. Nous devons créer une nouvelle structure. Cela est dû au fait que les tableaux de données utilisent la structure pour déterminer les informations qu'ils peuvent arrêter. Nous allons donc cliquer avec le bouton droit de la souris et nous allons accéder aux plans, puis à la structure. Je vais nommer le mien S underscore et c'est la structure de l'exemple, struct. Nous allons ouvrir ça. Et si vous vous souvenez, nous avons déjà une leçon sur les structures. Donc, si vous ne l'avez pas vu, je vous recommande de vérifier. Mais nous allons simplement ajouter quelques nouvelles variables et leur donner des noms. Donc, le nom de notre premier article. Et nous allons définir ce type de variable texte. On va appeler le second, attends. Et nous allons régler ça sur un flotteur. Nous appellerons le prochain dommage. Et nous allons le définir sur un entier et provoquer la santé du dernier. Et nous allons également définir ce nombre sur un entier. Ensuite, nous enregistrerons cette structure. Nous sommes maintenant prêts à créer notre tableau de données. Nous allons donc revenir au navigateur de contenu, cliquer avec le bouton droit de la souris et sélectionner la catégorie Divers. Ensuite, nous voulons sélectionner Tableau de données. Maintenant, c'est ici que nous sélectionnons la structure que nous voulons que notre table de données utilise. Je vais donc cliquer sur le menu déroulant et rechercher S underscore example struct. Je vais le sélectionner et appuyer sur OK. Nous allons maintenant nommer notre tableau de données. Je vais donc appeler mon exemple de tableau de données. Et nous allons double-cliquer dessus pour l'ouvrir. Et je vais juste faire glisser le mien jusqu'au sommet. Nous avons maintenant une nouvelle disposition de l'interface utilisateur ici. Nous avons notre tableau de données. Voici maintenant les informations actuelles que ces tables stockent. Comme vous pouvez le voir, il est actuellement vide. Et puis, en bas, nous avons l'éditeur de lignes. Ainsi, lorsque nous avons des informations dans notre tableau de données, nous pouvons sélectionner une ligne, et cet éditeur de ligne nous permettra de modifier les informations stockées dans cette ligne particulière. Donc pour créer une nouvelle ligne ou allez le bouton Ajouter et appuyez dessus. Vous pouvez maintenant voir que nous avons une nouvelle ligne dans le tableau de données. Et avec cette option sélectionnée, je peux modifier toutes les variables que nous avons créées dans notre structure pour cette ligne particulière. Maintenant, nous avons également le nom de la ligne. Maintenant, c'est le nom que nous allons utiliser pour accéder aux informations stockées dans cette ligne spécifique lorsque nous codons et que nous créons des plans. Vous devez donc toujours vous assurer de donner noms conviviaux à vos lignes et à vos tables de base. Nous pourrions donc renommer ceci en « actes ». Supposons , par exemple, que nous créions un tableau de données pour les objets qui seront dans notre jeu de rôle. Vous aurez donc des entrées dans la table des états ou de nouvelles lignes pour chaque élément. Ici, vous pouvez définir le nom de l'élément, par exemple, afin que nous puissions définir notre nom pour agir. Comme je l'ai dit, le poids dix, les dégâts à 20 par exemple. Nous avons maintenant défini ces données dans cette corde spécifique. Et si nous le voulions, nous pourrions créer une autre ligne. Nous pouvons donc cliquer sur Ajouter. Et maintenant, nous avons une nouvelle ligne. Peut-être que nous voulions stocker des informations sur les tris afin créer une ligne d'épée en C. J'ai renommé le nom de la ligne en tri, et je vais définir le nom sur tri. Qui a fixé le poids pour sauver cinq et nos dégâts à dix, par exemple. Il y a maintenant quelques autres boutons ici qui nous permettent de contrôler nos lignes. Nous avons donc un copier-coller. Cela vous permet de copier le jeu de données sur une ligne et de le coller sur une autre. Donc si je sélectionne mon AKS par exemple, et que je copie, et que je sélectionne mon épée écrite et que je fais Coller. Vous pouvez voir qu'il a maintenant remplacé les données ma ligne d'épée par les informations qui ont été définies dans ma ligne AKS, vous pouvez voir que le nom de la ligne n'a pas été changé, il est toujours défini épée. Cela est dû au fait que les noms de vos lignes doivent être uniques. Nous ne pouvions donc pas créer une nouvelle ligne, par exemple, et l'appeler acts. Vous pouvez voir que cela génère une erreur car chaque ligne doit avoir un nom unique. Maintenant, nous pouvons également supprimer des lignes. Donc, avec ma nouvelle ligne sélectionnée ici, je peux appuyer sur Supprimer pour supprimer la ligne. Et nous pouvons également dupliquer des lignes. Nous pouvons donc sélectionner la ligne, appuyer sur dupliquer et cela dupliquera cette ligne. Vous pouvez voir qu'il lui donne un nouveau nom appelé score de soulignement de l'épée 0. Si maintenant je vais simplement supprimer ce soulignement 0 et je vais remettre mes informations à ce qu'elles étaient pour notre SolidWorks. Je vais donc sélectionner Trier et je vais régler cela sur épée. Et nous allons régler ça sur, je pense que c'était du F5 blanc et qu'il l'a endommagé. Je vais maintenant vous montrer comment nous pouvons réellement accéder aux informations que nous définissons dans notre tableau de données dans un Blueprint. Nous allons donc commencer par passer à notre plan de personnage de troisième personne. Je vais juste ouvrir ça. Et si nous cliquons avec le bouton droit, nous pouvons rechercher la ligne Get Data Table. Vous pouvez voir que nous avons deux options ici. Je vais sélectionner le nœud de ligne de table de données ici et voir que nous obtenons ce nouveau nœud que nous n'avons jamais utilisé auparavant. Si nous sélectionnons notre table de données, c'est ainsi que nous définissons la table de données à partir de laquelle nous voulons accéder aux informations. Nous n'avons donc que le tableau de données d'exemple que j'ai créé. Nous allons donc sélectionner cela. Vous pouvez voir que le nom de notre rôle a été changé automatiquement dans une petite option déroulante. Et nous pouvons voir que nous avons à la fois nos numéros et lignes d' épées que nous avons créés dans notre exemple DataTable. Maintenant, ce ne sont que des entrées variables. Supposons que j'ai une variable de nom de ligne dans laquelle je voulais me brancher ici. Je pourrais, si je traîne à partir d'ici, nous pouvons faire des promotions variables. Et si vous vous souvenez, cela crée simplement une nouvelle variable du type à partir duquel nous avons fait glisser. Je vais donc simplement créer une nouvelle variable et voir qu'elle utilise un type de variable de nom. Il vient de le nommer pour nous nom de ligne, mais il s'agit simplement d'une variable de nom standard que nous pouvons insérer dans notre table de données pour nous indiquer ligne que nous voulons obtenir de notre table de données. Mais pour l'instant, je vais simplement le supprimer et nous utiliserons le menu de sélection ici. Donc je vais juste sélectionner Sword. Maintenant, nous avons deux sorties. On a trouvé une ligne et rien n'a été trouvé. Maintenant, c'est plus utilisé si vous utilisez une variable qui se branche dans le nom de la ligne. Parce que si nous utilisons l'une de ces sélections, cela nous donne les lignes qui existent dans notre tableau de données. Il va donc toujours trouver ces lignes. Mais si notre variable de nom de ligne était connectée et que nous disions qu'elle était définie sur, si nous pouvons tirer pour afficher la valeur par défaut, disons qu'elle a été définie sur quelque chose comme sac à dos. Il n'y a pas de ligne de sac à dos dans notre exemple de tableau de données. Donc c'est le cas, ce nœud exécuterait rho naught found car il ne trouvera pas cette ligne. Alors que s'il était défini sur quelque chose comme acts par exemple, alors rho found serait fat, serait exécuté parce qu'il a trouvé cette ligne dans notre tableau de données. Nous avons maintenant une sortie appelée excroissance. Et si nous sortons, nous pouvons faire un nœud de rupture. Et vous pouvez voir qu'il s'agit en fait d' un nœud de rupture pour la structure que nous avons utilisée ou que nous avons créée et que nous utilisons dans notre table de données. Nous pouvons donc briser cette structure. Vous pouvez voir que nous pouvons désormais accéder à toutes les informations que nous avons définies dans notre tableau de données. Donc, si je devais créer un début de jeu, par exemple, nous le branchons dans notre ligne de tableau de données. Comme ça, va s'assurer que le nom de la ligne est défini sur ax, ce qui est alors fait à partir de la ligne trouvée. Nous allons faire glisser et imprimer une chaîne. Et nous pouvons relier, disons, le nom à notre chaîne d'impression. Et nous allons le compiler et nous allons appuyer sur play. Et vous verrez que la hache est en train d'imprimer. Si nous revenons à notre ThirdPersonCharacter et que nous changeons le nom de notre ligne en quelque chose comme, je pense qu'il a été vendu. On peut empiler. Et quand nous cliquons sur Play, vous verrez que le tableau de données à l'intérieur du ThirdPersonCharacter trouve cette ligne d'épée et renvoie les informations que nous stockons à l'intérieur de cette ligne. Si nous le voulions, nous pourrions modifier ces données. Donc, si je vais dans un exemple de tableau de données et que je change le nom dans notre rangée d'épées, quelque chose d'autre, disons pomme. Si nous l'enregistrons et que nous appuyons sur Play, vous verrez qu'il imprime désormais Apple, même si nous sélectionnons la ligne d'épée, et que ce n'est que le nom de la ligne. Nous utilisons les informations que nous avons stockées dans cette ligne, et c'est maintenant Apple. Maintenant, il existe un autre moyen de dire notre get dates, table row, node, quelle ligne nous voulons rendre cela un peu plus convivial que d'utiliser simplement une variable de nom. Donc, si nous supprimons notre variable name du graphe d'événements ici, nous créons une nouvelle variable. Je vais appeler cette ligne select. Selector définira le type sur le handle du gestionnaire de ligne de la table de données, désolé. Nous allons créer cela, compiler et obtenir une erreur de ce nœud simplement parce que nous n'avons pas défini de ligne dans. Je vais donc simplement régler ça sur tri. Et si nous compilons à nouveau, vous pouvez voir que l'erreur disparaît. Nous pouvons maintenant sélectionner une variable comme celle-ci. En fait, il s'agit simplement d'une structure intégrée au moteur. Donc, si nous faisons glisser vers l'extérieur, vous pouvez voir que nous avons un nœud de poignée de ligne de table de données de rupture qui nous permet d'accéder aux deux variables qui sont définies dans la structure sélective de ligne et dans la classe par défaut. Donc, si nos variables de sélection de ligne sont sélectionnées, vous pouvez voir que nous pouvons dire table de données et nom de ligne. Maintenant, si je sélectionne Renommer et je pense que cela apparaît parce que nous n'avons pas défini de tableau de données. Je vais donc le définir sur notre exemple de tableau de données ici. Maintenant, lorsque je sélectionne le nom de la ligne, vous pouvez voir qu'il nous donne accès aux deux lignes présentes dans notre exemple de tableau de données. Je pourrais régler ça sur « hache ». Maintenant, en utilisant le nom de la ligne sur notre nœud d'arrêt, nous pouvons simplement le brancher directement dans notre ligne Get Data Table. Notez que nous avons maintenant un moyen beaucoup plus convivial de dire ce nœud quel élément nous voulons obtenir des informations à partir de notre tableau de données. Donc, si je compile, et maintenant nous nous attendons à ce que notre chaîne d'impression affiche le nom parce que c'est ainsi que nous lui demandons d'accéder. Si on y retourne, on peut changer ça en épée. Et maintenant, nous allons le voir imprimer le nom Apple que nous avons changé. Maintenant, juste en passant, si nous sortons des planètes, vous pouvez également insérer cette variable dans la ligne de la table get data, nœud également. Mais je ne recommande pas cela car si vous le branchez et que vous remplacez le tableau de données par un tableau de données qui utilise une structure différente de celle que nous utilisons ici, vous pourriez provoquer des erreurs et problèmes dans vos projets. Donc, en général, je recommande simplement laisser déconnecté ou déconnecté, puis de laisser la définition manuelle du tableau de données que vous utilisez ici. Maintenant, il y a d'autres notes sur le tableau de données, donc si nous cliquons avec le bouton droit de la souris et que nous recherchons la table de données , et que nous recherchons la ligne en C, c' est a. La ligne de la table de données Maintenant, cela fait essentiellement la même chose que notre ligne Obtenir le tableau de données, mais cela ne nous donne pas les informations stockées dans cette ligne. Il suffit de vérifier si le nom de la ligne existe dans le DataTable. Encore une fois, nous pouvons copier et coller ces nœuds. Je branche mon nom de ligne, et je vais définir le tableau de données sur exemple de table de données. Maintenant et commence à jouer avec. Nous allons simplement imprimer vrai ou faux. Si le tableau de données que nous avons sélectionné existe. Maintenant, comme nous utilisons notre ligne, sélectionnez une variable. nous ne pouvons sélectionner que les tables de données qui existent De toute façon, nous ne pouvons sélectionner que les tables de données qui existent dans ce tableau de données. Il retournera donc toujours vrai lorsque nous utiliserons ce nœud pour contrôler la ligne que nous voulons sélectionner. Mais peut-être que nous utilisions une variable de nom à la place. De cette façon, nous pourrions définir un nom ici, par exemple sac à dos. Et cette ligne n' existe pas dans notre tableau de données. Ainsi, lorsque nous appuierons sur Play, vous verrez qu'il imprime faux. Si je reviens en arrière et que je change ça pour dire agit comme ça, et nous pouvons appuyer sur Play. Vous verrez qu'il renvoie true parce que cette ligne existe dans notre exemple DataTable. Un autre nœud est le, si nous supprimons ce code ici juste pour le rendre un peu plus d'espace, je le déplacerai ici. Si nous cliquons avec le bouton droit de la souris et que nous recherchons une table de données, vous pouvez voir que nous devons obtenir le nom des lignes de la table Si je crée ce nœud, vous voyez que nous définissons un tableau de données. Nous allons définir la table de données d' exemple, puis sa sortie est en fait un tableau de noms. Cela produira un tableau contenant tous les noms des lignes qui existent dans notre exemple de table de données. Donc, si je connecte ça pour commencer à jouer, nous allons parcourir ces résultats en boucle. Ce nœud s'exécutera donc pour chaque ligne qui existe à l'intérieur de notre tableau. Nous pouvons simplement faire une chaîne d'impression comme ça. Maintenant, cela affichera tous les noms des lignes au début de la partie. Donc, si nous appuyons sur Play, vous pouvez voir qu'il imprime de la cire et qu'il imprime une épée. Maintenant. Enfin, je voudrais simplement expliquer comment fonctionnent les tableaux de données composites. Les tableaux de données composites nous permettent de prendre plusieurs tableaux de données et de les combiner afin pouvoir accéder à plusieurs tableaux de données lorsque nous sélectionnons un tableau de dates spécifique. Ce que je veux dire par là, c'est que si nous créons une autre table de données, maintenant, ces tables de données doivent utiliser la même structure vocale. Nous ne serons pas en mesure de les combiner. Nous allons donc créer un nouveau tableau de données. Nous utiliserons à nouveau l'exemple de structure S underscore. Et je vais appuyer sur OK, je vais donner un nom à ça. Nous appelons cela des objets d'armes. Ainsi, par exemple, vous pourriez avoir différents tableaux de données pour les armes, consommables, les médicaments, des choses comme ça si vous le vouliez, si vous fabriquiez des objets pour, par exemple, un jeu de rôle. Ouvrez donc les objets d'armes IPython. Et je vais juste créer quelques nouvelles rangées de ce fusil de chasse cool. Et je vais appeler ça un fusil. Définissez le nom sur Rifle. Fusil aussi. Et aussi du fusil de chasse au fusil de chasse. Maintenant, définissez le poids pour, pour le fusil de chasse et six pour le fusil, les dégâts seront fixés à 30, et le chocolat plus de dégâts fixes à dix. Nous avons maintenant ces lignes dans notre tableau de données sur les armes . Maintenant, si nous revenons à notre ThirdPersonCharacter et que nous revenons au code que nous avons créé auparavant. Ces lignes se trouvent maintenant dans un tableau de données différent. Donc, si nous sélectionnons notre sélecteur de lignes ici, vous voyez que je ne peux pas sélectionner ces lignes parce que nous utilisons actuellement le tableau de données d'exemple. Et si nous devions brancher, disons, un nom de ligne, et que nous devions le brancher et que nous devions définir manuellement nom de la ligne pour dire fusil de chasse. Lorsque ce code s'exécute, il ne trouve pas cette corde car encore une fois, cette ligne existe dans nos objets d'armes, pas dans notre tableau de données d' exemple. y en aurait donc pas. Maintenant, parce que le tableau de données d'exemple et le tableau de données d'objets d' armes utilisent la même structure. Nous pouvons les combiner à l'aide d'un tableau de données de concert. Nous allons donc accéder au navigateur de contenu, cliquer avec le bouton droit , accéder à divers et créer un tableau de données composites. Encore une fois, nous devons choisir une structure. Maintenant, il doit s'agir de la même structure que celle que nous utilisons pour, par exemple, le tableau de données et le tableau de données des objets d'armes. Alors sélectionnez l'exemple de structure hit, OK ? Nous appellerons cela la liste principale des éléments, par exemple. Nous allons l'ouvrir et nous avons un nouvel éditeur. Il n'y a pas grand-chose que l'on puisse faire dans un tableau de données composite. Nous pouvons créer de nouvelles lignes ou n'importe quoi de ce genre. Ce que nous pouvons faire, c' est d'ajouter des tables parents. Nous allons donc ajouter un nouvel élément. Et nous allons régler cela sur nos armes que les objets ne devraient pas voir. Après cela, nous pouvons maintenant voir nos armes dans notre tableau de données composites. Et nous allons ajouter un autre élément. Et nous allons le définir dans notre exemple de tableau de données. Vous pouvez voir que lorsque je fais cela, éléments qui se trouvent dans notre tableau de données d'exemple ont également été ajoutés à notre liste principale d'éléments. Maintenant, nous ne pouvons pas les modifier ici, ou nous pouvons simplement ajouter de nouveaux tableaux de données et combiner les lignes ensemble dans un tableau de données composite. Maintenant que nous avons tous ces éléments dans notre tableau de données composites, si nous revenons à notre caractère à la troisième personne, au lieu d'utiliser le tableau de données d' exemple ici, je vais simplement déconnecter le nom de ligne pour le moment. Nous pouvons le définir sur la liste principale des éléments. C'est notre tableau de données composites. Et maintenant, si vous allez au nom de la ligne, nous pouvons sélectionner notre fusil de chasse, fusil et ces flèches qui existent dans le tableau de données des armes. Ou nous pouvons sélectionner les lignes d'actes et d' épées et celles qui existent dans notre exemple de tableau de données. Cela nous permet de combiner plusieurs tableaux de données, condition qu'ils utilisent la même structure dans un tableau Big Data auquel nous pouvons ensuite accéder dans notre plan directeur. C'est utile pour s'organiser. Si vous avez beaucoup de données à stocker dans des tables de données. Et si nous allons voir notre tableau d'état des armes et que j'ajoute de nouvelles lignes, j'appellerai ça un couteau comme ça. Et nous économisons. Si nous revenons au plan ThirdPersonCharacter, nous pouvons cliquer sur le menu déroulant ici et vous pouvez voir que le couteau apparaît maintenant et qu'il se mettra à jour automatiquement si nous ajoutons ou modifions les informations et Eve sont nos objets d'armes, tableau de dates ou l' exemple de tableau de données. Enfin, si nous allons dans notre sélecteur de ligne ici, nous pouvons également utiliser le tableau de données composites ici également. Donc, si je vais à l'option Table de données, nous pouvons la définir sur la liste des éléments principaux. Et maintenant, si nous compilons et que nous regardons le nom de notre ligne, vous pouvez voir que nous pouvons accéder à toutes les armes à partir de notre tableau de données d'exemple et du tableau de données complet des éléments d'armes ici également. Ensuite, il suffit de saisir le bon nom. Et maintenant, nous pouvons facilement utiliser notre sélecteur de lignes pour sélectionner l' une de ces lignes dans l' un de nos tableaux de données. Encore une fois, ne vous inquiétez pas de cette erreur. C'est parce que nous n'avions pas défini de nom de ligne. Si je compile, vous pouvez voir que l'erreur disparaît. Donc, pour résumer, les tableaux de données sont vraiment bons pour stocker de nombreuses informations qui n'ont pas besoin d' être modifiées pendant le jeu. Si vous avez des informations qui doivent être modifiées, vous ne pouvez pas les stocker dans un tableau de données car vous ne pouvez pas modifier les informations de la table de dates pendant le jeu. 27. Leçons supplémentaires (nœuds de chevauchement): Salut tout le monde. Dans cette leçon, nous allons parler des nœuds superposés. Les notes de superposition sont une très bonne alternative à l'utilisation de composants de collision de boîte ou de sphère. Maintenant, une chose très courante que je vois chez les débutants est que vous avez tendance à ouvrir leurs niveaux et qu'ils sont remplis composants de collision de boîtes et de sphères. Maintenant, ils peuvent fonctionner et ils sont relativement faciles à utiliser. Mais le problème se situe plus tard dans votre projet, lorsque vous avez peut-être des projectiles, des traces ou des véhicules qui tentent de se déplacer, ces boîtes de collision et ces sphères peuvent interférer avec le fonctionnement de ces systèmes. correctement, peut vous obliger à faire le tour et à modifier les paramètres de collision dans des centaines de composants de collision de boîtes et de sphères différents . Les nœuds de superposition nous offrent donc une alternative utile à l'utilisation des composants Box et sphere. Parfois, nous pouvons aller à notre ThirdPersonCharacter et je vais mettre en place un exemple. Cliquez avec le bouton droit de la souris et recherchons une entrée Un. C'est une note qui, comme nous l'avons déjà utilisée, s' exécutera lorsque nous appuierons sur l'une de nos touches de notre clavier. Et si nous cliquons avec le bouton droit, nous pouvons rechercher un chevauchement. Vous voyez que nous avons différentes notes de chevauchement ici. Je vais commencer par le chevauchement de boîtes pour les acteurs. Nous allons donc créer cette fonction. Nous avons maintenant quelques entrées pour ce nœud. Nous avons la position de la boîte. C'est à cet endroit que la case sera cochée. Nous avons l'étendue de la boîte, c'est-à-dire la taille des boîtes. Nous avons des types d'objets. Ce sont donc les types d'objets que le chevauchement de boîtes détectera. Si vous vous souvenez de notre leçon de traçage de ligne, nous recherchons make array. Nous pouvons définir les types d' objets que ce nœud détectera. Nous pouvons également ajouter plusieurs entrées à cela. Nous avons donc voulu détecter, whoa, statique, dynamique du monde. Si vous vous souvenez quand nous allons sur un objet, disons dans un monde comme cette rampe ici, si nous sélectionnons le composant de maillage, fera défiler jusqu'aux paramètres de collision et vous verrez qu'il est actuellement défini sur défaut, mais je vais le vendre sur mesure. Et si vous vérifiez le type d'objet, vous pouvez voir qu'il est actuellement défini sur statique sauvage. Notre boîte superposée détecterait donc cet objet parce que nous lui indiquons que nous voulons détecter les types d'objets statiques du monde. Ensuite, nous avons notre filtre de classe d' acteur. Cela indique au chevauchement de cases que nous ne voulons trouver qu'un seul type d'acteur si vite pour définir cela comme un personnage à la troisième personne comme ça. Notre nœud de superposition de livres ne renverrait désormais que le plan ThirdPersonCharacter. N'oubliez pas d'effacer cela, sinon notre exemple ultérieur ne fonctionnera pas. Assurez-vous donc de régler ce paramètre sur aucun. Enfin, nous avons des acteurs à ignorer. Maintenant, il ne s'agit que d'un ensemble d' acteurs que nous pouvons saisir, dire à nos livres que nous voulons les ignorer. Nous pourrions donc sortir de là et faire un make array. Nous pourrions sortir de ce taux de fabrication et rechercher nous-mêmes. Et maintenant, nous disons au chevauchement de boîtes que nous voulons qu'il ignore notre ThirdPersonCharacter et les sorties de ce nœud ou des acteurs sortants. Il s'agit d'un tableau d'acteurs que la boîte se chevauche, se chevauche. Ensuite, nous avons une valeur de retour. Et c'est juste un booléen qui sera soit vrai soit faux si le nœud de superposition de boîtes chevauche quelque chose. Maintenant, créons un exemple. Nous obtiendrons l'emplacement de l'acteur, et c'est là que nous vérifierons les chevauchements de cases. Nous allons donc connecter cela jusqu' à la position de la boîte pour définir l'étendue de la boîte à 200 par 200 par 200. Nous allons définir les types d'objets. Nous laisserons cela statique et dynamique. Assurez-vous que le filtre de classe d'acteur est défini sur aucun. Sinon, il ne pourra pas détecter d'autres acteurs. Et nous allons laisser cet auto branché sur l'accès à ignorer ici également. Nous pouvons simplement le mettre dans nos notes ici. Mais quelque chose que j'aime utiliser lorsque j'utilise des nœuds d' acteurs de superposition Box est un nœud de débogage. Donc, si nous cliquons avec le bouton droit de la souris et recherchons debug, désolé, dessinez la Ce nœud nous permet de créer une boîte visuelle dans le monde que nous pouvons utiliser pour le débogage. Je vais donc le brancher dans notre boîte Draw Debug. Et je vais brancher ça dans les boîtes qui se chevauchent. Et pour son centre, nous utiliserons simplement l' emplacement de l'acteur et nous allons le définir dans la même mesure que notre superposition de boîtes. Sauces à deux cents, deux cents, deux cents. Je vais régler la durée sur trois secondes et l'épaisseur sur une. En faisant cela, nous allons simplement créer une boîte visuelle et le niveau pendant trois secondes au même endroit et à la même taille que notre boîte se chevauche. Nous pouvons donc avoir une idée de la taille de la zone dans laquelle nous vérifions les acteurs qui se chevauchent. Maintenant, je vais juste m'éloigner du viol de nos acteurs et je vais chercher la longueur. Et nous allons simplement l'utiliser pour détecter le nombre d'acteurs qui se chevauchent réellement. Lorsque nous exécutons nos livres chevauchent le nœud des acteurs. Je vais donc le brancher dans une chaîne d'impression comme celle-ci, et nous allons compiler. Maintenant, nous pouvons le tester. Donc, si j'appuie sur lecture et que j'appuie sur une, vous pouvez voir que nous avons cette grande boîte et que notre texte en imprime une. Et c'est parce qu'actuellement nos livres se chevauchent. La note des acteurs est uniquement pour allaiter un acteur. Ça, c'est le sol. Et la raison en est que nous lui disons d'ignorer notre caractère. Si je cours ici et que j'appuie sur un, vous pouvez voir qu'il est monté à trois parce que nous atteignons la rampe, cette place et le sol. s'agit simplement d'un moyen simple de détecter quels acteurs chevauchent une certaine zone sans avoir à créer un nouveau composant de collision de boîte ou de sphère. Il existe maintenant d'autres versions de ce nœud. Si nous appuyons sur échappement et revenons à notre troisième carotte, ThirdPersonCharacter Blueprint, nous cliquons avec le bouton droit et recherchons le chevauchement. Vous pouvez voir que nous avons une boîte qui chevauche des composants. Maintenant, cela fonctionne de la même manière que nos acteurs de superposition de boîtes. Il ne fait que rechercher des composants. Ainsi, au lieu de renvoyer les acteurs, il retournera les composants qu'il chevauche. Ainsi, par exemple, si notre plancher se chevauchait, notre case chevauchait les composants cochés. Il retournerait au lieu de l'acte de cube pour référence, il retournera les restaurants du composant de maillage de la pile au lieu des composants sortants sont violés. À part cela, tout est pareil avec ce nœud. Vous pouvez définir la taille de la position, les types d' objets, etc. Maintenant, nous avons également différentes formes pour ces nœuds superposés. Nous pouvons donc créer, disons, un chevauchement de sphères. Vous pouvez voir que nous avons nos acteurs de chevauchement de sphère et nos nœuds de composants de chevauchement de sphère. Enfin, il y a aussi les nœuds de chevauchement de la capsule. Vous pouvez donc voir que nous avons des acteurs de superposition de capsules et que nous capturons des composants de superposition. Et ce ne sont que des formes différentes que nous vérifierions si des accepteurs ou des composants se chevauchent. C'est donc tout pour cette leçon. C'est une courte question que je voulais juste faire sur ces nœuds parce que je les trouve vraiment utiles. Et j'espère qu'ils pourront réduire le nombre de composants de boîte et de sphère que vous avez dans vos niveaux. 28. Leçons supplémentaires (intrants): Salut tout le monde, Dans cette leçon, je vais vous parler du système de saisie. Maintenant, dans Unreal Engine 5, nous avons deux systèmes d'entrée. Nous avons l'original d'Unreal Engine 4, et nous avons le nouveau système de saisie amélioré qui se trouve maintenant dans Unreal Engine 5. Au cours de cette session, je vais vous expliquer le système d'entrée d'origine. Et la raison pour laquelle je fais cela, c'est que de nombreux projets, du moins au moment du tournage, utilisent toujours ce système original. Ensuite, dans notre prochaine leçon, je vous parlerai du nouveau système de saisie amélioré. Qu'est-ce que je veux dire par système d'entrée ? Et le système d'entrée est la façon dont nous amenons le joueur appuyer sur un bouton de mon clavier , de sa souris ou d'une manette de jeu traduire code exécuté dans nos plans. Nous avons déjà utilisé certains nœuds d'entrée dans nos leçons précédentes. Si nous nous dirigeons vers ThirdPersonCharacter et que je avec le bouton droit de la souris et que je recherche une entrée Par exemple, vous pouvez voir que nous avons utilisé l'événement one input, et c'est l' événement qui s'exécutera si nous appuyons sur la touche une de notre clavier. Si nous nous dirigeons vers le panneau Détails, nous pouvons modifier cette entrée pour qu'elle fonctionne comme nous le voulons, nous pouvons appuyer sur ce bouton ici puis sélectionner la touche que nous voulons qu'elle utilise. Je pourrais donc appuyer sur L, par exemple. Maintenant, ce nœud s'exécutera à tout moment, toujours appuyé sur. Ou nous pouvons cliquer sur ce menu déroulant ici et nous pouvons consulter toutes les différentes entrées clés intégrées au moteur. Maintenant, ces types de nœuds sont vraiment utiles pour tester des choses, déboguer, simplement obtenir rapidement une entrée dans un Blueprint. Mais ils ne sont pas particulièrement utiles pour les parties complètes ou terminées. La raison en est que la plupart des jeux modernes ont un menu de raccourcis clavier où le joueur peut relier les touches à quatre actions différentes. Maintenant, si vous utilisez ces nœuds et une partie terminée, vous ne pourrez pas le faire. Et c'est là qu'un système d'entrée entre en jeu. Maintenant, dans cette leçon, je vais vous parler du système d'entrée que vous avez déjà fourni. Et la raison en est un grand nombre de projets que vous pouvez ouvrir. Nous utiliserons toujours le système d'entrée de l'UE pour. C'est donc une bonne idée de simplement comprendre comment cela fonctionne. Ensuite, dans notre leçon suivante, nous examinerons le nouveau système de saisie amélioré fourni avec Unreal Engine 5. Pour commencer, nous allons examiner l'une des entrées clés qui accompagnent le caractère à la troisième personne. Si nous faisons défiler ici et que nous trouvons l'action d'entrée de saut, vous pouvez voir qu'au lieu de dire un nom de clé, cela dit saut d'action d'entrée. C'est parce que cette action de saisie est réellement définie dans notre système de saisie. Ensuite, dans le système de saisie, nous attribuons des clés. Pour trouver ce système, nous pouvons aller dans Modifier les paramètres du projet. Ensuite, nous descendons à la section des entrées ici, et c'est sous la catégorie moteur. Vous pouvez voir ici que nous avons mappages d'actions et des mappages d'accès. Le mien est déjà ouvert, mais le tien ressemble un peu à ça. Nous cliquons sur la flèche en regard des mappages d'actions. Vous pouvez voir que nous avons l'action d'entrée de saut. Et puis en dessous, si vous cliquez sur la flèche à côté, vous pouvez voir que la touche par défaut est la barre d'espace. Et nous avons également un buy-in clé pour la manette de jeu ici également. Donc, ce que cela indique au moteur c'est que nous voulons créer un mappage d'action. Désormais, un mappage d'action est similaire à nos événements d'entrée que nous utilisions auparavant. Elle peut être pressée ou relâchée. Et nous lui disons que nous créons un nouveau mappage d'action appelé Jump. Et nous voulons que ces deux clés soient liées à cette action. Et c'est pourquoi lorsque nous jouons sur la carte à la troisième personne, si j'appuie sur Espace, cette action de saisie de saut sera exécutée. Et puis quand je libère de l'espace, libéré va courir et il va exécuter les événements de saut et d'arrêt de saut. Maintenant, nous pouvons également créer nos propres actions de saisie ici. Donc, si vous revenez aux paramètres du projet, nous pouvons simplement cliquer sur ce petit bouton plus ici pour créer une nouvelle action de saisie. Je peux l'appeler quelque chose comme tirer, par exemple, va définir la clé sur. Vous pouvez donc définir la clé de plusieurs manières et cliquer sur ce bouton, puis sur la touche de votre choix. Je peux donc simplement laisser le bouton gauche de la souris et vous verrez qu'il est automatiquement sélectionné pour moi. Ou vous pouvez parcourir toutes les différentes combinaisons de touches en cliquant simplement sur cette flèche vers le bas et en parcourant les options. Nous avons maintenant créé une nouvelle entrée d'action et son nom est Shoot. Et lorsque nous appuyons sur le bouton gauche de la souris, cet événement de chaussures se déroulera. Si nous revenons à notre ThirdPersonCharacter, nous cliquerons avec le bouton droit de la souris et nous rechercherons une entrée. Tournage d'action en C qui sous impactions, nous avons maintenant un événement de tournage. Et cela fonctionnera chaque fois que nous appuierons sur le bouton gauche de la souris. Je peux donc ajouter une chaîne d'impression ici. Et je vais juste mettre la pression. Je vais copier et coller ça et le mettre comme ça. Donc maintenant, quand nous appuyons sur play, vous pouvez voir que lorsque j'appuie sur le bouton de la souris, il s'enregistre enfoncé, et quand je relâche, il s'enregistre relâché. L'avantage de ce système est que vous pouvez ajouter plusieurs clés pour être liées au même événement. Supposons que votre jeu fonctionne sur ordinateur de bureau et qu'il fonctionne également sur console et VR. Vous pouvez avoir des entrées pour la VR, la touche de saut, le kit de manette de jeu, et tout cela peut être sous la catégorie de prise de vue si nous voulons ajouter de nouvelles entrées. Nous pouvons donc simplement cliquer sur le petit plus en C, je peux maintenant ajouter une nouvelle clé. Je pourrais dire appuyer sur K par exemple. Maintenant, k va également lancer cet événement chaussure ainsi que le bouton gauche de la souris. Si vous souhaitez supprimer l'un de ces éléments, nous pouvons simplement cliquer sur la petite icône de corbeille ici. Si vous souhaitez supprimer un mappage d'action complet, vous pouvez simplement cliquer sur la corbeille à côté du nom du mappage d'action. Maintenant, gardez à l'esprit que si vous faites cela et que vous avez toujours l'événement et le truc, si nous pouvons sonder, vous verrez que nous recevrons un avertissement. Et ça ne fait que nous dire ça. La cartographie n'existe plus dans les paramètres de notre projet. Nous allons donc le supprimer pour l' instant parce que nous ne l' utilisons plus et nous allons compiler pour nous débarrasser de ce manque. Ensuite, nous avons les mappages d'accès. Par conséquent, si nous revenons aux Paramètres du projet, vous pouvez voir que nous avons des mappages d'accès. Je clique sur le petit menu déroulant ici. Vous pouvez voir que nous avons des options pour l'humeur en avant et en arrière. Déplacez-vous à droite et à gauche Et puis nous avons les mêmes options pour la jeu et la manette de jeu de haut en bas, ainsi que pour la recherche de la souris vers le haut et vers le bas ici. Désormais, les mappages d'accès fonctionnent un peu différemment. Ils exécutent toutes les images. Donc, ce que je veux dire par là, c'est que si je vais vers l'avant et vers l'arrière et que j'ajoute simplement une chaîne d'impression. Il suffit donc d'ajouter une chaîne d'impression ici. Vous verrez que quand j'appuierai sur Lecture, il imprime chaque image. Je n'appuie sur aucun bouton, je ne fais rien du tout. Ce mappage d'accès sera exécuté à chaque image. Et il en va de même pour tous les mappages d'accès. Ce sera donc la même chose pour notre mouvement à droite et à gauche, et aussi pour notre manette de jeu, regardez de haut en bas ainsi que notre souris de haut en bas. Les mappages d'accès fournissent également une valeur d'accès. Maintenant, il s'agit essentiellement de la quantité ou de la quantité d'entrée reçue. Donc, si je prends la valeur de mon axe ici, et je l'étais en fait, nous supprimerons la chaîne d' impression ici, et nous connecterons une nouvelle chaîne d'impression jusqu'à notre tour, droite et à gauche pour la souris, la carte SIM. Et je vais insérer la valeur x dans ma chaîne d'impression et je vais compiler. Maintenant, vous pouvez voir que je ne déplace pas ma souris, donc la valeur de l'axe est 0. Mais si je commence à déplacer ma souris lentement, vous pouvez voir que le montant de l' accès augmente. Maintenant, c'est essentiellement ce qui indique au moteur combien je déplace ma souris, quelle vitesse je la déplace, puis il ajoute cette valeur à l'arc, la rotation de la caméra. Donc, si je commence à déplacer ma souris très rapidement, vous pouvez voir que la valeur commence à augmenter beaucoup plus. C'est donc essentiellement ce qui permet aux mappages d'accès de contrôler notre caméra, la direction dans laquelle elle se déplace, ainsi que notre personnage. Si nous revenons à notre plan, vous pouvez voir que la valeur de notre axe pour avancer et reculer est une valeur d'axe. Et si je fais une chaîne d'impression ici, on le connecte à lui. Compilez. Et je vais supprimer cette chaîne d'impression afin que nous puissions voir la valeur uniquement à partir de notre avance et de notre marche arrière. Appuyez sur Play et voyez qu'il est actuellement 0. Mais si je commence à avancer, la valeur de l'axe est passée directement à un. Et si je recule, tu peux voir c'est passé à moins un. Et c'est ce qui indique au moteur si nous avançons ou reculons. Si nous sortons de l'éditeur de plan et que nous allons dans Paramètres du projet, nous ouvrons l'un de ces mappages d'accès. Supposons, par exemple, la recherche coupée vers le bas de la souris. Vous pouvez voir qu'il n'est actuellement pas défini sur. Une touche est en fait définie dans le sens de la souris. Il est donc réglé sur Y de la souris. L'échelle est de moins un. La raison en est que c'est simplement la façon dont la caméra fonctionne sur rail. Si je devais régler cela à l' échelle 1 et appuyer sur Play. Maintenant, lorsque je déplace ma souris vers le haut, je commence à regarder vers le bas et mes commandes sont inversées. Donc, généralement avec les mouvements de la souris vers le haut et vers le bas, nous utiliserions une échelle de moins un pour éliminer le mouvement inversé de la caméra. Mais si nous regardions, disons, avancer et reculer, vous pouvez voir que nous avons W et S. Maintenant, w nous donne une échelle de un qui indique le personnage lorsqu'il avance. S donne une échelle de moins un, et c'est ce qui indique au personnage que nous reculons. Et puis nous avons quelques raccourcis clavier supplémentaires ici. Ce sont les deux touches fléchées de votre clavier, et puis nous avons également le joystick sur une manette de jeu. Maintenant, une chose importante à retenir à propos des événements d'entrée est que la raison pour laquelle ils s'exécutent dans notre ThirdPersonCharacter est parce que notre personnage à la troisième personne est contrôlé par notre contrôleur de joueur. Si nous devions commencer à utiliser ces nœuds dans des plans, celui contrôlé par notre contrôleur, ils ne fonctionneraient pas. Maintenant, un plan dans lequel nous pouvons utiliser ces événements d'entrée est notre contrôleur. Maintenant, dans le modèle à la troisième personne, il n'y a pas de contrôle. Un plan en créera un nouveau rapidement. Je vais juste créer une classe de plan, sélectionner la manette du joueur. Je vais simplement appeler cet exemple de contrôleur. Comme ça. Et si vous vous souvenez, nous devons régler notre manette et notre mode de jeu. Je vais donc passer en mode jeu à la troisième personne et trouver la classe de contrôleur de joueur. Ici, nous allons simplement le remplacer par notre exemple de contrôleur, compiler et enregistrer. Maintenant, lorsque nous appuierons sur play, nous utiliserons notre exemple de manette. Et je vais ouvrir cette manette. Je vais juste le faire glisser vers le haut ici, aller dans le graphique d'événements. Et maintenant, si je recherche disons jump, par exemple, vous pouvez voir que je peux créer l'action d'entrée de saut et cela fonctionnera très bien. Et c'est parce que nous sommes dans le contrôleur, les actions d'entrée fonctionneront parfaitement à l'intérieur de notre contrôleur de joueur, parce que le contrôleur du joueur est ce qui gère les actions d'entrée. Ensuite, je voulais juste vous parler de certains des paramètres que vous trouverez si vous sélectionnez un nœud d'entrée, nous devons consommer des entrées, exécuter en pause et remplacer la liaison parent. Donc, le premier consomme une entrée signifie que s'il est coché sur ce que nous utilisons, nous utilisons une action d'entrée dans notre contrôleur. Et nous avons eu le même événement à l'intérieur de notre personnage joueur. L'action de saut dans notre personnage ne se déroulera pas réellement. Et c' est parce que notre contrôleur consomme essentiellement cette entrée et ne permet aucun autre Blueprint de s'exécuter. Donc, si je devais imprimer une chaîne ici à partir de notre événement de saut. Maintenant, quand nous compilerons et appuierons sur Play, si j'appuie sur espace, si je reviens à mon personnage à la troisième personne ici, nous supprimerons simplement ces chaînes d'impression afin que nous puissions voir ce que nous faisons comme ça, qui compilent ça. Et maintenant, quand nous appuyons sur Play, si j'appuie sur espace, vous pouvez voir qu' il affiche Bonjour, mais mes personnages, pas de chance avec le saut. C'est parce que dans notre exemple de contrôleur, nous consommons cette entrée. Mais si je décoche cette case et que je peux appuyer sur Play. Maintenant, lorsque j'appuie sur espace, vous pouvez voir que mon texte Bonjour est en cours d'exécution et que le personnage saute. Donc, ces deux événements dans mon contrôleur et le plan de personnage ou en cours d'exécution maintenant. Un autre des paramètres, si nous sélectionnons la production sautante ici, est d'en exécuter un en pause. Vous pouvez mettre le moteur en pause, ou si vous ouvrez un menu, par exemple, si cette option est cochée, l'entrée pourra toujours s'exécuter même si le jeu est en pause. Et enfin, remplacez la liaison parent. Supposons, par exemple, que notre contrôleur d'exemple avait un plan parent différent de celui du contrôleur du joueur. Ensuite, si cette option était cochée et que le Blueprint parent utilisait également l'action d'entrée. Ensuite, nous disons que le moteur a ignoré l'entrée et que notre plan parent utilise le code qui nous est connecté. Si nous la décochons, ce nœud ne fonctionnera pas. Le nœud de notre Blueprint parent s'exécuterait. Enfin, nous avons cette autre épingle ici, nous donne juste une référence à la touche qui a été pressée et qui a permis l'exécution de cet événement. Donc peut-être que vous avez plusieurs touches qui feraient sauter et que vous vouliez que quelque chose de différent se produise et que vous vouliez que quelque chose de différent en fonction de la touche sur laquelle la personne a appuyé, nous pourrions faire glisser et rechercher égal. Et en utilisant cette note, vous pouvez vérifier si la touche qui a été pressée est égale à une autre touche. On pourrait donc dire que c'est égal à l'espace. Et ce nœud vérifierait que la touche a été appuyée sur la barre d'espace. Si c'est le cas, cela reviendrait vrai. Nous pouvons également obtenir le nom de la clé, afin de pouvoir effectuer une recherche avec affichage. Nous pouvons utiliser le nom d'affichage de la clé getc. Et cela nous dira simplement dans le texte quel est le nom de la touche qui a été pressée et qui fait le saut en production. Ce sera donc tout pour cette leçon. Dans notre prochaine leçon, nous examinerons le nouveau système d'entrée amélioré fourni avec le moteur 5 non amarré. 29. Leçons supplémentaires (des entrées améliorées): Salut tout le monde. Dans cette leçon, nous allons examiner le système de saisie amélioré fourni avec Unreal Engine 5. Pour commencer, je vais vous montrer comment l'activer. Dans cette version actuelle du moteur, je dois activer un plug-in. Je vais donc aller dans Edit plugins et je vais chercher Enhance. Vous pouvez voir des entrées améliorées, que je peux prendre en charge. Si le vôtre est déjà coché, vous n'avez pas besoin de le faire. Mais pour moi, je vais m'en occuper. Vous pouvez me donner un avertissement ici, juste en me disant qu' il est toujours en version bêta. Donc je vais juste cliquer sur Oui. Nous devons redémarrer le moteur, donc je vais le faire maintenant. Donc maintenant j'ai redémarré le moteur et si nous vérifions le menu des plugins et que nous recherchons Enhanced, nous pouvons voir qu'il est coché. Ensuite, nous allons aller dans Modifier et dans Paramètres du projet. Ensuite, nous allons utiliser une recherche et nous allons rechercher une entrée, ou désolé, une entrée par défaut. Maintenant, vous pouvez voir que le mien est défini par défaut sur l'entrée du joueur et le composant d'entrée. Je vais les remplacer par l'entrée améliorée du joueur. Et le composant d'entrée amélioré. Si le vôtre est déjà défini sur ces paramètres, vous n'avez pas besoin de le faire. Maintenant, le système de saisie est ce qui nous permet d'exécuter du code lorsque le joueur dit, appuie sur un bouton de mon clavier ou de ma manette de jeu, ou déplace sa souris d'une certaine manière. Dans notre dernière leçon, nous avons examiné le système d'entrée qui provient d'Unreal Engine 4. Ceci est toujours présent dans Unreal Engine 5. Nous les avons donc abordés dans notre dernière leçon, si vous voulez vérifier cela. Mais dans cette leçon, nous allons examiner le nouveau système qui l' a implémenté dans Unreal Engine 5. Ce qui est bien avec ce nouveau système amélioré c' est qu'il est rétrocompatible. Donc, si nous revenons à notre personnage à la troisième personne ici, tous ces événements, utilisent toujours l' ancien système de saisie depuis quelque part, le moteur pour ces événements fonctionnera toujours. Donc, si je clique sur lecture, maintenant que j' utilise le système de saisie amélioré, mais je peux toujours me déplacer. Je peux encore regarder ces entrées qui fonctionneront toujours. Mais maintenant nous pouvons réellement créer les nouvelles entrées améliorées, ce que nous allons faire maintenant, nous allons quitter l'éditeur de lecture. Et nous allons commencer par cliquer avec le bouton droit sur le navigateur de contenu. Et nous allons accéder à l'option de saisie ici, et nous allons créer une nouvelle action de saisie. Maintenant, c'est l'équivalent de, si vous vous souvenez de notre dernière leçon, d'accéder à l'option d'entrée ici et de créer un nouveau mappage d'action. C'est l'équivalent de cela, mais nous avons maintenant notre propre plan directeur. Quel que soit le nom que nous avons donné, ce sera le nom de notre événement. Je vais donc simplement appeler cet exemple d'entrée. Pas d'espace. Par exemple, une entrée comme ça. Maintenant, si on ouvre ça, je vais juste le faire glisser vers le haut ici. Voici maintenant où nous pouvons définir les paramètres de notre exemple d'événement d'entrée. Pour commencer, nous avons le type de valeur. Maintenant, il s'agit essentiellement la valeur que la clé fournit à notre code. S'il est réglé sur Boolean, alors notre touche est pressée ou non. Mais nous pouvons changer cela pour dire un axe un jour. Il s'agit donc d'un seul flottant qui représente un état de notre entrée. Donc, si notre souris, par exemple, se déplace le long de l'axe X, alors c'est d'un côté à l'autre. Cette valeur flottante sera négative ou positive en fonction de la direction dans laquelle nous nous déplaçons vers lui et ensuite de la vitesse à laquelle nous le déplaçons, définissez la taille du nombre. Maintenant, il y a aussi une 2D et une 3D. J'expliquerai la 2D un peu plus tard. La 3D est un peu plus avancée, nous n'en parlerons donc pas dans cette leçon. Ensuite, nous avons des déclencheurs. Les déclencheurs définissent ce qui fait réellement fonctionner notre exemple d'entrée. Donc, si je crée une nouvelle entrée, vous pouvez voir que j'ai maintenant un nouvel index, et ici je peux choisir parmi quelques options différentes. Maintenant, ils indiquent essentiellement au moteur ce que nous devons faire avec ces liaisons de touches pour exécuter cet exemple d'entrée. Par exemple, si nous le réglons sur tap, nous devons appuyer sur la touche. Cet événement est lié à, pour le faire fonctionner. Et si nous cliquons sur la flèche vers le bas, nous avons quelques paramètres pour le type de robinet. Nous avons le seuil de temps de relâchement du robinet. Cela signifie donc que tant que j'appuie sur une touche et que je la relâche plus rapidement que 0,2 seconde, notre exemple d' événement d'entrée s'exécutera. Suivant. Nous allons configurer un exemple dans notre personnage à la troisième personne afin pouvoir appeler notre exemple de saisie. Mais nous devons d'abord créer un autre plan. Maintenant, vous avez peut-être remarqué que dans ce plan, nous pouvons définir une clé que nous voulons exécuter dans notre exemple d'entrée. Maintenant, il existe un autre plan qui définit cela. Il va falloir créer ça. Nous allons donc cliquer avec le bouton droit et accéder à la saisie. Nous voulons ensuite des contextes de mappage d'entrée. Je vais appeler mon exemple contexte de mappage. Et nous allons ouvrir ça. C'est ici que nous définissons nos entrées. Par exemple, notre exemple d'entrée. Ce que nous pouvons faire, c'est cliquer sur le petit bouton plus ici. Vous pouvez voir que nous avons ces options. Nous pouvons définir une entrée. Nous allons donc utiliser notre exemple et notre pompe. Nous lui disons donc que ce mappage est pour l'exemple d'entrée. Ensuite, nous pouvons définir les touches que nous voulons réellement exécuter cette entrée. Nous pouvons donc cliquer sur la petite icône du clavier ici et je peux appuyer sur Say, L sur mon clavier. Vous pouvez également cliquer sur le menu déroulant ici et sélectionner une clé et les options ici. Maintenant, nous avons indiqué au moteur que lorsque nous appuyons sur out, nous voulons qu'il exécute l' exemple d'événement input. Nous pouvons maintenant accéder à notre ThirdPersonCharacter et créer un nouvel événement. Nous pouvons effectuer une recherche, par exemple. Vous pouvez voir que nous avons des exemples d'entrées. Si je le crée, vous pouvez voir que nous obtenons ce nouveau nœud d'entrée. Maintenant, ce nœud d'entrée va avoir une apparence différente ou avoir des sorties différentes en fonction des déclencheurs que nous avons configurés dans notre exemple d'entrée. Nous avons donc actuellement une configuration de robinet. Donc, les entrées seront pertinentes pour le haut. Mais si je devais déplacer ceci et que nous revenions à notre ThirdPersonCharacter. Vous pouvez voir que les sorties de notre note de changement. Maintenant, ces sorties feront différentes choses en fonction des déclencheurs que vous avez définis dans votre entrée. Nous allons donc ajouter à nouveau notre entrée ou notre déclencheur, désolé, et c'est celui en bas ici. Et nous laisserons les paramètres par défaut. Nous allons donc enregistrer cela et nous pouvons revenir à ThirdPersonCharacter sont déclenchés ici et s'exécuteront chaque fois que nous appuierons pour la première fois sur le bouton tap down. Donc pour nous, c'est là. Je l'ai défini dans nos contextes cartographiques. Et le terminé fonctionnera lorsque nous lèverons la clé. Ce que nous pouvons faire, c'est ajouter une chaîne d'impression ici. Nous avons réglé ce paramètre sur Déclenché. Épelle-le bien. Allons-y. Je vais copier et coller ça. On va le brancher, le compléter et je vais le mettre comme ça. C'est mal orthographié, mais c'est parti. Donc maintenant, quand je compile, nous nous attendons à ce que lorsque je tape plus vite que 0,2 seconde, ils s'impriment, mais ce n'est pas le cas en fait. Et nous pouvons le voir si je clique sur Play by tap out, rien ne se passe. C'est parce que nous devons également apporter quelques modifications de code à l'intérieur de notre personnage. Donc pour ce faire, je vais faire une possession événementielle. Et si vous vous souvenez de notre leçon sur les événements, cet événement se déroulera chaque fois qu' un contrôleur prend le contrôle de ce personnage. Donc, à partir de là, nous allons sortir de notre nouveau contrôleur, cela coûtera aussi. Manette de joueur. Et puis, à partir de là, nous devons obtenir le sous-système amélioré d'entrée des joueurs locaux. Ensuite, nous devons ajouter un contexte de mappage. Maintenant, il s'agit essentiellement d'indiquer au contrôleur du joueur que nous voulons utiliser cet exemple de contexte de mappage que nous avons configuré pour la surcharge. Nous devons donc définir nos contextes de mappage sur le contexte de mappage d'exemple. Donc maintenant, quand nous le compilons et que nous cliquons sur play, si je tape, vous pouvez voir que cela est terminé et que nous avons déclenché notre impression. Maintenant, l'objectif de définir les contextes de mappage vous permet d'avoir différents schémas de contrôle en fonction de ce que vous voulez faire. Par exemple, vous pouvez avoir un personnage dans votre jeu et un véhicule. Maintenant, vous pouvez vouloir que les commandes des personnages et celles des véhicules soient complètement différentes. Ce que vous pouvez faire, c'est avoir un contexte cartographique pour votre personnage, puis un second véhicule à carburant. Ensuite, dans votre personnage, vous pouvez définir les contextes de mappage l'aide du nœud ajouter des contextes de mappage au contexte de mappage de votre personnage, qui peut avoir toutes vos entrées pour le moment où votre joueurs contrôlant le personnage. Ensuite, dans votre véhicule, un plan, vous pouvez avoir le même code, mais cela pourrait définir un contexte de cartographie de véhicule à la place. Et puis ce contexte de mappage, vous pourriez avoir différents contrôles, peut-être pour changer de vitesse et d'autres choses comme ça, des choses dont vous n'auriez pas besoin dans un plan de personnage. Maintenant, c'est un peu plus compliqué que, disons, le système d'entrée précédent que je suis en train de préparer pour l'utilisation. Mais ce système est beaucoup plus complet et une fois que vous l'avez compris, vous pouvez en faire beaucoup plus. Mais sachez simplement pour l' instant que si vous prévoyez utiliser le système de saisie amélioré, vous aurez besoin de ce code dans votre personnage pour indiquer exactement au contrôleur du joueur quels contextes de mappage vous voulez utiliser. Et gardez à l'esprit que le contexte de mappage est l'endroit où vous indiquez aux événements d'entrée comment les touches peuvent les appeler. Vous avez peut-être remarqué que dans nos contextes de mappage, nous pouvons ajouter plusieurs clés. Donc, si vous voulez dire avoir L et une autre clé, exécutez notre exemple et mettez, nous pouvons le faire. Je pourrais donc régler ceci sur x. Maintenant, si je clique sur Play et que je tape X, vous pouvez voir que cela s'imprime également. Si j'appuie dessus, vous pouvez voir que cela s'imprime également. Si nous revenons à nos contextes de mappage, vous pouvez voir que nous avons également une option de déclencheurs pour chacune des clés. Maintenant, si nous ajoutons un déclencheur dans notre exemple d'entrée, cela affectera toutes les touches que nous avons. Toutes les clés que nous ajoutons dans notre exemple devront suivre les règles de déclenchement que nous avons définies dans notre exemple d'entrée. Mais peut-être que nous ne voulons pas avoir cela dans notre exemple d'entrée. Nous voulions que certaines clés aient certaines fonctions. Peut-être que, par exemple, pour que L puisse travailler avec, veux-tu le taper. Mais pour que X fonctionne, il faut peut-être maintenir la touche enfoncée. Et si nous y allons, si nous cliquons sur l' option déroulante ici et que nous voyons que nous avons paramètres pour maintenir ce barrage clé. Le principal est donc le seuil de temps d' attente. Cela signifie que je dois maintenir le bouton enfoncé pendant 1 seconde avant que le code ne s'exécute. Si nous appuyons sur lecture maintenant, si j'appuie sur X, rien ne se passe tant que. Une seconde est arrivée, et maintenant mon déclencheur fonctionne en permanence jusqu'à ce que je lâche x. Vous pouvez voir terminé, Il est juste exécuté et déclenché, avait cessé de fonctionner. Mais si j'essaie de taper sur mon x, rien ne se passe. Si je maintiens mon hibou enfoncé, rien ne se passe parce que si vous vous souvenez, nous avons mis en place la règle du tap pour mon L. Donc, si je le retire, vous pouvez voir l'événement qui se déroulait actuellement. Donc, juste pour résumer les déclencheurs, si nous sortons de l'éditeur de plan, si vous voulez que les déclencheurs affectent toutes les touches qui peuvent appeler un événement, vous devez les ajouter à l'intérieur de l'événement. Donc, ici, vous définissez les déclencheurs qui affecteront toutes les touches que vous avez assignées à cet événement. Dans le contexte de la cartographie. Si vous souhaitez que les clés individuelles aient des règles de déclenchement différentes, vous pouvez le faire dans les contextes de mappage sous la clé spécifique. Et bien sûr, si vous souhaitez ajouter un déclencheur, vous pouvez cliquer sur le bouton Ajouter ici. Vous souhaitez supprimer un déclencheur. Il vous suffit de cliquer sur l'icône de la corbeille pour la supprimer. Maintenant, nous allons supprimer l'entrée x pour le moment. Vous pouvez également configurer plusieurs déclencheurs. Donc, si nous ajoutons un déclencheur et que je dis de le régler sur tap, je peux également en ajouter un second, et je pourrais le mettre en attente. Maintenant, notre bouton L fonctionnera si je l'appuie rapidement ou si je le maintiens enfoncé pendant plus d'une seconde. Et nous pouvons le tester. Je peux appuyer sur Play. Et si j'appuie sur ou si je tape rapidement sur L, vous pouvez voir que cela fonctionne. Ou si je le maintiens enfoncé et que j'attends 1 seconde, vous pouvez voir que maintenant le déclencheur est en cours d'exécution à chaque image. Et si je lâche prise, tu peux voir les courses terminées. Maintenant, je ne vais pas passer en revue tous les types de déclencheurs parce qu' il y en a pas mal. Et si jamais vous voulez savoir ce qu'ils font, une bonne façon de le faire est simplement les survoler avec la souris dans ce menu déroulant. Et cela vous donne en fait une explication assez correcte de ce que chacun fait. Vous avez peut-être remarqué sur notre note d'événement que nous avons une valeur d'action. Maintenant, selon le type d'entrée que vous avez utilisé dans les contextes de mappage, cela nous donnera une valeur que nous pouvons utiliser pour contrôler le code. Donc, parce que nous utilisons simplement un alcène, cela en lancera un lorsque la touche est enfoncée et 0 lorsque la touche n'est pas pressée. Mais nous pouvons également modifier cette valeur dans notre exemple d'entrée. Ici, nous pouvons définir cela pour dire Boolean en C que nous recevons cette notification chaque fois que nous changeons quelque chose. Si nous revenons au caractère à la troisième personne, vous pouvez voir qu'il est maintenant remplacé par un booléen. Et cela serait juste vrai lorsque notre touche est enfoncée et faux quand elle est relâchée. Maintenant, nous pouvons également utiliser cette valeur pour contrôler des éléments tels que la direction du regard et la direction de notre mouvement. De la même manière que la valeur de l'axe l'ancien système d'entrée contrôle nos contrôleurs, votre et la hauteur. Ce sont les directions dans lesquelles notre caméra va se diriger. Il existe maintenant différentes manières de procéder avec le nouveau système. Je vais vous montrer comment procéder maintenant. Nous allons donc commencer par supprimer cet événement car nous ne l' utiliserons plus. Et nous allons accéder au navigateur de contenu. Je vais renommer notre exemple d'entrée. Je vais juste le renommer, disons la souris vers le haut, vers le bas. On peut ouvrir ça. Et je vais changer le type de valeur en un axe D, donc un flottant. La valeur de sortie de notre événement dans notre ThirdPersonCharacter sera donc un flottant. Nous passerons ensuite à nos exemples de contextes de mappage. Nous allons maintenant nous débarrasser de nos mappages actuels et je vais simplement en créer un nouveau. Et nous allons régler cela sur notre souris vers le haut et vers le bas. Et je vais régler cette entrée sur la souris Y. Et la souris Y est le mouvement de notre souris de haut en bas. Nous allons donc sélectionner cela. Nous avons maintenant réglé notre souris vers le haut et vers le bas sur une valeur flottante. Nous avons configuré notre souris Y pour appeler cet événement de souris haut et bas. Passons donc à notre ThirdPersonCharacter et nous trouverons le look de haut en bas. Et je vais le supprimer parce que c'est l'ancien événement. Et nous allons réutiliser la note de hauteur ici. Nous allons donc faire la souris vers le haut ou vers le bas. Vous pouvez voir que sous les événements d'action améliorés, nous avons la souris en haut. À partir d'ici. Nous allons faire glisser le déclencheur vers notre entrée Add controller pitch. Et cela ne fonctionnera que lorsque je déplacerai ma souris. Et il prendra la valeur de l' action le branchera et nous compilerons. Maintenant, rappelez-vous, cela ne fonctionne que parce que j'ai ce code ici en possession qui indique à notre personnage que nous voulons utiliser nos exemples de contextes de mappage, ce que nous avons l'habitude de assigner le mouvement de la souris à notre événement. Donc ce que nous allons faire maintenant, c'est appuyer sur Play et je vais déplacer ma souris de haut en bas. Vous pouvez voir que cela fonctionne, mais mes commandes sont inversées. Ce que je dois faire, c'est inverser les valeurs négatives et positives fournies par ma souris. Pour ce faire, nous pouvons utiliser des modificateurs. Il ira donc à notre événement de haut en bas de la souris ici. Et ici, nous avons une option de modificateurs. Maintenant, les modificateurs sont un peu plus avancés, donc ne vous inquiétez pas trop si vous ne les obtenez pas tout de suite. Mais ce qu'ils nous permettent de faire, c'est de modifier la valeur fournie par notre pression sur une touche ou par le mouvement de la souris, par exemple. Nous allons donc ajouter un nouveau modificateur. Si nous cliquons sur l' option ici, nous en avons plusieurs différentes. Mais ce que nous voulons faire, c'est inverser notre sortie de valeur. Et le Négat ici était ce qui allait faire ça. Nous allons donc le régler pour qu'il soit négatif. Maintenant, quand je clique sur Lecture, si je déplace ma souris vers le haut, je regarde vers le haut et si je la déplace vers le bas, je regarde vers le bas. Encore une fois, cela fait en sorte que lorsque la souris produit une valeur positive, Negate la convertit en une valeur négative. Et puis dans l'autre sens , lorsque la souris fournit une valeur négative, puis le gate la transforme en une valeur positive, et c'est ce qui donne à ma caméra le bon mouvement. Nous avons donc besoin d'un site à site. Maintenant, mon mouvement d'un côté à l'autre fonctionne toujours parce que j' utilise toujours cette ancienne entrée ici. Mais si je supprime ceci et que je clique sur Jouer maintenant, je ne peux que regarder vers le haut et vers le bas. Je ne peux pas regarder d'un côté à l'autre. Nous devons donc mettre en place un mouvement d'un côté à l'autre. Nous allons donc le faire en cliquant avec le bouton droit. vais aller aux plans ou désolé, nous allons aller à Input, input action, et nous appellerons cette souris gauche, droite. Et nous allons ouvrir ça. Nous voulons définir la valeur de type sur l'axe un jour. Ensuite, nous devons passer à notre exemple de contexte de mappage. Et ici, nous devons ajouter un nouveau mappage. Nous allons donc ajouter un nouvel événement. Essentiellement. Nous voulons régler cela sur notre gauche et notre droite. Nous devons y définir une touche ou un mouvement de souris qui fera que cet événement se déroulera. Nous voulons donc souris x, donc c'est le mouvement de notre souris d'un côté à l'autre. Nous allons donc sélectionner cela. Maintenant, dans notre souris vers le haut et vers le bas, nous avons utilisé Negate pour inverser les valeurs qu'il nous fournit. Nous n'avons pas besoin de faire ça avec la gauche et la droite. Maintenant, nous allons simplement revenir à notre ThirdPersonCharacter. Et encore une fois, nous allons cliquer avec le bouton droit de la souris et faire votre souris à gauche , à droite ou à gauche. Nous avons la souris à gauche, à droite, sous les événements d'action améliorés. Et nous allons connecter notre déclencheur pour ajouter un contrôleur. Et nous prendrons notre valeur d'action brancherons et la compilerons. Maintenant, lorsque je vais sur ma carte à la troisième personne et que j'appuie sur Jouer, je peux regarder d'un côté à l'autre et elle se déplace correctement. Je peux regarder de haut en bas. Nous utilisons désormais le nouveau système de saisie amélioré pour contrôler le mouvement de notre caméra. Maintenant, le système de saisie amélioré dispose en fait d'un autre moyen régler le mouvement d'entrée de cet axe vers le haut. Maintenant, au lieu d'avoir à utiliser des nœuds individuels pour cela, nous pourrions le faire avec un seul. Pour ce faire, nous pouvons utiliser un float 2D dans notre événement. Ce que nous allons faire maintenant, c'est supprimer l'événement haut et bas de la souris ici. Nous allons simplement utiliser la souris à gauche et à droite. Je vais en fait le renommer simplement en mouvement de la souris. Nous pouvons maintenant utiliser une seule action de saisie pour contrôler. Les deux regardent d'un côté à l'autre et de haut en bas. Ainsi, dans le mouvement de la souris, nous avons défini notre axe, nous allons définir notre accès à la 2D. Cela signifie qu'au lieu d' une seule valeur flottante, il faudra une valeur X et une valeur Y. Ensuite, nous devons passer à notre exemple de contexte de mappage. Et nous allons nous débarrasser du premier ici. Nous avons déjà eu notre mouvement de souris ici parce que nous venions tout à l'heure le renommer et nous avons notre souris X ici. Mais je vais supprimer ceux qui viennent de créer complètement un nouveau mappage. Nous allons donc les déplacer avec la souris. Nous devons maintenant choisir les mouvements de la souris qui permettront cet événement de déplacement de souris de s'exécuter. Nous allons donc passer à l'option ici. Nous allons rechercher la première souris Y. Maintenant, si vous vous souvenez que notre souris blanche est notre haut et notre bas, et que nous devons inverser cette valeur. Nous avons donc besoin d'un modificateur, et nous devons définir ce modificateur pour qu'il inverse la vallée montante et descendante. Ensuite, nous avons besoin d'une nouvelle contribution. Ajoutez donc une nouvelle entrée. Ce sera mouse x. Maintenant, si vous vous souvenez qu' avant nous avions des événements individuels pour mouse white et mouse x, maintenant nous les faisons tous les deux dans le même événement. Nous avons donc ajouté à la fois notre souris blanche et une entrée souris X. Quatre d'entre eux iront au ThirdPersonCharacter ici. Et nous allons supprimer les événements que nous avions précédemment. Maintenant, au lieu d'avoir deux événements distincts pour chacun de ces nœuds qui contrôlent le mouvement de ces nœuds qui contrôlent haut en bas et d'un côté à l'autre, nous allons cliquer avec le bouton droit de la souris et rechercher le mouvement de la souris. Des mouvements de souris comme ça. Et nous avons mis en place notre nouvel événement de mouvement de souris . Donc maintenant nous allons prendre le déclencheur, nous allons le brancher pour contrôler la hauteur. Et nous allons brancher ça à toi comme ça. Vous pouvez maintenant voir que nous avons une valeur d'action, et il s'agit simplement d'un vecteur 2D. Donc, si nous faisons glisser vers l'extérieur, nous pouvons créer un nœud de rupture qui nous donne simplement accès aux valeurs de flux X et Y. Il utilisera donc ces valeurs pour contrôler notre mouvement de caméra haut et bas et d'un côté à l'autre de la caméra. Notre x est donc toujours notre site à site. Nous allons donc le brancher sur l'entrée de votre manette. Et le Y est en haut et en bas. Nous allons donc le brancher sur l'entrée pitch de notre contrôleur. Et maintenant, nous pouvons compiler. Et nous sommes prêts à le tester pour pouvoir jouer. Et si je déplace ma souris, je décide que ça fonctionne bien. Mais si je le déplace de haut en bas, il se déplace toujours d'un côté à l'autre. Nous pouvons déplacer la caméra vers le haut ou vers le bas. Maintenant, la raison en est que si nous revenons à notre exemple de contexte de mappage, le blanc de la souris et le mouseX ne nous fournissent qu' une seule valeur flottante. Maintenant, si nous allons à notre événement, vous pouvez voir que nous avons deux sorties de flux. Maintenant, ces deux entrées pour notre souris haut et bas et côte à côte, ou les deux essaient d'utiliser cette valeur x. Mais ils ne peuvent pas l'utiliser tous les deux. Nous devons indiquer à l'un d'eux qu'il doit utiliser la sortie y. Donc, dans notre contexte de mappage, dans les modificateurs de notre souris Y, nous allons ajouter un nouveau modificateur. Et nous allons définir cela sur les valeurs de l'axe d'entrée Suisse. Et si vous lisez l'infobulle, elle explique en fait ce qu'elle fait. Il est utile de mapper une entrée 1D, qui est ce que notre souris est Y, c'est une entrée 1D sur l' axe y d'une action 2D. Donc, si vous vous souvenez bien, le mouvement de la souris est un axe 2D. Notre commutateur va donc mapper la valeur de l'axe Y de notre souris Y à cette seconde valeur y. Nous allons donc l'utiliser. Donc maintenant, notre mouvement d'un côté à utilisera la valeur X ici. Et notre mouvement vers le haut et vers le bas utilisera désormais la valeur y à cause du modificateur que nous venons d'ajouter. Si je clique sur Lecture, je déplace ma souris de haut en bas, et tout fonctionne correctement. sont donc que quelques exemples de la façon dont vous pouvez utiliser entrées d'accès avec le nouveau système de saisie amélioré. Il existe maintenant d'autres types de modificateurs que vous pouvez appliquer à vos entrées clés si vous le souhaitez, vous pouvez les ajouter là où nous avons ajouté des valeurs sur une porte et des valeurs suisses ou d'axe d'entrée. Je ne les aborderai pas dans cette leçon parce qu'il y en a pas mal. Mais si jamais vous voulez savoir ce qu'ils font, vous pouvez simplement le survoler avec la souris et cela vous donnera une brève description de ce que chacun fait. Nous pouvons maintenant appliquer des modificateurs à une entrée solo, comme nous l'avons fait ici avec l'entrée Y de la souris. Nous avons ajouté l'entrée Negate et Switch. Vous pouvez également appliquer ces modificateurs dans le mouvement de la souris. Désormais, tous les modificateurs que nous ajoutons ici affecteront toutes les touches que nous ajoutons à ce mouvement de souris dans nos contextes de mappage. Il est donc important de se rappeler que parfois vous voudrez ajouter modifications à une seule entrée comme nous l'avons fait avec la souris Y, au lieu de simplement les appliquer au type d'entrée, car cela affectera toutes les clés que vous liez à ce type. Pour résumer, le système de saisie amélioré nous permet de créer des actions de saisie comme le mouvement de la souris. Nous pouvons ensuite créer un contexte de mappage, dans lequel nous pouvons définir les clés que nous appellerons nos nouvelles actions d'entrée. Ensuite, nous pouvons créer ces actions de saisie à l'intérieur de notre personnage ou contrôler les plans. Ensuite, à l'aide de déclencheurs, nous pouvons choisir comment appuyer sur cette touche pour que l' événement soit activé, puis les modifications nous permettent de modifier la valeur d'action fournie par cet événement. Pour que ces événements fonctionnent, nous devons nous assurer que nous utilisons le contexte de mappage d'ajout. Et nous pouvons l'utiliser en obtenant le contrôleur du joueur, obtenant le sous-système amélioré d'entrée des joueurs locaux. Cela nous permet d' ajouter un contexte de mappage. Ensuite, nous définissons les contextes de mappage que nous voulons utiliser. Nous avons donc utilisé l' exemple de contexte de mappage. est donc ce que j'ai défini ici. Si nous n'avons pas ce code, les événements d'entrée que nous avons utilisés ne fonctionneront pas. Ce sera donc tout pour cette leçon. J'espère que vous avez une meilleure compréhension du fonctionnement actuel du système de saisie amélioré et que nous l'utiliserons un peu plus dans nos prochaines leçons. 30. Leçons supplémentaires (Tags): Salut tout le monde. Dans cette leçon, nous allons examiner les balises d' acteur et de composant. Maintenant, si vous suiviez notre leçon précédente, tout ce que j'ai fait ici est de créer un nouveau modèle à la troisième personne pour que nous puissions repartir à zéro. Cela commence donc par les balises qui sont essentiellement un tableau de variables de nom intégrées à la fois aux axes et aux composants. Et grâce à cela, cela signifie que nous pouvons obtenir un acte en tant que balises ou balises de composants sans avoir à payer pour un autre Blueprint. Utilisez les interfaces Blueprint. Ensuite, nous pouvons utiliser certains des nœuds intégrés au moteur pour vérifier si un acteur possède une étiquette. Ou nous pouvons faire quelque chose comme obtenir tous les acteurs du monde qui ont un tag spécifique. Nous allons commencer par aller sur ThirdPersonCharacter et je vais vous montrer où vous pouvez ajouter de nouveaux tags. Je vais juste faire glisser ça en haut ici. Ensuite, les valeurs par défaut de notre classe vont simplement rechercher un tag. Et ici, vous pouvez voir que nous avons une option tags et qu'il s'agit d'un tableau, et c'est juste un tableau de noms comme nous l'avons déjà utilisé. Donc, si nous cliquons sur le bouton Plus ici, nous pouvons ajouter une nouvelle entrée. Je peux le régler pour dire joueur. Nous pouvons également ajouter de nouvelles entrées si nous voulons simplement en cliquant sur le bouton plus, si nous voulons supprimer des entrées, nous pouvons simplement cliquer sur la flèche vers le bas à côté de la zone de texte et appuyer sur Supprimer. Nous avons maintenant ajouté un tag à notre ThirdPersonCharacter et cette cible est plan. Nous avons maintenant besoin d'un plan qui va lire ces textes. Je vais donc créer un nouveau plan et le navigateur de contenu. Et nous allons sélectionner Acteur et je vais juste appeler ce déclencheur, l'ouvrir. Je vais ajouter un composant de collision de boîtes. Je vais juste le déplacer un peu plus haut. Nous allons aller aux détails tels que hidden and untick, hidden et game juste pour que nous puissions nous asseoir et que nous compilions. Comme nous l'avons déjà fait auparavant, nous allons passer au graphique d'événements. Je vais supprimer le début de la lecture et les nœuds de tick, et nous allons utiliser le nœud acteur qui commence à se chevaucher qui est déjà là. Maintenant, si vous vous souvenez, ce nœud s'exécute chaque fois que quelque chose chevauche notre déclencheur et nous donne accès à l'autre acteur qui chevauche le déclencheur. Maintenant, normalement, si je voulais obtenir informations qui se trouvent dans mon personnage ThirdPersonCharacter, je dois faire glisser mon personnage à la troisième personne ou configurer une interface Blueprint pour récupérer cette information. Maintenant, comme nos tags sont intégrés à notre acteur, nous n'avons pas à le faire parce que c' est déjà une épinglette d'acteur. Nous pouvons donc faire glisser et accéder à nos balises afin que je puisse rechercher get tax. Et vous voyez que je peux accéder à mon tableau de balises. Cela se comporte alors comme un tableau normal. On peut traîner. Nous pouvons utiliser un nœud get avec celui-ci. Tout ce que nous pouvons faire glisser et nous pouvons parcourir toutes les balises qui se trouvent sur notre acteur. Maintenant, act est livré avec des balises, des fonctions spécifiques intégrées afin que nous puissions faire glisser et nous pouvons rechercher une balise has. Nous pouvons utiliser le nœud actor has tag et cela vérifie simplement que c'est le tag que nous avons défini ici. Ou est-ce que cet accessoire porte l'étiquette que nous avons fixée ici ? Si c'est le cas, alors cela retournera vrai, sinon, il retournera faux. Nous pouvons donc tester cela. Maintenant, je peux m'éloigner d'ici. Il fera un clic droit et recherchera la chaîne d'impression. Nous allons connecter cela à notre début de chevauchement, et je vais le brancher dans notre sortie booléenne, compiler, jeter un de ces éléments dans la carte ici, ce qui le rendra un peu plus grand. Pour redimensionner ou pour afficher l'outil de redimensionnement, je vais le rendre un peu plus grand. Appuyez sur Play. Maintenant, quand je rencontre mon cube ici, vous pouvez voir qu'il retourne false parce que je n'ai pas défini le Typekit. Nous allons donc le configurer pour compiler et appuyer sur Play. Et maintenant, quand je rencontre le donjon et vois que cela revient vrai parce que notre personnage de joueur a cette étiquette de joueur. Maintenant, comme notre tag n'est qu'un tableau de noms, nous pouvons également y ajouter pendant le jeu. Donc, si nous le voulions, nous pouvions faire glisser et obtenir des balises. Et en utilisant ce PIM de tableau, nous pouvons faire glisser et utiliser l'Add Node. Et nous pourrions ajouter un nouveau tag à notre plan. Nous pourrions donc ajouter « say on fire tag ». Ensuite, nous supprimerons ces notes ici pour l'instant. Ensuite, nous pourrions faire glisser à nouveau depuis nos balises et faire une boucle. Nous parcourons donc en boucle toutes les balises actuelles et nous imprimerons la chaîne, les balises actuelles du joueur. Nous allons donc le connecter à la chaîne d'impression et l'élément du tableau à la chaîne sera compilé. Appuyez sur Play. Maintenant, quand je tomberai dans la boîte ici, ça va ajouter une nouvelle étiquette à notre intrigue. Ensuite, il va imprimer les noms de ces étiquettes. Juste comme ça. Maintenant, nous pouvons également ajouter des balises aux composants. Donc si nous sortons de l'avion, je me sens juste blessé et je vais voir notre ThirdPersonCharacter. Nous allons supprimer cette recherche pour le moment, et je vais sélectionner quelque chose comme le composant capsule ici. s'agit donc d'un composant et c'est la forme de la capsule qui se trouve dans notre fenêtre de vision ici. Et si j'ai sélectionné rechercher une balise dans le panneau Détails en C, nous avons des balises de composants. Maintenant, ceux-ci fonctionnent exactement de la même manière que notre après impôts c'est juste que ces balises sont spécifiques à ce composant. Nous pouvons donc ajouter un nouveau tag, Oh cool, cette collision. Et je vais compiler. Maintenant, si nous revenons à notre déclencheur, je vais devoir lancer un personnage en utilisant mon autre épinglette d'acteur ici. Parce que si tu te souviens, l'acteur ne contient pas vraiment les composants de la capsule, donc je ne pourrai pas le trouver. Mais si je choisis le personnage. Comme ça. Et nous supprimerons le reste de ce code. Ensuite, à partir de notre personnage, nous voulons obtenir le composant capsule. Et c' est en bas. À partir de là, nous pouvons faire glisser et rechercher une balise has. Vous pouvez voir qu'un composant a marqué une note ici, et cela fonctionne exactement de la même manière que notre tag ou notre acteur a marqué le nœud. Nous avons défini une étiquette que nous voulons vérifier. Collision. Elle retournera vrai ou faux si composant capsule de ce personnage possède cette étiquette de collision. Donc, il fera glisser autre chaîne d'impression et se connectera ici, appuyez sur Compiler. Et maintenant, quand nous passerons en revue notre boîte ici, vous pouvez dire qu'elle est de retour vraie. Les tags sont donc un moyen très pratique d'ajouter un peu d' informations supplémentaires à n'importe quel acteur. Donc tout ce qui se trouve dans le niveau ou n'importe quel composant de ces acteurs. Un bon exemple de l'utilité des balises est peut-être de créer un système d'IA à l'avenir. Et vous voulez que l'IA soit capable de savoir si un acteur est un ami ou un ennemi. Vous pouvez le faire à l'aide de balises. Comme tous les acteurs et votre niveau ont des balises intégrées, vous pouvez ajouter ces balises à n'importe quel objet et ils seront capables de le lire. Désormais, les tanks sont également utiles pour obtenir des acteurs ou des composants. Donc si nous acceptons notre plan car ce sont ses cheveux et revenons à notre déclencheur. Je vais juste supprimer ces nœuds. Si vous vous souvenez, nous avons le composant get par notes de classe. Donc, si je le recherche, que récupère le composant par classe, vous pouvez voir que nous avons déjà utilisé ce nœud auparavant et cela nous permet d'obtenir un composant à partir d'un plan spécifique. Maintenant, nous avons également le nœud get components by tag. Donc, si nous le créons ici, nous pouvons obtenir tous les composants qui se trouvent à l'intérieur d'un Blueprint avec une balise spécifique. Si vous vous souvenez, lorsque nous définissons notre étiquette dans notre composant Capsule, ce sont les balises qu' il recherchera. Ensuite, il affichera tous les composants qui ont cette balise spécifique que nous avons définie. Par exemple, je pourrais définir ceci sur collision comme ça. Nous allons faire glisser vers l'extérieur et nous allons obtenir la longueur de ce tableau. Et nous allons imprimer la chaîne, la longueur, faire glisser à partir d'ici et imprimer la chaîne comme ça. Maintenant, lorsque nous passons sur le déclencheur, nous devrions le voir en imprimer un. Maintenant, nous pouvons également obtenir les acteurs qui ont attaqué. Donc, si nous revenons à notre déclencheur et que nous cliquons avec le bouton droit de la souris et quel acteur avec étiquette. Vous pouvez voir que nous avons le nœud get all actors with tag. Nous pouvons donc créer cela. Et cela permettra d'obtenir tous les acteurs de notre niveau qui ont un tag spécifique. Maintenant, en guise d'avertissement, c'est un nœud assez performant, donc vous ne voulez pas l'utiliser sur la technologie par exemple. Il y a aussi une autre option pour obtenir tous les acteurs que nous avons tagués maintenant, si nous cliquons avec le bouton droit de la souris pour obtenir tous les acteurs Vous pouvez voir qu' il y a des acteurs de ghetto de classe avec des tags. Donc, si nous créons cela, cela fera la même chose que le nœud ici, mais il limitera sa sélection à un acte de type spécifique. Peut-être que nous avions beaucoup d' acteurs avec un tag ennemi, par exemple, mais nous voulions seulement avoir ceux qui étaient ThirdPersonCharacter. Peut-être avez-vous eu beaucoup de personnages qui avaient le tag ennemi, mais nous n'en avons qu'un seul pour obtenir notre ThirdPersonCharacter, nous pouvons le définir ici. Désormais, seuls les plans des personnages à la troisième personne qui ont le tag ennemi seront renvoyés plans des personnages à la troisième personne qui . Les balises sont donc un moyen très pratique d'ajouter un peu d' information à n'importe quel objet dans le monde ou à n'importe quel composant. C'est donc tout pour cette leçon. J'espère que vous comprenez maintenant à quoi servent les balises et comment elles fonctionnent dans le moteur. 31. Leçons supplémentaires (les acteurs de fraye): Salut tout le monde. Dans cette leçon, je vais vous parler des acteurs géniteurs. Soutenir les acteurs est la façon dont nous créons nouveaux objets dans le monde pendant le jeu. Cela va donc commencer par la création d'un nouvel acteur que nous allons engendrer. Je vais juste créer un cours de plan. Je vais le définir sur un acteur, et je vais simplement appeler cet exemple de sphère. Et nous allons ouvrir ça. Je vais juste faire glisser ça en haut ici. Je vais ajouter un nouveau composant ou rechercher sphère et nous allons créer une forme de sphère. Je vais également permettre, si nous allons à la physique ici, simuler la physique, juste pour que si nous la plaçons dans le monde, elle commence à rouler et à avoir de la physique. Nous allons maintenant revenir à la carte. Je vais simplement supprimer ce déclencheur. Cela vient de notre leçon précédente. Tu n'as pas à t'inquiéter à ce sujet si tu ne l'as pas. Et nous allons passer à notre ThirdPersonCharacter. Et puis ici, je vais créer de nouveaux événements d'entrée. Nous allons donc rechercher l'événement d'entrée un. Et si vous vous souvenez, ce nœud s'exécute chaque fois que j'appuie sur un de mon clavier. Maintenant, pour générer des acteurs dans le monde, nous utilisons l'acteur cuillère du nœud de classe. Nous l'avons déjà utilisé un peu plus tôt, mais dans cette leçon, nous allons expliquer en détail comment cela fonctionne. Donc, en commençant par le haut, nous avons la classe. C'est le type de plan que nous créons dans le monde. Sera en mesure de sélectionner n'importe lequel de nos plans dans notre navigateur de contenu. Si nous cliquons sur le bas de notre hanche, belle recherche, par exemple, sphère. En C, nous avons trouvé notre exemple de sphère. C'est un peu difficile à voir parce que le point culminant, mais c'est que si je clique dessus, vous pouvez voir que notre classe est maintenant un exemple de natation. Vous pouvez voir que le nom du nœud a réellement changé pour générer une sphère d'exemple d' acteur. Et cela change en fait le type de valeur de retour. Donc, si nous survolons cela, vous pouvez voir qu'il s'agit maintenant d'un exemple de référence d' objet sphère, ce qui signifie que si nous avions des variables, disons dans notre exemple, je vais créer une nouvelle variable rapidement, qui a donné cet exemple. Je peux sonder. Maintenant, si je fais glisser la valeur de retour, je peux simplement obtenir cette variable d' exemple. Je n'ai pas besoin de lancer ma sphère à partir de cette valeur de retour car nous avons déjà indiqué au nœud que nous créons ce type et qu'il a défini la valeur de retour sur cette référence de sphère d' exemple. Cela peut donc être pratique si vous avez des fonctions ou des événements que vous souhaitez refroidir dès que le plan est généré. Ensuite, nous avons la transformation de spawn. C'est l'endroit dans le monde où l' acteur sera engendré. Si nous faisons glisser vers l'extérieur, nous pouvons utiliser la note make transform ici qui nous permet de définir l'emplacement, rotation et également l' échelle de l'acteur. Maintenant, nous pouvons également, si nous le déconnectons, cliquer avec le bouton droit de la souris sur la transformation de spawn ici et faire Split Struct Pin. Et vous pouvez voir que nous pouvons réellement accéder à l'emplacement, rotation et à l'échelle directement sur le nœud ici si nous le voulons. Ou nous pouvons cliquer à nouveau avec le bouton droit de la souris et recombiner, ce qui les recombinera dans ce stylo de transformation. Maintenant, lorsque vous créez un acteur, il peut entrer en collision ou quelque chose d'autre dans le monde alors qu'il essaie d'apparaître. Nous avons donc des paramètres de gestion des collisions. Désormais, les paramètres par défaut du projet seront définis dans les paramètres du projet. Ensuite, nous avons toujours ignoré les collisions. Cela signifie qu'il ne se soucie pas des collisions. Ils apparaîtront à l'endroit où vous êtes SAP. Nous avons essayé d'ajuster l' emplacement mais nous nous sommes toujours heurtés. Cela signifie que s'il essaie d'apparaître à un endroit qui se chevauche, y a autre chose de collision. Il essaiera d'ajuster légèrement la position afin qu'elle ne chevauche pas cette collision. Ensuite, nous avons essayé d'ajuster la position, ne pas apparaître si vous planez toujours. Cela fait donc la même chose. Il essaie d'ajuster l' emplacement qui apparaît en cas d'interférence de collision. Mais s'il ne trouve pas d'endroit où apparaître sans collision, alors il n'engendrera pas cet acteur. Et puis nous n'avons pas de spawn, ce qui signifie que l' acteur ne va tout simplement pas apparaître s'il entre en collision avec quoi que ce soit. Pour cela, je veux toujours que ma sphère apparaisse. Donc je vais juste mettre toujours spawn, ignorer les collisions. Maintenant, le stylo instigateur est une référence de pion. Maintenant, nous n'avons pas besoin de le brancher pour que notre acteur apparaisse, mais cela nous permet de dire à l'acteur quels joueurs sont apparus. Cela peut être utile, disons, peut-être que vous créez des projectiles à partir d'un pistolet. Ensuite, vous devriez indiquer aux projectiles quel joueur les a générés afin que lorsque ces projectiles touchent un autre joueur, par exemple, celui d'un joueur puisse voir qui leur a infligé des dégâts. Il y a d'autres utilisations pour cela, bien sûr, pas seulement pour les projectiles, mais ce n'est qu'un exemple. Ensuite, si nous cliquons sur la flèche vers le bas, nous avons le propriétaire. Encore une fois, il s'agit d'un stylo que vous n'avez pas besoin de brancher et qui est généralement utilisé pour la réplication et le codage multijoueur. Mais cela nous permet de définir une variable à l'intérieur de l'acteur. Et si nous allons dans notre sphère ici, vous pouvez rechercher le propriétaire. Cela nous permet de nous approprier le plan. Maintenant, si nous l'avons défini lorsque nous avons créé le plan, ce nœud retournera là où nous l'avons branché sur l' épingle propriétaire lorsque nous l'avons généré ce nœud retournera là où nous l'avons , nous pouvons également accéder à l'instigateur. Donc, si je reviens à mes exemples pour elle, nous pouvons obtenir l'instigateur et nous pouvons aussi obtenir cette variable. Et cela reviendra partout où nous le brancherons sur la broche d'instigateur lorsque nous créerons ce plan. Il s'agit de toutes les entrées par défaut fournies avec ce nœud. Mais nous pouvons en fait ajouter le nôtre si nous revenons à notre exemple, donc ici, et je sélectionne mon exemple variable dans ces paramètres pour cela, nous pouvons utiliser l'option exposée sur spawn. Maintenant, avant de nous occuper de cela, nous devons prendre une instance modifiable. Ensuite, nous pourrons participer aux expositions sur place. Et si nous compilons et revenons au plan ThirdPersonCharacter, nous le compilerons également. On devrait voir cette épingle. Maintenant, il n'est pas apparu pour moi. Je vais donc cliquer avec le bouton droit sur le nœud et actualiser le nœud. Vous pouvez voir que les épingles sont apparues. Parfois, cela se produit et il suffit d' actualiser le nœud. Parfois, lorsque vous recompilez le stylo apparaît simplement. C'est juste que c'est un peu aléatoire. Mais comme vous pouvez le voir, nous avons maintenant l'exemple de variable input. Nous pouvons donc définir ceci sur vrai ou faux. Et cela se réglera réellement lorsque les acteurs généreront cette valeur de départ variable. Nous l'avons fait avec un booléen, mais vous pouvez le faire avec n'importe quelle variable de votre choix. Si nous voulions dire « avoir un bateau à flot » et que nous voulions que cela s'appelle « dommage ». Nous pourrions le faire et nous pourrions le définir sur Incent dit que c'est bobine non exposée sur le composant spawn. Revenez à notre personnage à la troisième personne. Vous pouvez voir si je peux effectuer un sondage, il n'apparaît toujours pas, mais je vais cliquer avec le bouton droit sur Actualiser. Maintenant. Vous voyez que maintenant nous avons également un stylo de mise dommageable. Nous sommes maintenant prêts à faire apparaître notre sphère. Je vais donc relier le pressée à notre exemple ici. Et maintenant, nous devons définir un emplacement que nous voulons séparer. Maintenant, je veux faire apparaître ma sphère dans la direction où ma caméra regarde, disons, trois mètres devant mon personnage. Donc, ce que nous allons faire, c'est cliquer avec le bouton droit de la souris et contrôler la rotation. Voici la rotation de notre caméra. Je vais faire glisser à partir de là et je vais faire la rotation, rotation x vecteur, et cela obtient la direction vers l'avant pour nous, pour notre caméra. Ensuite, vous multipliez cela par, nous voulons changer ce stylo en un flotteur. Donc, si vous vous souvenez, nous cliquons dessus avec le Nous les convertissons et nous les transformons en float. Je vais faire de la double précision. Voici donc où nous définissons la distance à laquelle nous voulons que nos objets se déplacent. Je vais donc en faire 300. Et c'est en centimètres, ce qui le fait reculer un peu. Nous avons donc plus d'espace. Ensuite, nous devons faire glisser à nouveau et ajouter. Maintenant, nous devons ajouter la position actuelle de notre acteur, car actuellement nous nous déplaçons dans une direction de 300 centimètres Ford, mais nous n'avons pas de lieu de départ. Nous allons donc obtenir l'emplacement de l'acteur. On va brancher ça ici. Désormais, cet emplacement généré par notre nœud d' ajout sera notre emplacement d'accès. Mais Ford 300 centimètres dans n'importe quelle direction que nos caméras regardent. Nous pouvons donc le brancher maintenant à notre emplacement ici. Maintenant, je n'ai pas à faire la rotation parce que c'est juste. Et je vais juste laisser l'échelle à un pour l'instant pour qu'elle soit compilée. Et maintenant, nous pouvons l'essayer. Je vais sauter dans le niveau. Je vais appuyer sur Play. Et si j'appuie sur une, vous pouvez voir que nous frayons dans notre sphère où que je regarde, mais 300 centimètres devant nous. C'est donc à peu près comme ça on fait naître de nouveaux acteurs dans un monde. Ensuite, je vais vous montrer comment détruire des acteurs. Pour cela, je vais réutiliser notre déclencheur de notre dernière leçon. Si vous n'avez pas ceci ou s'il s'agit d'un, nous pouvons supprimer ces nœuds et le code. Et voici, tout cela, c' est une case de collision que nous avons définie ici, j'ai dit que « caché » est cochée, et c'est tout. Nous avons donc un événement qui commence à se chevaucher ici. Ce que nous allons faire, c'est vérifier si l' acteur qui se chevauche est un ensemble d'exemples. Si c'est le cas, nous le détruirons. Nous pouvons donc traîner et nous pouvons soit faire des coûts par exemple, une sphère comme celle-ci. Maintenant, cela coûte plus lorsque nous avons réellement besoin d'obtenir des informations à partir d'un plan directeur. Parce que nous n'avons pas vraiment besoin d'obtenir informations de ce plan que nous voulons juste vérifier, est-ce un exemple où nous pouvons réellement faire glisser et obtenir une classe comme celle-ci. Et ça obtient la classe des acteurs. Il obtient donc le type de plan qui provient de notre navigateur de contenu. Et à partir de là, nous pouvons tirer quand pouvons réellement faire des égaux. Et nous pouvons vérifier si elle est égale à la sphère d'exemple. Et si c'est le cas, nous voulons le détruire. Nous allons donc utiliser un nœud f comme celui-ci. Et nous allons nous éloigner des autres acteurs et détruire. Et il y a un nœud appelé Destroy Actor qui tue ou détruit notre acteur dans le monde comme ça. Cela nous évite donc de lancer. Il s'agit de quelques nœuds supplémentaires, mais le casting demande un peu de performance. Donc si nous n'avons pas à le faire, alors idéalement nous ne voulons pas lancer de casting. Maintenant, nous voulons essayer ça. Je vais aller sur la carte à la troisième personne et ajouter notre déclencheur. Je vais le mettre ici et l'agrandir un peu. Mets-le à l'échelle un peu. Et nous allons jouer. Et je suis né dans une sphère. Alors je fraie par ici. Et je peux m'occuper de tout ça parce que la physique est activée. Il suffit de le mettre dans cette boîte et vous verrez qu'il sera détruit instantanément. Il existe un autre moyen de détruire les acteurs. Si nous revenons à notre déclencheur, nous pouvons supprimer ce nœud Destroy Actor. On peut traîner et on peut définir la durée de vie comme ça. Maintenant, le nœud de durée de vie définie nous permet de dire à un acteur que nous voulons qu'il soit détruit après un certain temps. Je peux donc régler ça pour en dire un. Maintenant, 1 seconde après que la sphère chevauché la gâchette, elle sera détruite. Nous pouvons donc essayer ceci et cliquer sur Play. Je peux apparaître dans une sphère. Je vais le mettre dans notre boîte et vous verrez qu'il n'a pas encore été détruit et qu'il se détruit au bout d'une seconde. Nous pouvons modifier cette valeur pour dire trois juste pour que ce soit un peu plus évident. Appuyez à nouveau sur un, puis insérez-le. Vous pouvez voir qu'il est sorti de l'autre côté. Et puis il détruit Parce que j' ai demandé d'attendre trois secondes. C'est donc tout pour cette leçon. J'espère que vous comprenez maintenant comment créer et détruire des acteurs dans le monde. 32. Leçons supplémentaires (code Organization): Bonjour à tous, Dans cette leçon, je vais vous présenter certaines des fonctionnalités d'organisation du code intégrées au moteur. Maintenant, je viens de rassembler un peu de code ici. C'est juste à titre d'exemple, vous n'avez pas à le copier vous-même. C'est juste pour vous montrer les différentes fonctionnalités que nous pouvons utiliser pour organiser notre code. Pour commencer, nous avons des nœuds de redirection. Maintenant, si je double-clique sur une ligne blanche ici, nous pouvons créer ces nœuds de redirection. Maintenant, cela nous permet de contrôler où ira réellement le stylo. Et ils n'ont aucun objectif fonctionnel. Ils n'affectent pas la façon dont le code est exécuté. Tout ce qu'ils font, c'est vous aider à garder votre code bien rangé. Vous pouvez donc double-cliquer sur une ligne blanche ou sur une lumière variable. Par exemple, une ligne jaune ici. Je peux double-cliquer dessus et créer des nœuds de redirection pour cela. Vous pouvez également cliquer avec le bouton droit de la souris, faire défiler jusqu'en bas ici, et vous pouvez utiliser la note de redirection AD ici qui crée également un nouveau stylo de redirection. Cela peut donc être pratique si vous voulez contourner du code qui vous gêne. Par exemple, je pourrais ajouter un F sans pourboire. Et peut-être que je voulais ce code soit exécuté si quelque chose était vrai, mais je voulais du code ici pour l'exécuter si ce n'était pas vrai. Donc je pourrais copier-coller ça et tu y mets un C. Donc, au lieu de cela, je pourrais faire glisser de false à mon acte d'apparition pour le noter, double-cliquer sur cette ligne blanche, les faire glisser vers le bas. Maintenant, nous avons un beau code propre. Ce code s'exécutera s'il est vrai, puis nous allons juste zigzaguer autour de lui et exécuter ce code s'il est faux. Ensuite, nous avons des commentaires. Les commentaires sont maintenant très importants pour garder votre code bien rangé. Et aussi si vous travaillez avec d'autres personnes ou si les commentaires sont importants pour qu' ils puissent facilement et rapidement consulter votre code et voir ce que font les parties de celui-ci. Donc, pour créer un commentaire, nous pouvons mettre en surbrillance certains nœuds et appuyer sur la touche C de votre clavier. Et cela créera un nouveau commentaire. Nous pouvons ajouter du texte à cela pour que je puisse écrire create player, HUD. Maintenant, je peux juste regarder ce commentaire. Je sais que ces nœuds créent ici la hutte du joueur. Nous pouvons maintenant contrôler la couleur des zones de commentaires. Je peux donc changer ça pour dire rouge. Je peux augmenter ou diminuer la taille de la police avec cette valeur ici, je peux afficher une bulle. Donc, si nous effectuons un zoom arrière, il peut être un peu difficile de voir le texte avec les textes à bulles d'émission allumés. Vous pouvez voir que nous obtenons cette petite bulle qui se redimensionne lorsque nous effectuons un zoom arrière. Et si nous sélectionnons à nouveau la zone de commentaire, vous pouvez voir que nous avons la bulle de couleur qui nous permet simplement de changer la couleur de la bulle ici. Ensuite, nous avons le mode mouvement. Maintenant, si nous déplaçons la boîte contenant des nœuds, cela amène ces nœuds avec elle. Mais si nous voulons désactiver cela, nous pouvons le remplacer par un commentaire. Et maintenant, seule la boîte de commentaires sera déplacée. Si vous souhaitez modifier le texte, vous pouvez toujours double-cliquer dessus de cette façon. Si vous le sélectionnez, vous pouvez également modifier le texte du commentaire ici. Vous pouvez également créer des commentaires comme si vous cliquiez avec le bouton droit de la souris sur le défilement jusqu' en bas. Il y a une option d'ajout de commentaire laquelle vous pouvez cliquer et qui crée simplement un nouveau nœud de commentaire. Nous pouvons également redimensionner le nœud de commentaire simplement en faisant glisser le bord dans la direction souhaitée et vous pouvez le redimensionner. Vous pouvez également utiliser des boîtes communes à l'intérieur des boîtes. Donc, si je l'agrandisse un peu, si je sélectionne, disons ces nœuds, je peux ajouter un nouveau commentaire à cela. Et je peux ajouter des textes qui me permettent de créer un widget, par exemple. Une autre bonne chose à propos des commentaires est si je peux le faire, si je fais Control F, qui nous permet rechercher des phrases clés dans le plan . Si je recherche, disons, créer un HUD de joueur, qui est ce qui se trouve dans mon commentaire, vous pouvez voir que trouve réellement le commun et cela me dit ce qu'il y a dans ce commentaire. Si je double-clique dessus, cela m' amène à cette zone de commentaire. Nous allons maintenant examiner la note réduite. Donc, si nous zoomons ici et que nous sélectionnons ce code, par exemple, si je clique avec le bouton droit sur l' un des nœuds, je peux sélectionner Réduire les nœuds. Si je clique dessus, nous obtenons ici cette nouvelle note que je peux nommer. Alors c'est cool, ce feu, par exemple. Maintenant, il suffit de prendre les notes que nous avions sélectionnées et de les compresser en un seul nœud ici. Donc, si je double-clique dessus , vous pouvez voir que tous nos nœuds existent toujours. Ils sont ici et ils fonctionneront toujours quand on appuiera sur un, il était toujours en train de générer une sphère. C'est juste que maintenant tous ces nœuds sont contenus dans ce nœud unique. Nous pouvons maintenant ajouter des entrées et des sorties à notre nœud de réduction si nous le voulons , comme pour une fonction ou une macro. Nous pourrions donc ajouter une entrée, exemple une sortie de broche d'exécution, et une sortie d'exécution. Nous pouvons également ajouter une sortie booléenne, par exemple. Et si nous ouvrons notre effondrement savoir T, vous pouvez voir que le nœud d'entrée I a maintenant cette entrée d'exécution. Nous avons également cette sortie d'exécution et notre stylo booléen. Contrairement à une macro ou à une fonction, nous n'avons pas besoin d' exécuter ces broches pour que le code à l'intérieur du nœud de réduction s'exécute. Parce que notre note de presse est à l'intérieur de notre nœud d'effondrement. Il fonctionnera toujours sans que nous exécutions ces broches en dehors du nœud d'effondrement. Personnellement, la façon dont j'aime les utiliser est de regrouper le code ensemble. Par exemple, nous avons tout ce code ici. C'est à peu près juste pour le mouvement du personnage. Nous pourrions donc cliquer avec le bouton droit de la souris, faire un nœud réduit, puis je pourrais appeler cela un mouvement. Maintenant, tout mon code de mouvement se trouve au même endroit où je peux aller, c'est tout ici. Et peut-être que j'aurais un nœud d'effondrement pour ma mécanique de tir, mon escalade et bien d' autres choses encore. De cette façon, vous n'avez pas seulement des tonnes de code et votre Event Graph. Si vous souhaitez annuler fait que votre code figure dans un graphique de réduction, nous pouvons toujours cliquer avec le bouton droit sur le graphique réduit et nous pouvons faire le nœud d'expansion qui supprimera réellement nos claps et ramenez l'ensemble de notre code dans Event Graph. Vous avez peut-être remarqué l'autre option de réduction. Donc, si nous cliquons avec le bouton droit, il y a une fonction Réduire pour fonctionner et Réduire en macro Gardez à l'esprit que ces événements ne peuvent pas exister dans une fonction ou une macro. Donc, si je devais cliquer dessus avec le bouton droit de la souris et que je réduis la fonction, vous verrez que nous obtenons une erreur, mais le code ici pourrait exister dans une fonction. Donc, si je sélectionne cela et que je fais une fonction réduite, vous pouvez voir qu'elle crée cette nouvelle fonction, ajoute automatiquement l'entrée pour nous également. Si nous l'ouvrons, vous verrez que notre code est là. Si nous revenons à notre graphique d'événements ici, il existe également l'option pour plusieurs graphes d'événements. Vous pouvez donc voir que nous n'en avons qu'un. Et si nous cliquons sur la flèche vers le bas ici, nous pouvons voir notre note d' effondrement d'incendie qui nous donne également une liste de tous les événements actuels dans le graphique des événements. Nous pouvons créer de nouveaux graphiques d'événements et en créer un nouveau. Je pourrais appeler cela le mouvement du sexe par exemple. Dans notre nouveau graphique d'événements de mouvement, nous pouvons simplement copier-coller ou je vais couper, ainsi que Control X. Et je vais le coller dans notre graphe de mouvement. Et maintenant, tous ces nœuds se trouvent dans notre graphe de mouvement. Ils fonctionnent toujours exactement de la même manière que s'ils se trouvaient dans le graphique d'événements, mais ils se trouvent maintenant dans un nouveau graphique. Nous pouvons les utiliser pour, encore une fois, organiser votre code. Maintenant, nous pouvons également organiser notre panneau My Blueprint ici. Nous allons donc commencer par les variables. Si nous cliquons sur l'une de nos variables ici, nous avons quelques options. Cette variable est donc accompagnée d'une info-bulle, car elle est fournie avec le modèle à la troisième personne. Si je sélectionne ma variable de santé, par exemple en C, nous pouvons définir une description. Je peux donc définir ceci pour dire que les joueurs actuels, comme ça vont compiler. Donc maintenant, lorsque je survole ma variable ici, cela indique la santé actuelle du joueur. Et si je vais aux paramètres par défaut des classes et que je trouve ma zone de santé, mais qui comme vous pouvez le voir, si je survole, cela indique la santé actuelle du joueur. Nous pouvons également catégoriser nos variables. Donc, si je sélectionne à nouveau ma variable santé ici, et que je descends à la catégorie, nous pouvons définir une nouvelle catégorie. Actuellement, nous pouvons le définir sur la caméra ou le personnage par défaut, mais nous pouvons en créer de nouveaux. Donc, si je sélectionne le texte et que je le supprime, nous pouvons lui donner un nom. Je vais donc appeler cela la catégorie santé. Appuyez sur Entrée. Vous verrez que notre variable se trouve désormais dans sa propre catégorie Santé. Et nous pouvons faire glisser d'autres variables dans cette catégorie de santé simplement en les faisant glisser comme ça. Ou si je le fais glisser vers l'arrière, nous pouvons changer la catégorie ici maintenant pour vous aider. Et il se déplace simplement vers le haut dans cette catégorie pour nous. Maintenant, si nous examinons nos coûts par défaut, vous verrez que nous aurons une nouvelle catégorie pour la santé. Nous allons donc d'abord compiler. Ensuite, nous passerons aux valeurs par défaut des classes. Vous pouvez voir que nous avons maintenant une catégorie Santé. Nous avons notre santé de départ et notre variable de santé à la fois. Maintenant, nous pouvons également ajouter des sous-catégories. Donc, si je sélectionne ma variable de santé ici, et que je clique sur le texte, si je clique pour que la santé soit toujours là. Mais je vais ajouter une ligne verticale. Maintenant, il s'agit de la touche dans le coin inférieur gauche au-dessus de la touche Windows. Il se trouve peut-être à un endroit différent pour d'autres configurations de clavier, mais c'est là que c'est pour moi. Si je maintiens la touche Maj enfoncée et que je fais une ligne verticale, je peux maintenant écrire un autre nom de sous-catégorie. exemple, Par exemple, si j'appuie sur Entrée, vous verrez que notre variable de santé se trouve maintenant dans la catégorie Santé, dans la catégorie de départ. Nous avons donc maintenant une sous-catégorie. Maintenant, nous pouvons également faire la même chose pour les fonctions. Donc, si je sélectionne ma nouvelle fonction func ici que j'ai créée lorsque je me suis effondré et des nœuds. Nous pouvons dire une description de cette fonction. Je pourrais donc appeler ça, c'est une fonction de test. Fonction. Maintenant, quand je passe la souris dessus, vous pouvez voir qu'il lit ceci comme une fonction de test. Nous avons donc une info-bulle. Nous pouvons définir une catégorie de plafonnement. Vous pouvez donc voir qu'il a effectivement accès à nos catégories de variables. Je pourrais donc définir cela pour la catégorie santé. Nous l'avons maintenant dans une catégorie Santé. Et nous pouvons faire la même chose avec les macros. Donc, si je crée une nouvelle macro et que je la sélectionne, vous pouvez voir que je peux dire Catégorie, disons la catégorie de la caméra par exemple, nous pouvons également changer sa couleur. Donc, si je vais dans le graphique d'événement, nous le ferons glisser. Je vais juste y ajouter quelques entrées rapidement pour qu' il soit un peu plus grand. Ajoutez donc quelques entrées. Maintenant, nous pouvons réellement changer la couleur. Donc, si je sélectionne ceci, nous pouvons le changer en rouge. Vous pouvez voir que nous avons maintenant un titre rouge, mais nous pouvons également définir une description si nous le voulons. C'est donc un test, n'est-ce pas ? C'est pas correct. Si je passe la souris dessus , vous pouvez voir qu'il s'agit d'une macro de test. Maintenant, elles sont utiles, surtout si vous travaillez avec d'autres personnes. Vous pouvez donner des descriptions détaillées de ce que font les fonctions, ainsi que les variables. Cela peut également être utile si vous travaillez seul dans un grand projet, car vous pouvez avoir des centaines, voire des milliers de variables dans de nombreux plans. Et vous pouvez oublier ce que fait une variable ou comment elle fonctionne. Il est donc toujours bon d'avoir une brève description de ce que font vos variables. Enfin, nous pouvons dire description du plan directeur. Donc, si nous passons aux paramètres de coût, nous pouvons définir la description actuelle du plan directeur. Vous pouvez donc voir pour le moment qu'il est indiqué Plan de personnage qui contient une logique de mouvement. Si nous allons dans le navigateur de contenu et que nous survolons notre plan, vous pouvez voir que nous obtenons cette description lorsque nous le survolons et que le navigateur de contenu lorsque nous le survolons et que le navigateur de contenu peut la modifier comme nous le voulons. On pourrait changer cela pour dire que c' est le personnage principal. Maintenant, quand je compile, survolez-le et le navigateur de contenu, vous pouvez voir que c'est le personnage principal. C'est donc à peu près toutes les principales façons d' organiser le code dans Unreal Engine, il est très important de garder votre code rangé car cela peut vraiment réduire le bien rangé car cela peut vraiment réduire le temps nécessaire pour le réparer un bogue ou ajoutez une nouvelle fonctionnalité à votre projet. Et surtout si vous travaillez avec d'autres personnes, les commentaires et les infobulles pour vos fonctions et variables sont très importants. Ce sera donc tout pour cette leçon. J'espère que vous en avez appris un peu plus sur la façon dont vous pouvez garder votre code de plan directeur bien rangé. 33. Leçons supplémentaires (outils de débogage): Salut tout le monde. Dans cette leçon, nous allons examiner certains des outils de débogage de Blueprint fournis avec le moteur. Avant de commencer, j'ai créé un nouveau modèle de projet à la troisième personne, juste pour prendre un nouveau départ pour cette leçon. Maintenant, l'une des choses qui rend les plans vraiment puissants est leur rapidité de débogage. Parce que nous pouvons voir quel code est en cours d'exécution en temps réel. Nous pouvons facilement vérifier les valeurs des variables pendant que le jeu est toujours en cours d'exécution. Et nous pouvons également utiliser des points d' arrêt suspendre le jeu lorsqu'un certain code est exécuté. Pour commencer, je vais vous montrer comment nous pouvons voir quel code est exécuté pendant que nous jouons dans l'éditeur. Je vais donc appuyer sur Play pour accéder à l'éditeur de plan. Si nous appuyons sur F8, vous pouvez voir que j'ai maintenant le contrôle de ma souris et que je peux sélectionner des éléments dans mon navigateur de contenu ou dans l'éditeur. Je vais donc ouvrir mon ThirdPersonCharacter ici. Vous pouvez voir que l'éditeur est ouvert, mais il ne nous montre pas quel code est en cours d'exécution. C'est parce que nous devons lui indiquer quel plan nous voulons vérifier. Donc, dans le menu déroulant, nous avons les différents plans qui existent dans le niveau. y a donc qu'un seul personnage ThirdPersonCharacter et je passe au niveau supérieur. Nous n'avons donc qu'une seule option. Je vais donc sélectionner ça. Maintenant. Si vos fenêtres sont plus petites, si je réduis la mienne un peu comme ça, vous pouvez voir que je n'ai pas le menu déroulant. C'est très bien ça. Vous pouvez simplement cliquer sur cette petite flèche ici. Et cela vous donnera les options qui ne tiennent pas dans la barre d'outils. Vous pouvez voir que nous pouvons également sélectionner notre personnage ici. Maintenant que notre personnage est sélectionné, vous pouvez voir que les lignes d'exécution de plusieurs de nos nœuds sont allumées car ils sont en cours d'exécution. Maintenant. Actuellement, nous pouvons voir que plusieurs nœuds sont en cours d'exécution à l'intérieur de notre ThirdPersonCharacter. Et la raison en est que ce sont des nœuds d'entrée d' accès qui exécutent chaque trame. Maintenant, en plus d'être en mesure de voir quel code est en cours d'exécution, nous pouvons également vérifier les valeurs des variables si nous nous dirigeons vers les entrées de la souris ici et que je jette un œil à l'entrée de la souris coupée en bas de la recherche. Nous avons une valeur d'axe. Et si je passe la souris dessus , nous pouvons voir la valeur actuelle, qui est actuellement 0. Et c'est parce que je ne déplace pas ma caméra dans le jeu pour le moment. Mais je veux peut-être voir quelle est cette valeur pendant que je déplace mon appareil photo. Donc, ce que je peux faire, c'est cliquer avec le bouton droit et regarder cette valeur. Et nous obtenons cette petite bulle qui indique la valeur actuelle de ce stylo. Donc, si je prends le contrôle de mon personnage simplement en sélectionnant la fenêtre d'affichage, je commence à déplacer ma caméra. Vous pouvez voir que la valeur de cette bulle est en train de se mettre à jour. C'est donc un outil très utile pour voir quelles sont les variables pendant que nous jouons au jeu. Maintenant, il y a certaines limites. En général, cela ne fonctionne pas dans une fonction. Donc, si vous travaillez dans une fonction, la valeur de surveillance ne fonctionnera généralement pas dans cette fonction. Cela ne fonctionnera que dans un graphe d'événements ou une macro. Maintenant, vous pouvez également avoir plusieurs plans identiques et votre niveau et vouloir voir quel code est exécuté dans chacun de ces plans. Donc, si je suis hors jeu maintenant et que je fais glisser un ThirdPersonCharacter et que je le place juste ici. Ensuite, j'appuie sur play et je vois qu' il nous montre actuellement quel code est en cours d'exécution, mais uniquement à l'intérieur du personnage que nous contrôlons actuellement. Et si nous voulions voir le code qui est exécuté à l'intérieur de notre caractère alpha ? Eh bien, si nous allons dans le menu déroulant maintenant, vous pouvez voir que nous avons un autre personnage dans notre liste de plans. Maintenant, vous pouvez avoir des centaines de plans dans votre niveau, il est donc difficile de savoir lequel de cette liste est le plan que vous voulez vérifier. Ce que nous pouvons faire, c'est pendant que nous sommes éjectés, nous pouvons sélectionner, ou si nous appuyons sur F8, nous pouvons sélectionner un autre plan comme notre personnage ici. Revenez à notre ThirdPersonCharacter, cliquez sur le menu déroulant. Vous pouvez voir que nous avons sélectionné cette option entre parenthèses, et cela nous indique lequel dans la liste nous avons sélectionné dans le niveau. Nous pouvons donc le sélectionner et ensuite afficher le code cours d'exécution pour ce ThirdPersonCharacter. Maintenant, comme ce caractère n'est pas contrôlé, aucun de son code n'est actuellement en cours d'exécution. Passons maintenant à autre chose, nous voulons examiner les points d'arrêt. Maintenant, si je reviens à mon personnage généré ici dans le menu déroulant, nous pouvons voir que le code est en cours d'exécution. Nous savons que nous avons sélectionné les bons plans. Ce que nous allons faire, c'est sortir des planètes, sortir et je vais supprimer mon personnage ici, donc je vais le supprimer. Maintenant. Nous allons créer une note de début de jeu. Et je vais juste faire glisser et imprimer une chaîne. Et si nous cliquons avec le bouton droit sur ce nœud, vous pouvez voir que nous pouvons ajouter un point d'arrêt. Et si nous faisons cela en C, nous obtenons ce petit point d'exclamation ici et nous compilerons, débarrassons simplement de ce point d' exclamation. Ce symbole rouge signifie donc que ce nœud possède un point d'arrêt. Désormais, les points d'arrêt arrêtent le code ou arrêtent le jeu lorsque le nœud est exécuté. Donc, si je clique sur Jouer maintenant, vous pouvez voir que les parties sont actuellement interrompues. Et il nous dit, Hey, ce nœud avec le point d'arrêt comme étant en cours d'exécution. Maintenant, c'est un outil très pratique si vous voulez vérifier si un bout de code est en cours d'exécution. Maintenant, si nous voulons reprendre la lecture et l'éditeur, nous pouvons simplement cliquer sur ce petit bouton de lecture ici et nous pouvons prendre le contrôle de notre personnage comme d'habitude. Maintenant, nos points d'arrêt ont également quelques autres fonctionnalités que nous pouvons utiliser. Donc, si nous sortons du plan maintenant, je vais juste ajouter quelques nœuds pour imprimer une chaîne ou ajouter un F. Et nous ajouterons un nœud flip-flop. Et à partir de là, nous ajouterons, disons, quelques chaînes d'impression sur chacune des sorties, comme ça. Maintenant, si nous jouons un éditeur, vous pouvez voir que notre point d'arrêt fonctionne. Maintenant. Nous pouvons reprendre comme nous l'avons fait auparavant. Tout ce que nous pouvons utiliser le bouton de la trame suivante, qui nous guidera à travers chaque nœud de notre code. Donc, si j'appuie sur cette touche, vous pouvez voir qu'il exécute le nœud de la branche. Si j'appuie à nouveau dessus, cela nous mènera au nœud flip flop. Et la raison pour laquelle true pen est en cours d'exécution est que notre condition sur notre nœud de branche est cochée. C'est donc vrai. Maintenant que les nœuds de bascule sont sélectionnés, si je clique à nouveau sur le bouton de l' image suivante, vous pouvez voir que cela nous amène à un tout nouveau plan. Nous avons ces codes ici que nous n'avons pas réellement écrits. La raison en est notre nœud flip-flop tant que macro intégrée au moteur. Il va donc nous faire parcourir ses nœuds dans son propre code. Nous allons donc passer en revue ceci et nous pouvons sélectionner pour chacun d'entre eux. Maintenant, quand nous arrivons à la fin et que j'appuie à nouveau dessus, il nous ramène à notre ThirdPersonCharacter à l' entrée a du nœud flip-flop et exécute le nœud de chaîne d'impression. C'est une autre fonctionnalité très utile des points d'arrêt. Nous pouvons parcourir notre code un nœud à la fois pendant que le jeu est en cours d'exécution pour voir quel code est exécuté. Il existe maintenant d'autres contrôles pour nos points d'arrêt. Si nous agrandissons un peu notre fenêtre ici, vous pouvez voir que nous avons quelques options supplémentaires. Ce que je vais faire, c'est redémarrer notre éditeur de plans. Nous sommes maintenant revenus à notre point d'arrêt initial. Nous avons maintenant quelques options différentes, nous allons donc passer au nœud suivant à exécuter. Cela fonctionne à peu près de la même manière que notre cadre unique avancé. Maintenant, si nous appuyons sur cette touche et que vous voyez, cela nous déplace vers le nœud suivant. Maintenant, si j'appuie à nouveau sur ce bouton, vous pouvez voir qu'il nous amène à notre nœud de bascule. Maintenant, peut-être que je me fiche de ce qui se passe dans ce nœud est un nœud intégré au moteur. Je sais que ça fonctionne. Peut-être que je veux simplement ignorer ce nœud et le code qu'il contient. Ce que nous pouvons faire, c'est appuyer sur ce bouton suivant et cela ne nous guidera pas à travers le code à l'intérieur de ce nœud. Nous pouvons donc simplement cliquer dessus et voir qu'il ne nous emmène pas dans les macros standard. Nous ignorons simplement cela et nous pouvons également l'utiliser avec des fonctions. Donc, si vous avez une fonction dans votre code et que vous ne voulez pas parcourir tous les nœuds qui se trouvent à l'intérieur de la fonction, vous pouvez simplement utiliser ce bouton pour la sauter et voir le résultat. Nous pouvons également utiliser cette petite loupe pour nous diriger vers les nœuds actuellement sélectionnés. Donc, si je regardais autour mon code et que je voulais voir où je me trouvais, je pourrais simplement cliquer dessus et cela nous mènera là-bas. C'est ainsi que nous pouvons naviguer en utilisant nos points d'arrêt. Et si votre fenêtre est plus petite, donc vos fenêtres aiment ça, n'oubliez pas que vous pouvez toujours trouver ces paramètres dans le menu déroulant ici si votre barre des tâches est trop petite. Ensuite, nous allons jeter un œil à la fenêtre du débogueur de Blueprint. Donc, si nous allons dans la liste déroulante de débogage et que nous cliquons sur le débogueur de blueprint ici, vous pouvez voir que nous avons ce panneau qui nous donne quelques informations sur le Blueprint nous avons actuellement sélectionné. Donc, vous pouvez voir si je clique sur la flèche vers le bas ici à côté du nom de mon plan, vous pouvez voir que la variable que nous définissons pour surveiller, si nous descendons ici, cette valeur d'axe est également répertoriée ici. Peut-être que si vous avez vu de nombreuses valeurs différentes, vous pourriez ouvrir cette fenêtre et les voir toutes apparaître en bas. Nous pouvons également voir les points d'arrêt. C'est donc là que nous avons des points d'arrêt dans le code qui nous indique le nœud. Et si nous cliquons dessus, cela nous mènera à ce nœud. Donc, peut-être que si vous avez un point d'arrêt dans votre code et que vous avez oublié où vous l'avez placé, vous pouvez toujours cliquer dessus pour vous rendre à l'endroit où se trouve ce point d'arrêt. Enfin, nous avons le suivi de l'exécution. Cela nous indique ce qui est actuellement en cours d'exécution dans notre plan directeur. Donc, en ce moment, vous pouvez voir que l' événement commence à jouer et à imprimer la chaîne. C'est parce que le point d'arrêt est en cours d'exécution. L'ensemble de notre code est donc actuellement gelé. Mais si je clique sur le bouton Reprendre, vous verrez que nous avons maintenant nos événements d'axe d'entrée, sont exécutés à chaque image, donc ils seront mis à jour en permanence. Maintenant, si nous quittons notre éditeur de plan et que nous appuyons à nouveau sur Play, point d'arrêt est désormais déclenché. Et si nous passons à la pile d'appels ici, nous pouvons voir exactement ce qui a déclenché ce point d'arrêt. Maintenant, nous sommes en train de manquer de place et de commencer. C'est donc assez facile à voir. Vous pouvez voir que cela nous dit dans le ThirdPersonCharacter, début de la lecture de l'événement dans le graphique d'événement est ce qui déclenche notre point d'arrêt. Mais vous pouvez avoir une situation où vous avez peut-être un événement personnalisé qui exécute code et où ce client peut ensuite être exécuté dans de nombreux endroits différents. Peut-être aussi un autre plan. Et peut-être que ce code est en cours d'exécution alors que vous ne le souhaitez pas, mais que vous ne savez pas dans quel événement le Blueprint l' appelle à s'exécuter. C'est là que la pile d'appels peut être vraiment utile. Donc si nous quittons l'éditeur d' avion pour l'instant, je vais créer un exemple. Donc, si je crée un nouvel événement client, créant un événement personnalisé, je vais appeler cet exemple. Je vais connecter ça à notre code ici. Et nous reprendrons note de jeu et nous appellerons cet événement, donc je vais l'appeler exemple. Maintenant, peut-être que nous avons également d'autres endroits qui appellent également notre exemple d'événement. Donc, si je clique avec le bouton droit de la souris et que je recherche les événements d'entrée, je copierai et collez ceci. Et je vais régler cette entrée sur deux, par exemple, en cliquant simplement sur le petit bouton du clavier ici, puis en appuyant sur tube. Et nous appellerons également cet événement à partir de ces entrées, comme ceci. Copiez-les et collez-les, puis nous les compilerons. Donc maintenant, lorsque nous appuyons sur Play pour planifier l'éditeur, vous pouvez voir que notre point d'arrêt est en cours d'exécution et qu'il nous indique le code qui appelle ce point d'arrêt. Nous pouvons voir que dans ThirdPersonCharacter, l'événement commence à jouer. Donc, si nous passons à notre événement, le début jeu se déroule dans le graphique de l'événement et cela refroidit l'exemple d'événement dans notre graphique d'événements. Ensuite, je vais casser le point en disant que j'ai été appelé. Mais si nous reprenons le jeu je vais juste prendre le contrôle de mon personnage. Vous pouvez voir en arrière-plan que je me déplace autour de la caméra. Si j'appuie sur un, vous pouvez voir que notre point d'arrêt est en cours d'exécution et qu'il nous indique maintenant que l' entrée est pressée. Ça, c'est cool. Et cela se trouve dans le graphique d'événements. Cela refroidit alors notre exemple de client, puis c'est ce qui déclenche notre point d'arrêt. Et puis la même chose pour si j'appuie aussi, vous pouvez voir que dans notre pile d'appels est remplacée par deux dans le graphique d'événement, refroidissant l'exemple d'événement, et c'est également dans le graphique d' événement. Maintenant, cela peut également fonctionner pour les fonctions. Donc, si vous ajoutez un point d'arrêt dans une fonction, chaque fois qu'elle est appelée, elle affichera également dans la pile d'appels les événements qui ont fait que cette fonction a été exécutée. Et cela est très utile dans les projets de plus grande envergure, car vous pouvez avoir fonctions et des événements qui sont appelés dans de nombreux endroits différents. Et si ce code est exécuté alors que vous ne le souhaitez pas, il peut être très difficile de savoir exactement où il est refroidi. Ainsi, en utilisant une pile d'appels et le point d'arrêt, vous pouvez trouver très rapidement quels événements appellent réellement cette fonction ou cet événement. Maintenant, la dernière chose que je trouve vraiment utile lors débogage de code est le nœud de chaîne d'impression. Nous l'avons beaucoup utilisé dans nos leçons précédentes, mais je vais vous montrer certaines des utilisations pour déboguer du code. Ce que nous allons faire, c'est quitter notre éditeur play an, et je vais simplement fermer notre débogueur de blueprint maximiser notre ThirdPersonCharacter et fermer les macros standard. Maintenant, imprimez des chaînes ou quelque chose que j'utilise tout le temps lorsque je débogue du code. Nous pouvons les ajouter aux chaînes d'événements pour savoir quand un événement est exécuté, nous pouvons les utiliser pour imprimer des valeurs variables. Nous pouvons également les utiliser uniquement pour fournir des informations sur certains de nos paramètres. Donc, par exemple, disons que j' ai commencé sainement. Je peux donc appeler cela la santé de départ. Et je pourrais avoir une vérification et commencer placode par exemple, je pourrais faire est supérieur à 0. Et nous pourrions faire un nœud F. Connecte ça comme ça. Dans ce cas, nous voulons probablement que notre aide au démarrage soit toujours supérieure à 0. Donc, ce que nous pouvons faire est que si la santé du signe n'est pas supérieure à 0, nous pouvons ajouter une chaîne d'impression et nous pouvons simplement mettre le début est 0. Maintenant, si nous devions jouer un éditeur et que nous commençons avec 0, si nous reprenons après ce point de rupture, vous pouvez voir qu'il nous donne un avertissement disant «  Hé, vous commencez à avoir une santé à 0 ». Vous pouvez donc les utiliser pour vous avertir qu'un paramètre n'est pas correct ou que quelque chose n'est pas défini du tout. Cela peut également être très utile si vous travaillez avec d'autres personnes. Peut-être qu'ils ajustent un paramètre et qu'ils ne le modifient pas correctement. Ensuite, lorsqu'ils jouent un éditeur, vous pouvez avoir une configuration d'avertissement qui leur indiquera, hé, ce paramètre est incorrect, vous devez le modifier. Maintenant, je vais imprimer la chaîne a également d'autres options. Donc, si nous cliquons sur la flèche vers le bas, nous avons l'écran de l'imprimante. Maintenant, si cette option est cochée, elle sera visible dans le jeu sur l'écran du joueur. Nous devons imprimer un journal. Maintenant, si c'est vrai, il sera également ajouté au journal de sortie. Vous pouvez donc trouver la fenêtre de connexion de sortie, puis aller au journal de sortie ici et cocher cette case. Vous pouvez voir que nous avons notre journal de sortie. Si je joue un éditeur, je vais maintenant supprimer notre point d'arrêt ici juste pour qu'il ne fonctionne pas. Donc, pour supprimer un point d'arrêt, suffit de cliquer avec le bouton droit sur le nœud qui contient le point d'arrêt et de sélectionner Supprimer le point d'arrêt. Maintenant, lorsque nous appuyons sur Lecture, vous pouvez voir que notre texte est en train de s'imprimer. Et si vous regardez dans le journal de sortie, nous avons également des messages utilisateur sous log blueprint. Nous avons reçu ces messages de nos chaînes d'impression. Nous avons maintenant quelques autres paramètres pour nos nœuds Print String. Nous avons également la couleur du texte. Cela changera la couleur qui apparaît à l'écran. Ensuite, nous avons la durée. C'est le nombre de secondes qu'il apparaîtra à l'écran. Maintenant, c'est quelque chose que j'aime faire avec mes nœuds Print String lorsque je les utilise autour de mon code. Je crée également une variable appelée show debug text. Et nous pouvons sonder juste pour obtenir notre boutique de valeur par défaut. Maintenant, j'ai tendance à le connecter à l'écran de l'imprimante et à imprimer un journal ici. Donc maintenant, si je veux désactiver toutes mes chaînes d'impression, peut-être que je prends des captures d'écran ou des vidéos ou quelque chose comme ça. Je ne veux pas que ma chaîne d'impression apparaisse. Je peux juste aller dans le plan. Je peux sélectionner mes textes de débogage d'émission sur le ticket ou les activer, et cela activera ou désactivera toutes mes chaînes d'impression, tant que je les ai, cette variable connectée ou mes chaînes d'impression comme ceci. Vous pouvez également sélectionner tout cela pour réduire pour fonctionner. Nous pouvons appeler cette fonction quelque chose comme error. Des textos comme ça. Nous allons l'ouvrir. Maintenant, ici, nous avons notre chaîne d'impression avec notre texte de débogage show. Nous pouvons faire glisser la chaîne vers le nœud d'entrée pour ajouter une épingle. Nous pouvons faire de même avec la durée et la couleur des textes. Compilez ça. Et maintenant, dans notre Event Graph, nous avons notre nœud de texte d'erreur. Nous pouvons dire ajouter un message disant que le début est 0. Nous pouvons régler la durée, économiser trois secondes et les textes à lire. Et tant que le texte de débogage de notre show est coché, si je clique sur play, vous pouvez voir que notre texte apparaît ici. Mais maintenant, si je voulais masquer toutes mes chaînes d'impression, je pourrais décocher cette case. Et si j'utilisais cette fonction au lieu de ces nœuds Print String, j'ai eu un, peut-être un message ici. Disons un exemple, courez. Et nous pourrions changer la couleur en bleu, et nous supprimerons simplement ces chaînes d'impression. Donc maintenant si nos textes de débogage d'émission sont cochés sur ce rhum blanc. Mais si nous le prenons en charge, nous pouvons désormais voir ces messages. Ce sera donc tout pour cette leçon. J'espère que vous comprenez maintenant certains des outils intégrés au moteur qui vous aident à déboguer votre code. 34. Leçons supplémentaires (calendrier): Salut tout le monde. Dans cette leçon, nous allons examiner le nœud des chronologies. Pour commencer, je vais simplement créer un nouveau plan dans lequel nous pouvons vous présenter. Nous allons donc créer une classe de plan définie sur acteur. Et je vais juste appeler le mien cube. Et nous allons ouvrir ça. Je vais juste faire glisser le mien en haut ici et aller dans le graphique d'événements. Donc, juste pour vous donner une brève explication ce que font les nœuds de chronologie, ils nous permettent de modifier vos valeurs lentement au fil du temps. Ils sont vraiment bons pour animer des choses comme, par exemple, une porte. Ou si vous voulez qu'un acteur passe d'un endroit à un autre, mais que vous voulez le faire bien et en douceur. Donc, pour créer une nouvelle chronologie, nous allons simplement cliquer avec le bouton droit de la souris sur notre graphique d'événements ici et rechercher la chronologie. Et vous pouvez voir que nous avons une option pour Ajouter une chronologie. Désormais, vous ne pouvez pas ajouter de chronologies dans les fonctions, ni dans les composants. C'est donc quelque chose à garder à l'esprit lorsque vous utilisez des chronologies. Nous allons donc cliquer sur Ajouter une chronologie et vous pouvez voir que nous obtenons ce nouveau nœud ici et je peux le nommer. Je vais donc simplement appeler mon exemple de chronologie. Comme ça. Nous allons maintenant passer en revue toutes ces entrées et sorties dans un instant. Mais ce que nous allons faire, c'est double-cliquer sur le nœud de la chronologie, et cela ouvrira cette nouvelle fenêtre que nous n'avons pas encore vue auparavant. C'est là que nous définissons les valeurs que nous voulons que notre chronologie puisse changer. Ce que nous allons faire, c'est créer une nouvelle piste. Vous pouvez voir que nous pouvons sélectionner des éléments flottants, des vecteurs, des événements et des couleurs. Nous allons simplement commencer par un simple float, donc nous allons ajouter une piste flottante et nous pouvons la nommer. Donc je vais juste appeler le mien Float, Float, sortie comme ça. Nous avons maintenant une chronologie qui nous indique essentiellement quelle sera la valeur de notre débit de sortie. Heure précise. Nous n'avons donc pas encore ajouté de points de données. Donc notre valeur flottante sera juste 0 pendant toute la durée de lecture de notre chronologie. Mais si nous voulons ajouter de nouveaux points, nous pouvons, nous pouvons maintenir la touche Maj enfoncée et cliquer. Vous pouvez voir que j'ai maintenant un nouveau point sur ma chronologie ici. Et là-haut, nous pouvons régler l' heure à laquelle ce point est écoulé. Je vais donc mettre le mien à 0. C'est donc au début de la chronologie. Ensuite, nous pouvons définir une valeur. Si je devais régler ceci pour en dire un, vous pouvez voir que je ne peux plus vraiment comprendre ce que je veux dire. Eh bien, vous pouvez cliquer sur ce petit bouton ici, et cela affichera tous les points de votre graphique. Vous pouvez donc voir mes points derrière ces boutons en augmentant cette valeur un et un à la fois. Mais nous pouvons également ajouter des points supplémentaires. Et c'est ce qui nous permet de modifier notre valeur au fil du temps. Donc, si je clique à nouveau ici, vous pouvez voir que j'ai ajouté un nouveau point et que nous avons une nouvelle heure. Je vais donc régler ça sur un. Je vais laisser la valeur à un, et nous allons sélectionner notre point d'origine ici, et je vais définir sa valeur sur 0. Maintenant, vous pouvez voir que lorsque notre chronologie commence, le premier est à 0, donc sa valeur sera 0. Mais au fur et à mesure que le temps avance, vous pouvez voir en haut ici que nous avons le temps Valley, une fois qu'il aura atteint la valeur un, et que c'est notre temps, la valeur de sortie de notre float sera un. Si nous revenons à notre graphique d' événements ici, vous verrez que nous avons en fait une nouvelle sortie sur notre nœud, et c'est notre sortie flottante. Et c'est ce qui va renvoyer cette valeur à partir de notre chronologie. Maintenant, notre chronologie va s'exécuter pendant cinq secondes après qu'on lui ait demandé de s'exécuter. Et la raison en est qu'ici, il est écrit « longueur cinq ». Maintenant, si je devais changer cela pour en dire un, vous pouvez voir que notre calendrier ici est devenu un peu plus petit. Et c'est parce que la zone en surbrillance est l'heure laquelle la chronologie s'exécutera pour elle, car nous l'avons enregistrée pendant 1 seconde, vous pouvez voir qu'elle s'arrête maintenant d'une seconde. Donc maintenant, en gros, lorsque nous indiquons à notre timeline de jouer, elle produira une valeur commençant à 0, qui sera un float. Et puis au fur et à mesure que le temps passe, vous pouvez voir, si nous survolons la souris, vous pouvez voir la valeur augmenter au fil du temps. Et c'est parce que notre deuxième est ici à une heure. Cela nous donne donc une augmentation linéaire de la valeur. Nous allons maintenant apprendre comment exécuter notre chronologie si nous revenons au graphique d'événements ici, vous pouvez voir que nous avons une pièce et une partie depuis le début. Et c'est ce qui indique la chronologie à jouer. Et elle est généralement lue depuis le début de la chronologie. Donc, quand nous lui disons de jouer, il commencera à l'instant 0 et il commencera, notre valeur est la valeur 0. Ensuite, nous avons stop, qui arrêtera la chronologie pour l'argent et son point actuel. Nous avons inversé, ce qui va inverser la chronologie en cours à n' importe quel point actuel. Par exemple, si notre chronologie était à 0,2 seconde de course et que nous lui demandions de s'inverser. Il reviendrait de 0,2 seconde à 0. Ensuite, nous avons inversé à partir de la fin, ce qui signifie que la chronologie va s' inverser à partir des points finaux. La cote est donc de 1 seconde, donc elle serait inversée de un à 0. Enfin, nous avons la nouvelle heure. Cela nous permet d'indiquer à la chronologie l' heure exacte à partir de laquelle nous voulons qu'elle s'exécute. Maintenant, lorsque notre chronologie sera en cours d'exécution, nous aurons ces deux nœuds de sortie ici. Désormais, la mise à jour exécutera chaque image exécutée par la chronologie. Donc, si notre chronologie est configurée pour s'exécuter pendant 1 seconde, ce qui est le cas actuellement, elle s'exécutera pendant 1 seconde par image. Ensuite, une fois la chronologie terminée, le PIM terminé s'exécutera. Maintenant, nous avons également une direction. Maintenant, notre chronologie peut être en avant ou en arrière. Pour savoir dans quel sens il fonctionne. Nous pouvons sortir de notre direction et utiliser une note égale. Nous pouvons utiliser un anion égal. Et ici, nous pouvons simplement vérifier si cela va de l'avant ou vers l'arrière ? Et cela retournerait simplement un vrai ou faux en fonction de notre valeur. Nous pouvons également utiliser un commutateur afin pouvoir le faire glisser et rechercher un commutateur. Vous voyez que nous pouvons créer un nœud de commutation qui sortira vers l'avant ou vers l'arrière en fonction la direction actuelle de notre chronologie. Enfin, nous avons notre valeur de débit de fluide. Et comme je l'ai déjà dit, cela augmentera lentement au fil du temps à mesure que notre chronologie joue en raison de ces deux points que nous avons dans notre graphique. Ce que nous allons faire maintenant est de mettre en place un exemple de la façon dont cela fonctionne. Nous allons donc simplement lancer Play depuis Begin Play. Et je vais ajouter une chaîne d'impression à notre mise à jour. Maintenant, dans notre chaîne d'impression, chaque image lue par notre timeline affichera la valeur flottante actuelle. Donc si nous cliquons sur Compiler, retournez à notre carte. Je vais faire glisser le cube parce que je n'en ai pas actuellement un à mon niveau. Si nous appuyons sur Jouer, vous pouvez voir qu'il passe progressivement de 0 à 1. Je vais maintenant vous montrer comment déplacer le cube en utilisant cette valeur. Nous allons donc revenir à notre cube. En fait, je vais aller dans la fenêtre d'affichage et ajouter un composant cube afin que nous puissions le voir dans le monde et compiler, revenir au graphique d'événements. Nous voulons maintenant déplacer notre cube. Ce que nous allons faire, c'est utiliser un nœud de localisation d'acteur défini. Et à partir de là, nous allons faire un emplacement principal ou créer un vecteur comme ça. Je vais donc simplement augmenter la valeur Z. Maintenant, nous pouvons, dans notre note de chronologie ici, définir cette valeur sur ce que nous voulons que notre cube augmente. Je pourrais donc régler ça à 300. Et nous pouvons cliquer sur ce petit bouton pour ajuster les points et verticalement. Et nous allons revenir à notre graphique des loyers. Nous pouvons le brancher directement dans notre valeur z ici, y insérer la mise à jour. Et nous voulons connaître la position actuelle des acteurs. À partir de là, nous utiliserons un nœud d'arrêt. Maintenant, tout ce que nous faisons ici est d'obtenir ses emplacements y et x actuels parce que nous voulons qu'ils restent les mêmes, mais nous augmentons ensuite son emplacement z. Donc, si nous appuyons sur Jouer maintenant, vous verrez que les cubes se déplacent lentement vers le haut à mesure que notre chronologie se place. Si nous le voulions, nous pourrions l' inventer un peu plus lentement afin que je puisse ouvrir ma chronologie ici. Je pourrais régler la durée sur quatre secondes. Maintenant, nous devons modifier notre dernier point. Nous allons donc devoir changer l'heure à quatre secondes. Alors maintenant notre cube ou déplacez-vous lentement pendant quatre secondes. Alors appuyez sur Play. Vous pouvez voir maintenant qu'il progresse beaucoup plus lentement qu'avant. Maintenant, une autre façon d'utiliser notre variable float pour changer l'emplacement, et c'est un peu plus pratique si nous changeons notre valeur n. Ce que je vais faire, c'est cliquer sur le bouton Zoom pour ajuster à l'horizontale. Cela n'amène donc que la chronologie. Pour montrer tous nos points. Je peux sélectionner notre point ici, et je vais en fait ramener la valeur à un. Maintenant, notre première valeur est 0 et notre dernière valeur est un. Et nous allons également faire le zoom pour ajuster à la verticale, afin que nous puissions voir cela se produire ici. Nous allons maintenant revenir au graphique d'événements. Et au lieu de dire directement que le cube ou le débit de sortie sera élevé. Nous pouvons l'utiliser pour déplacer ou en cube entre deux emplacements. Il va donc supprimer ce code ici pour l'instant. Et nous partirons de notre nouvel emplacement et rechercherons le laboratoire. Si vous vous souvenez de cela dans notre leçon sur les vecteurs, ce nœud nous permet de passer progressivement de l'emplacement a à l'emplacement B, et cette quantité est déterminée par l'alpha. Donc 0 serait juste la sortie de ce nœud serait la valeur a. Et s'il était défini sur 0.5, alors il s'agirait d'une valeur comprise entre les emplacements a et b. Et s'il en était un, alors ce serait simplement l'emplacement B complet qui sera renvoyé. Et si vous vous souvenez, notre valeur flottante commence maintenant à 0 et se termine dans une à quatre secondes. Nous pouvons donc l'utiliser pour contrôler notre ganglion lymphatique afin de déplacer notre cube entre deux emplacements différents. Ce que nous pouvons faire maintenant, c'est créer des variables actives. Donc je vais juste appeler cet acteur débutant. Et nous allons définir ce type d'acteur. Sélectionnez ces deux éléments ici, référence d'objet, puis nous allons dupliquer ceci ou simplement cliquer avec le bouton droit et dupliquer. Nous appellerons cet acteur comme ça et nous affronterons cette glace afin pouvoir les éditer dans le niveau. Pour notre acteur d'État. Nous voulons connaître sa position. Et nous allons l' insérer dans la valeur a. Ensuite, nous ferons la même chose avec notre inducteur. Accédez à l'emplacement. Nous allons le brancher dans la valeur b ici et nous allons le compiler. Nous allons maintenant passer à notre niveau et nous pouvons créer un nouvel acteur. Je vais donc simplement créer une classe de plan. Nous appellerons cela un acteur et nous appellerons ce point de cheminement, par exemple. Comme ça, placera un dans le niveau ici et un autre ici. Et je vais sélectionner les deux en maintenant la touche Ctrl enfoncée. Je vais les déplacer en l'air pour qu'on puisse les voir un peu plus facilement. Alors maintenant que nous jouerons, que se passera-t-il si nous sélectionnons notre cube ? Nous devons lui dire les acteurs de début et de fin. Je vais donc fixer mon point de départ à ce type ici et la fin à l'autre point de cheminement. Et maintenant, quand je clique sur play ou cube ou que j'apparais instantanément sur ce point de cheminement et que je me déplace lentement vers ce point de fin. Donc, si nous appuyons sur Play, vous pouvez voir qu'il se déplace lentement entre ces deux points de cheminement. Cela se produit parce que, si vous vous souvenez, notre valeur flottante passe de 0 à 1. Et puis j'ai quitté le nœud qui est un emplacement qui est l'emplacement de nos acteurs vedettes. Et lentement, en déplaçant progressivement cela vers l'emplacement des acteurs finaux, qui est la valeur b. Ensuite, nous disons à notre acteur de se déplacer entre ces deux points. Il s'agit donc d'une meilleure façon de contrôler et de localiser les acteurs à l'aide d'un nœud de chronologie au lieu de simplement placer manuellement l'emplacement dans la timeline. Maintenant, nous pouvons également ajouter différents types de sorties variables à notre chronologie. Si nous l'ouvrons et que nous passons à la piste, vous pouvez voir que nous pouvons ajouter un piège vectoriel. Je vais donc cliquer dessus. Vous verrez que nous avons maintenant un nouveau graphique en bas. Je vais juste cliquer sur la flèche à côté de notre sortie flottante ici juste pour la masquer afin que nous puissions voir notre nouvelle piste un peu mieux. Je vais aussi lui donner un nom. Ou si vous cliquez avec le bouton droit de la souris et que vous sélectionnez Renommer, nous pouvons le nommer comme une sortie vectorielle. Et si nous compilons et que nous accédons au graphique d'événements, vous pouvez voir que nous avons maintenant une sortie vectorielle sur notre nœud de chronologie. Maintenant, cela fonctionne exactement de la même manière que notre valeur flottante, c'est juste que nous avons des valeurs flottantes contrôlées dans ce graphique, une pour notre z, y et x. Donc, si nous le voulions, nous pourrions génère progressivement un vecteur à partir de notre note chronologique qui commence à une valeur et se termine à une autre, comme nous l'avons fait avec notre float. Et si nous voulons ajouter de nouveaux points, nous pouvons cliquer en maintenant la touche Maj enfoncée pour ajouter un nouveau point ici. Maintenant, si je déplace ceci, voyez que c'est en fait dans la valeur x, mais nos Y et Z n'ont pas de point et ils sont toujours à 0. Donc, si nous voulons travailler sur une seule de ces valeurs, disons que je voulais simplement ajouter une valeur à z. Nous pouvons masquer le y et le x, et nous pouvons cliquer sur notre z en maintenant la touche Maj enfoncée. Et maintenant nous pouvons définir une valeur z. Peut-être que maintenant je voulais ajouter une valeur Y. Je peux masquer ma valeur z et afficher la valeur y. Et vous pouvez voir que je peux maintenant avancer sur ce point. Et cela rend les choses un peu plus faciles si vous avez tous ces points visibles, peut devenir un peu déroutant. Maintenant, je les ai tous visibles. Je peux modifier ces points à ma guise, et nous pourrions ajouter une valeur de 1 12e y ici. Et on peut déplacer ça. Et nous pourrions faire de même pour notre valeur z. Maintenant, les valeurs de départ pour chacune de ces sorties. Et si vous vous souvenez, un vecteur est simplement des flotteurs libres combinés. Donc, si nous le cassons, utilisez le nœud de vecteur de rupture. Vous pouvez voir que nous avons un X, un Y et un Z. Quelles que soient les valeurs que nous avons utilisées ici pour les valeurs de chronologie x, y et z , c'est ce qui sera affiché à ce moment précis sur notre chronologie. Et nous pouvons utiliser ce vecteur de sortie comme n'importe quel autre vecteur. Donc, si je le voulais, je pourrais le brancher sur mon nœud de tour, par exemple, au point final. Donc maintenant, quand nous compilons, au lieu d'aller au point de fin, il ira à l'emplacement de sortie de notre timeline. Si vous vous souvenez que l' emplacement en sortie changera réellement parce que nous avons ces points ici qui modifient les valeurs x, y et z en fonction de l'heure. Donc, si nous appuyons sur Play, nous verrons que notre cube a été déplacé depuis son emplacement de départ. Il va vers 0, donc il va se diriger vers cette direction. Maintenant, il y a d'autres sorties que notre chronologie peut faire. Donc, si nous revenons à notre note de chronologie ici et que nous l'ouvrons, nous pouvons en fait la sortie et l' événement à certains moments où elle est exécutée. Donc, si nous ajoutons une nouvelle piste ici, je vais simplement ajouter une piste d'évent. Maintenant, je vais masquer ma sortie vectorielle simplement en cliquant sur la petite flèche ici. Et nous allons renommer notre piste d'événement en sortie d'événement. Comme ça. Maintenant, comme pour les types de sortie précédents pour le Maj-clic, nous pouvons ajouter un point à la chronologie. Mais la seule différence est là. Non, la valeur ici n'a pas vraiment d'importance. Tout ce qui compte, c'est le temps. Donc, si je règle cela sur 1.5, si nous décalons le clic à nouveau, nous pouvons ajouter un autre point et nous pouvons faire en sorte que ce soit 2.5. Ce qui va se passer maintenant, c'est la sortie de l'événement sur notre nœud de chronologie s' exécutera à 1,5 seconde, puis 2,5 secondes. Et si nous revenons à notre événement gra, vous voyez que nous avons maintenant une nouvelle sortie d'événement. Donc, si nous ajoutons une chaîne d'impression à cela, et nous verrons ce bonjour maintenant s'imprimer aux deux moments où notre chronologie est en cours d'exécution. Nous en avons donc un à 1,5, puis un autre à 2,5. Ensuite, le dernier type de sortie de notre chronologie, si nous revenons à ce nœud, masquera nos sorties d'événements en cliquant sur la flèche située à côté. Encore une fois, nous allons ajouter une nouvelle piste et nous pouvons ajouter la piste de couleur. Cela nous permet maintenant de sortir une couleur à un moment donné. Encore une fois, comme précédemment, nous pouvons déplacer le clic sur cette couleur pour ajouter un nouveau point. Je viens donc d'ajouter un nouveau point ici et nous pouvons les déplacer comme nous le voulons maintenant, parce qu'ils sont blancs, cela ne change pas réellement la valeur. Mais si je clique dessus avec le bouton droit de la souris, nous pouvons choisir une couleur. Et je peux le régler en rouge, par exemple. Maintenant, après environ 2,5 secondes, la couleur de sortie sera rouge. Mais nous pouvons déplacer cela et modifier la gravité changements de couleur en fonction de ces autres valeurs. Si nous les déplaçons et que nous voyons maintenant à 2,5 secondes, nous obtenons une couleur rouge clair. Si nous le voulons, nous pouvons modifier ceux par défaut fournis avec notre chronologie afin de pouvoir cliquer avec le bouton droit de la souris sur celui-ci, choisir une couleur différente. On peut changer ça pour dire, un bleu comme ça. Et maintenant, vous pouvez voir que nous avons une couleur bleue ici qui sera émise à 0,5 seconde. Mais au fil du temps, il passe lentement à une couleur violacée rosâtre puis au rouge. Contrairement à avant. Si nous revenons à notre chronologie, vous pouvez voir que nous avons maintenant une nouvelle sortie. Je ne lui ai pas donné de nom, nous allons donc lui donner un nom ici rapidement. Je vais l'appeler couleur. Si nous revenons au graphique d'événements, vous pouvez voir que nous avons maintenant accès à notre type de variable de couleur, et vous pouvez le brancher n'importe quelle autre entrée de couleur de votre choix. Donc, si nous le voulions, nous pourrions le brancher dans notre chaîne d'impression. Nous pouvons insérer la couleur dans la couleur du texte ici, par exemple, il suffit de cliquer sur play et nous devrions voir des couleurs différentes pour nos textes. Tu peux voir comme du violet et maintenant c'est comme un rouge. Ce sont donc tous les types de sorties que notre chronologie peut faire. Vous pouvez donc vraiment utiliser les chronologies pour faire plein de choses différentes. Maintenant, peut-être que vous vouliez que votre chronologie fasse des allers-retours pour faire une boucle. Je peux vous montrer comment vous pouvez configurer cela. Ce que nous allons faire, c'est utiliser nouveau l'emplacement de notre inducteur ici pour notre entrée B. Et nous allons prendre le stylo fini. Et en fait, nous allons sortir de toutes les directions et nous rechercherons switch. Lorsque vous activez la direction de la chronologie, cela sera connecté à la fin. Nous voulons maintenant pouvoir contrôler ce que notre timeline va faire, mais nous ne voulons pas avoir à les brancher sur les entrées ici. Ce que vous pouvez faire , c'est utiliser une variable pour contrôler cette chronologie. Si nous allons aux composants ci-dessous, vous pouvez voir que nous avons un exemple de chronologie. Nous pouvons obtenir cette variable. Et nous pouvons l'utiliser pour contrôler notre chronologie. Donc disons plus loin dans notre code que nous voulions que notre timeline soit lue, mais sans avoir à brancher sur notre code que nous voulions que notre timeline soit lue, cette entrée, nous pouvons utiliser cette variable. Nous pouvons traîner et chercher du jeu. Vous voyez, nous pouvons appeler une fonction appelée play. Et cela fera jouer notre chronologie. Pour faire en sorte que notre chronologie fasse des allers-retours, nous pouvons utiliser l'inverse. Donc, si nous traînons, nous recherchons l'inverse. Nous pouvons utiliser l'option inverse. Donc, s'il est en cours de lecture avant, nous voulons qu'il soit joué en sens inverse une fois qu'il est terminé. Et ensuite, s'il revient en arrière, nous voulons qu'il joue dès le début. Alors on va juste jouer. Eh bien, nous pouvons jouer dès le début comme ça. Maintenant, notre cube va se déplacer de l'emplacement de l'acteur principal vers la fin, puis revenir à la fin, au début. Et il continuerait simplement à boucler et à le faire. Nous allons donc supprimer cette note. On ne l'utilise plus. Nous allons donc compiler et cliquer sur Play. Nous pouvons voir nos coudées bouger du début à la fin. Et maintenant, il recule de la fin au début. Et cela va simplement continuer à faire ça maintenant dans les deux sens. Enfin, nous examinerons le dramaturge. Maintenant, le dramaturge contrôle la rapidité avec laquelle la chronologie va être jouée. Donc, pour l'instant, notre chronologie est fixée à quatre secondes. C'est le temps qu'il faudra pour qu'il joue. Le taux de jeu est actuellement défini sur un, car il s'agit de la valeur par défaut. Maintenant, si nous augmentons le nombre de dramaturges de deux, je courrais deux fois plus vite. Je vais donc vous montrer comment nous pouvons procéder. Nous pouvons prendre notre exemple de variable de chronologie, faire glisser vers l'extérieur et définir le taux. Maintenant, nous pouvons régler la salle de jeux. Alors peut-être que je veux que ça aille deux fois plus vite. Donc, si nous connectons ce jeu ici pour jouer, et que nous jouons maintenant, vous verrez qu' il fonctionne beaucoup plus vite qu'avant. Si nous l'augmentons à nouveau à quatre, il fonctionnera quatre fois plus vite. Donc maintenant, notre chronologie se terminera en 1 seconde, même si la durée intérieure est de quatre, parce que nous lui disons de jouer quatre fois plus vite. Donc, si nous appuyons sur Jouer maintenant, vous verrez qu'il est terminer en 1 seconde. Maintenant, il y a quelques autres paramètres que je voulais parcourir rapidement à l'intérieur du nœud de la chronologie. Donc, si nous revenons à notre plan de file d'attente et ouvrons notre chronologie. Ici, nous avons quelques bandes en haut que nous pouvons utiliser pour contrôler ce que fait notre timeline. Donc, pour commencer, nous avons lecture automatique, et si nous l'activons, cela signifie essentiellement que nous n'avons pas besoin exécuter le stylo de lecture pour que notre chronologie se frotte. Il se lancera juste au début du jeu ou chaque fois que notre Cuba apparaîtra. Donc, si je branche la broche de lecture et que nous appuyons sur play, maintenant, vous pouvez voir que la lecture est automatique, même si je ne le lui demande pas de le faire. Il existe également une option de boucle. Si nous revenons à notre cube puis à notre chronologie, vous pouvez voir qu'il y a un bouton de boucle. Maintenant, cela ne fera pas la même chose que ce que nous avons fait ici, où une fois que le cube arrive à l'emplacement de fin, puis revient à l'emplacement de départ. Cette boucle fera simplement recommencer la chronologie depuis le début à chaque fois. Donc, si nous l' activons, je débrancherai mon fichier fini et nous compilerons et appuierons sur Play. Vous verrez qu'il arrive à la fin et qu'il recommence à partir de notre point de départ. C'est donc un couple d' oxygène qu'elle pourrait trouver utile si vous utilisez des chronologies à l'avenir. Nous pouvons également modifier la façon dont nos valeurs et nos graphiques vont l'un vers l'autre. Donc, si je sélectionne mes deux points ici, touche Ctrl enfoncée, je peux les sélectionner tous les deux. Si je clique avec le bouton droit de la souris, il existe différentes options pour l'interpolation. Donc, si je le règle sur auto, et que vous voyez maintenant, au lieu de cette ligne droite entre les valeurs, nous avons une courbe qui signifie que la valeur de départ augmentera lentement de plus en plus vite. Ensuite, il diminuera lentement de plus en plus vite jusqu' à atteindre sa valeur cible. Nous pouvons utiliser ces petites poignées ici pour contrôler la rapidité ou la lenteur avec laquelle la valeur s'approche également de la valeur cible. Donc, si je sélectionne mon point ici, déplace-le vers le haut comme ça. J'ai une valeur qui augmentera lentement plus en plus vite jusqu'à ce qu' elle arrive à ce point où elle sera réellement supérieure à notre valeur n, parce que vous pouvez voir que la ligne passe au-dessus, mais puis il reviendra à notre valeur V1. Il existe maintenant plusieurs options différentes. Lorsque nous soulignons ces points, vous pouvez choisir entre auto user, break, linear et constant. Donc constante par exemple, juste une ligne droite jusqu' au point et puis elle passe instantanément à cette valeur. Nous pouvons utiliser linear, qui est la valeur par défaut. Il va de ce point au point final exactement au même rythme tout le temps. Nous pouvons utiliser ces paramètres dans notre sortie vectorielle ici. Vous pouvez donc voir si je sélectionne ces deux points ici, j'ai déjà réglé sur auto, mais nous pouvons le remettre sur linéaire par exemple. Ou si tu le souhaites, on peut le ramener en auto. Nous pouvons contrôler ces points comme nous le faisions auparavant avec notre flotteur. Et nous pouvons également le faire avec chacune de nos valeurs x, y et z. Nous pouvons donc faire de même avec notre valeur Y, par exemple. Nous pourrions les ajuster pour les augmenter ou les diminuer comme nous le voulons. C'est donc tout pour notre leçon sur les chronologies. J'espère que vous avez une meilleure compréhension de leur fonctionnement actuel et de la façon dont vous pouvez les utiliser dans vos projets futurs. 35. Leçons supplémentaires (prises): Salut tout le monde. Dans cette leçon, nous allons examiner les sockets. Sockets ou comment nous pouvons attacher des acteurs à d'autres acteurs ou des composants à d'autres composants. Nous pouvons maintenant ajouter des sockets aux maillages squelettiques. Ce sont donc des maillages qui peuvent animer, comme par exemple, le mannequin que nous avons utilisé pour notre personnage. Ou nous pouvons ajouter des sockets aux maillages statiques. Ce sont donc des mesures comme les cubes que nous utilisons. Pour commencer, je vais vous montrer comment ajouter un nouveau socket à un squelette. Nous allons donc passer au dossier Personnages ici, puis aux maillages des mannequins. Ensuite, vous pouvez voir que nous avons nos maillages squelettiques de mannequin et également le squelette utilisé par les mannequins. Nous allons ouvrir le mannequin SK. Là-dedans. Vous pouvez voir sur le côté gauche que nous avons une liste de tous les os inclus dans le squelette. Maintenant, c'est ici que nous sélectionnons un os spécifique auquel nous voulons ajouter une cavité. Supposons, par exemple, que nous ajoutions un chapeau à notre personnage. Nous voulons que le chapeau suive l'os de la tête. Il fera donc défiler et trouvera l'os de la tête qui devrait être près du bas ici. Si je continue. Allons-y. Nous avons les deux os du cou, puis l'os de la tête. Donc, si nous sélectionnons l'os de la tête, cliquez avec le bouton droit de la souris et ajoutez une socket, cela nous ajoutera une nouvelle socket à l'os de la tête. Si nous nous dirigeons vers le panneau Détails, vous pouvez voir que nous pouvons renommer ce socket. Je vais appeler la douille de mon chapeau comme ça. Maintenant que le socket est sélectionné, vous pouvez voir que j'ai la possibilité de le faire pivoter ici. Et si j'appuie sur W alors que je suis sélectionné dans la fenêtre d'affichage, je peux également déplacer le socket. Le socket est actuellement si vous regardez ici dans le panneau Détails, les zéros sont 0. Cela signifie qu'il est exactement à l' emplacement de l'os de la tête, mais nous pouvons le déplacer pour le déplacer vers le haut. Maintenant, notre cavité est au-dessus de l'os de la tête. Cela signifie que même lorsque les personnages animant cette cavité resteront à cette distance de l'os de la tête. Et c'est utile parce que si nous attachons un chapeau à cette douille, nous voudrions qu'il suive os de la tête même lorsque les personnages s'animent. Maintenant, si nous voulons avoir un aperçu de ce à quoi il ressemblerait lorsqu'il est connecté à un socket. C'est ce que nous pouvons faire. Nous pouvons donc cliquer avec le bouton droit sur notre cavité cardiaque ici, descendre jusqu'à Ajouter un élément d'aperçu et sélectionner un maillage à attacher à notre socket. Maintenant gardez à l'esprit qu' il s'agit d'un aperçu uniquement. Donc, même si nous attachons quelque chose ici en ce moment, nous ne le verrons pas dans le jeu. C'est juste pour un aperçu lorsque nous regardons des animations ou dans notre éditeur de squelettes. Pour moi, je vais juste sélectionner le cylindre ici. Et vous pouvez voir que mon cylindre tourne dans le mauvais sens. Je vais donc faire pivoter ma douille et vous pouvez voir en temps réel ou le cylindre tourne. Ce n'est évidemment pas un chapeau, c'est juste un cylindre, mais nous allons utiliser ça comme exemple. Et nous pouvons voir à quoi ressemblera notre cylindre lorsqu'il sera fixé à notre douille. Maintenant, si nous regardons une animation qui utilise ce squelette, nous allons voir cet aperçu et voir se déplacer avec l'animation. Donc, si nous revenons au navigateur de contenu, je vais aller dans le dossier des mannequins. Ensuite, les animations iront à l'argent. Et nous allons regarder le saut, par exemple. Nous allons double-cliquer dessus et j'amène cette animation ici. Vous pouvez voir que pendant que notre animation de saut est en cours de lecture, R hat suit toujours avec notre os de la tête. Maintenant, revenons à notre squelette de mannequins, si nous voulions nous débarrasser de cet aperçu, nous pouvons toujours cliquer avec le bouton droit, supprimer tous les éléments attachés et cela supprimera tous les aperçus pour nous . C'est possible, si nous voulons ajouter plusieurs alvéoles au même os. Donc si nous voulions une autre prise qui aurait peut-être un emplacement différent pour un autre type de chapeau. Nous pouvons également le faire. Il suffit de cliquer avec le bouton droit sur Add a new socket, ce qui nous permettrait d'ajouter une socket supplémentaire à notre os de la tête. Si vous souhaitez supprimer un socket, vous pouvez cliquer dessus avec le bouton droit de la souris et sélectionner l'option Supprimer ici. Maintenant, nous pouvons également ajouter des sockets aux maillages statiques. Donc, si nous revenons au navigateur de contenu ici, je vais juste passer au dossier de prototypage de niveau et à deux maillages. Nous avons juste quelques maillages de pile simples ici. Mais si nous ouvrons le cube shampooing, par exemple, nous avons ici certains détails sur le maillage et le maillage dans la fenêtre d'affichage. Et si nous allons dans le panneau Windows ici, il devrait y avoir un gestionnaire de socket et leur esprit devrait être coché. Si le vôtre ne l'est pas, vous devez cliquer dessus. Et tu peux le voir pour moi, c'est par ici. Cela nous permet d'ajouter de nouveaux sockets à notre maillage statique. Il suffit donc de cliquer sur ce petit bouton plus ici. Nous pouvons nommer notre socket. Je vais juste rappeler le mien. Comme ça. Contrairement à ce qui se passait auparavant, nous pouvons positionner notre socket. On pourrait dire « installez-vous ici ». Et maintenant, quel que soit le déplacement de ce maillage, ce socket sera 90 centimètres de son centre, même pendant le jeu. Contrairement au squelette, nous pouvons également ajouter un aperçu. Donc, si nous descendons dans le jeu d'options, nous pouvons cliquer sur Avancé et dire un maillage de pile précédent afin de pouvoir sélectionner le cylindre que nous avions auparavant ou le cylindre ici et voir que nous l'avons les mêmes maillages que nous avions auparavant. Et nous pouvons avoir un aperçu de ce à quoi il ressemblerait lorsqu'il se connecte réellement au socket. Vous savez maintenant comment créer des sockets et les ajouter aux maillages squelettiques et aux maillages statiques. Je vais maintenant vous montrer comment nous pouvons réellement utiliser ce socket pendant le jeu et y attacher des éléments. Il retournera donc dans notre navigateur de contenu, le dossier Personnages ou dans le dossier de contenu. Ensuite, allez aux plans à la troisième personne et nous ouvrirons notre plan de personnage à la troisième personne. J'ai maintenant quelques variables supplémentaires et une fonction tirées de l'une de nos leçons précédentes. Si ce n'est pas le cas, ne vous inquiétez pas, nous ne les utiliserons pas de toute façon. Donc, avant de commencer à acteurs et à les attacher aux sockets, je vais d'abord vous montrer quelques-uns des nœuds les plus couramment utilisés avec des sockets. Nous allons donc commencer par récupérer notre maillage de personnage à partir de notre panneau de composants. Et si vous vous souvenez, nous pouvons simplement double-cliquer dessus pour ouvrir la fenêtre d'affichage. Il s'agit de notre maillage animé dans notre personnage. Pour en revenir au graphique des événements, je vais zoomer ici. Nous pouvons saisir notre composant maillé. Si nous sortons de cela et que nous recherchons get socket location, vous pouvez voir que nous obtenons cette note ici. Cela nous permet de fournir un nom de socket comme r hat socket. Et si ce maillage, donc si notre maillage de personnage ici a ce socket utilisant ce nom, il retournera un emplacement mondial pour ce socket. Maintenant, nous pouvons également utiliser ce nœud get socket location avec des maillages statiques. Donc, si j'ai ajouté un nouveau maillage statique, ce qui en fait un exemple parce que notre personnage n'a pas de composant de maillage décalé. Je vais ajouter ça. Et si je le fais glisser dans notre graphique d'événements ici, je peux également l'insérer dans cette note. Et maintenant, si le maillage de pile que nous avons défini pour ce composant possède un socket, nous obtiendrons sa position mondiale actuelle. Maintenant, il y a quelques autres notes qui fonctionnent comme ça. Nous pouvons sortir de notre maillage et obtenir une rotation de la douille. Cela nous donnera la rotation du monde de n'importe quel nom de socket que nous avons mis ici et qui se trouve sur notre maillage de personnage. Ou nous pouvons supprimer ces nœuds, nous pouvons les faire glisser et la recherche obtiendra la transformation de socket, et cela obtiendra la transformation de n'importe quel nom de socket que nous avons défini ici. Et si vous vous souvenez de notre leçon de transformation, nous pouvons simplement faire glisser à partir d'ici, utiliser un nœud de rupture qui nous donne accès à l'emplacement, rotation et à l'échelle de la socket. Cela nous donne également une option d'espace de transformation. Maintenant, si c'est réglé sur RTS world, cela signifie qu'il obtiendra la rotation du monde, emplacement et l'échelle du nom de socket que nous avons mis ici. En supposant que notre entrée de maillage possède cette socket. Maintenant, si nous cliquons sur les espaces de transformation, quelques options différentes, nous pouvons sélectionner acteur. Maintenant, cela va transformer les sockets par rapport à l'emplacement central de l'acteur. Et ce que je veux dire par là, si nous allons dans la fenêtre d'affichage, si nous sélectionnons notre composant de maillage de pieu que nous avons ajouté, si je le déplace ici et que j' imagine que c'est le socket. La transformation relative de l'acteur des sockets serait cet emplacement que nous avons ici. Donc, si c'était un socket et que nous obtenions la transformation de ce socket en utilisant l'option actor ici, cela retournerait l' emplacement fourni ici. Maintenant, l'option suivante si nous revenons à notre nœud de transformation est le composant. Notez que cela va maintenant obtenir la transformation des sockets par rapport au composant auquel il est attaché. Donc si encore une fois, si je reviens à notre fenêtre d'affichage et que nous imaginons que le maillage de la pile est ici un socket au lieu d'un composant. Si je devais joindre cela à cette mesure, vous pouvez voir que notre emplacement a réellement changé. Il s'agit maintenant de sa transformation de composant. Si je le reprends et le rattache au composant de la capsule, vois que l'emplacement est différent car il s'agit de la transformation de l' acteur. Et si nous le replaçons dans le composant, vous verrez qu'il s'agit maintenant de la transformation du composant. Encore une fois, si notre socket ou désolé si notre maillage de pile était un socket et que nous devions obtenir son emplacement en utilisant l'espace des composants, il retournerait cette valeur ici une fois qu'il est attaché à quelque chose comme le Mesh Composant. Enfin, si nous revenons à notre Transform maintenant, nous avons l'espace parent de Bowman. Et si nous revenons à notre mannequin ici, nous sélectionnons notre os. Son espace osseux parent serait la valeur que nous avons définie ici. Ne t'inquiète pas trop si tu trouves ça un peu confus. La plupart du temps, lorsque vous utilisez ce nœud, vous utiliserez simplement l'option World de toute façon, car c'est généralement la plus utile, étant capable d'obtenir la position mondiale du socket. Maintenant, il existe quelques autres notes utiles lorsque vous travaillez avec des sockets. Nous allons donc supprimer ces nœuds maintenant et je vais les faire glisser depuis notre variable de composant de maillage, pour la rechercher. Est-ce que le socket existe ? Et cela va juste vérifier si le nom de socket que nous fournissons existe sur le maillage ou le maillage statique que nous branchons dans le museau, puis il retourne une valeur vraie ou fausse. Si c'est le cas. Nous pouvons également obtenir une liste ou un tableau de tous les noms de socket existants sur un composant particulier. Nous pouvons donc faire glisser et rechercher get socket, obtenir tous les noms de socket. Et cela ne nous donnera qu'un éventail de noms. Et ce seront tous les noms de toutes les sockets sur ce maillage de pile spécifique. Et cela fonctionnera à nouveau avec notre maillage squelettique également. Nous pouvons simplement le brancher comme nos nœuds précédents. Nous allons donc maintenant attacher quelque chose à un socket pendant le jeu. Nous allons donc commencer par supprimer ces notes et cliquer sur compiler. Nous allons accéder au navigateur de contenu. Je vais créer un nouvel acteur qui s' attachera à notre personnage. Nous allons donc cliquer avec le bouton droit sur la classe Blueprint. Nous allons créer un acteur, je vais appeler le mien chapeau de soulignement BP , ou ouvrir ça. Et puis ici, je vais juste ajouter un nouveau composant de maillage statique comme celui-ci. Et nous allons le régler. Maille. Nous avons donc ouvert ici le menu déroulant de maillage de la pile. Et je vais régler cela sur le cylindre que nous avons utilisé auparavant, comme ça, pour compiler et enregistrer cela. Ensuite, nous retournerons à notre ThirdPersonCharacter. Et je vais cliquer avec le bouton droit de la souris et rechercher l'événement d'entrée. Et nous utiliserons un événement d'entrée un. Donc, si vous vous souvenez, ce nœud s'exécute chaque fois que j'appuie sur un de mon clavier. Donc la première chose que nous allons faire quand nous appuierons sur un est de créer un nouvel acteur de chapeau. Je vais donc sortir du spawn pressé et social actif de la classe. Nous allons régler le chapeau de la classe comme ça. Maintenant, parce que nous allons immédiatement attacher notre chapeau à la tête de notre personnage. Nous pourrions nous en sortir simplement en utilisant un nœud de transformation et en faisant simplement apparaître le chapeau à 0 dans le monde. Et puis il s' attachera instantanément à la tête de notre personnage de toute façon. Mais parfois, pour quelques images, vous pouvez voir le chapeau apparaître au centre du monde, puis soudainement s' accrocher à la prise. Donc, ce que j'aime faire, c'est obtenir l' emplacement actuel des sockets à cet emplacement, puis l'attacher. Donc, au lieu d'utiliser le nœud de transformation, nous allons obtenir l'emplacement des sockets. Donc, je vais faire glisser le maillage et obtenir une prise. Nous allons utiliser la transformation get socket. Nous allons mettre le nom de nos sockets et cela doit être exactement le même que celui que nous avons créé dans notre squelette. Donc, si vous vous souvenez quand nous l'appelons douille de chapeau, nous devons utiliser le nom exact des moyens qui ne trouveront pas notre douille de chapeau de football. Nous allons laisser cela au monde RTS parce que nous voulons transformer le monde. Et nous allons simplement le faire glisser, brancher dans spawn transform comme ça va définir la gestion des collisions pour toujours ignorer la collision, parce que nous voulons juste qu'elle apparaisse à cet endroit. Nous ne voulons pas qu'il essaie d' ajuster notre extra de quelque façon que ce soit. Donc maintenant nous allons définir r hat actor sur une nouvelle variable juste pour pouvoir l'éditer si nous voulons plus tard faire glisser vers le bas, nous allons promouvoir une variable pour créer une nouvelle variable pour nous. Je vais appeler ce chapeau comme ça. Maintenant, nous avons un chapeau qui apparaîtra sur notre emplacement de socket lorsque nous le rejouerons. Donc, si nous pouvons jouer Paul et que j'appuie sur un, vous pouvez voir que notre cœur apparaît au-dessus de ma tête. Mais si je me déplace en C, il y reste parce que nous ne l'avons pas encore attaché à notre personnage. Nous lui disons juste d'apparaître à l'emplacement de cette socket. Il sortira donc de l'éditeur de plan et retournera au ThirdPersonCharacter ici. Ensuite, nous allons attacher notre chapeau à notre personnage. Pour ce faire, nous allons faire glisser composant de maillage vers le haut, créer une nouvelle variable de mash, faire glisser vers l'extérieur. Je vais le chercher. Attachez. Maintenant, il y a deux notes jointes que nous avons attachées acteur au composant, ce que nous allons utiliser aujourd'hui parce que nous attachons l'acteur du cœur entier à un composant, qui est notre composant maillé. Mais nous pouvons également attacher des composants à d'autres composants. Par exemple, si à l'intérieur de R hat, nous tenions un composant que nous voulions attacher au maillage, mais nous ne voulions pas attacher l' acteur de chapeau entier à notre filet. Nous pourrions utiliser ce composant de fixation, composant. Mais pour l'instant, nous allons simplement utiliser attach actor to component. Et nous allons le connecter au nœud défini. Nous avons maintenant une cible, et c'est l'acteur que nous allons réellement attacher à notre maillage, qui est le parent. Nous allons donc le brancher sur la cible ici. Ensuite, nous devons définir le nom du socket. Maintenant, ça va être la douille du chapeau. Encore une fois, cela doit toujours être exactement le même que le socket que nous avons créé dans notre squelette. Sinon, il n'attachera pas l'acteur au football. Ensuite, nous avons les règles de localisation, de rotation et d'échelle. Voici ce que le moteur va faire à l'acteur cardiaque quand je l' attache à la purée. Maintenant, par défaut, c'est garder relatif, et je vais vous montrer ce que cela fait dans le jeu. Donc si je clique sur Play, j'appuie sur un. Tu peux voir, je ne peux même pas voir mon chapeau ici. Mais si j'appuie sur F1, je regarde vers le bas. Vous pouvez voir que les chapeaux là-bas sont attachés à la douille, mais ils sont très éloignés. En gros, c' est la distance entre la prise et le World Center, qui se trouve ici. Donc, si je lance mon personnage ici et que j'appuie sur un, maintenant, nous devrions voir le chapeau beaucoup plus près du personnage. Il s'agit de la distance relative entre la prise et le centre du monde. Maintenant, le prochain, si nous revenons à notre ThirdPersonCharacter ici, est keep world, qui, si nous les plaçons tous vers le chapeau, se connectera à la prise. La distance est actuellement par rapport à la prise. Maintenant, si nous l'utilisons et que nous appuyons sur un maintenant, vous verrez qu'il est juste au-dessus de la tête de notre personnage et qu'il reste connecté au jeu de caractères. Mais si je devais revenir à mon personnage et en retard, disons deux secondes. Si je clique sur Play now, que j'appuie sur un et que je me déplace ici. Vous pouvez voir qu'il est maintenant connecté parce qu'il se déplace avec l'animation, mais c'est à cette distance que nous étions éloignés lorsque nous l'avons créé. Enfin, si nous revenons à ThirdPersonCharacter, nous pouvons le changer en accrochage à la cible. Et cela fera que notre cœur s'enclenchera directement dans la douille. Encore une fois, si nous pouvons sonder, nous allons supprimer ce délai et cliquer sur Play. Si j'appuie sur un, vous pouvez voir nos chapeaux attachés à la douille et il reste là quoi que nous fassions. Et si j'ajoute ce délai comme ça. Maintenant, avant, si nous appuyons sur un et que nous nous éloignions ensuite, il resterait à cette distance de nous réserver. Une fois ces deux secondes écoulées, il s'enclenche directement sur la prise comme vous vous y attendez. Maintenant, vous pouvez détacher un acteur d'un autre acteur, ce que je vais vous montrer comment faire maintenant, si nous revenons au personnage à la troisième personne ici, je vais ajouter de nouveaux événements d'entrée. Nous allons donc rechercher l'événement d'entrée, et je l'ajouterai pour les événements d'entrée 0, par exemple. Ici, nous allons obtenir notre variable chapeaux que nous avons créée plus tôt et qui est définie lorsque nous lançons le chapeau, nous pouvons faire glisser vers l'extérieur et nous pouvons rechercher « détacher ». Et nous pouvons utiliser l'option détacher de l'action ici. Et nous lancerons cela lorsque notre 0 sera pressé. Maintenant, la valeur par défaut est Keep relative. Maintenant, cela fera la même chose que lorsque nous attachons le chapeau. Cela permet de garder l'emplacement relatif du chapeau par rapport au centre du monde, ce qui n'est généralement pas très utile. Donc, la plupart du temps, tu changeras ça pour garder le monde comme ça. Ainsi, lorsque le chapeau se détachera, il restera à l'endroit où nous lui avons dit de se détacher. Donc, si je clique sur Compiler maintenant, Play, j'appuierai sur un chapeau de géniteur. Avons-nous toujours ce retard ? Donc, si je reviens à notre code ici, nous allons simplement le supprimer. Donc, il va compiler, appuyez sur Play. Quand j'appuie sur un, on peut voir que notre cœur est attaché à notre personnage comme il l'était avant que je puisse sauter et qu' il est toujours là. Si j'appuie sur 0, vous pouvez voir qu'il ne bouge plus avec notre personnage. Et il garde l'emplacement exact où il se trouvait quand j'ai appuyé sur 0 pour le détacher. Enfin, il y a quelques autres notes que vous pouvez utiliser lors de l'utilisation de la pièce jointe. Donc, si nous revenons à notre ThirdPersonCharacter ici, nous pouvons sortir de r hat et nous y attacher. Et cela nous permettra d'obtenir l'acteur attaché. Donc, si nous utilisons ce nœud alors qu'il est attaché à notre personnage, il renverra une référence à notre personnage. Nous pouvons également traîner et nous attacher. Et cela nous donnera les acteurs attachés. Cela nous donne un tableau de tous les acteurs qui sont actuellement attachés au chapeau. Un exemple de la façon dont cela peut être utile est peut-être lorsque votre personnage meurt et que vous détruisez son corps, vous voulez détruire toutes les choses qui pourraient y être attachées. Cela pourrait être un bon moyen d' obtenir tous les acteurs qui sont attachés à votre personnage et de les détruire tous également. Ensuite, le dernier, si nous faisons glisser et que recherchons à nouveau est attaché, vous pouvez voir qu'il y a le nom du socket parent attaché. Et cela vous indiquera à quel socket R hat est actuellement connecté s' il est connecté à un socket. Maintenant, si vous voulez trouver l'un de ces nœuds que nous avons traversés, vous pouvez toujours le faire glisser depuis un composant comme le maillage ici. Si je crée un nouveau composant de maillage ici, faites-le glisser, vous pouvez rechercher attach pour trouver ces nœuds attachés. Vous pouvez rechercher un socket pour trouver les nœuds de socket. Et vous pouvez également rechercher « gets attached » pour obtenir ces modes attachés. Maintenant, une dernière chose que je voulais mentionner avant de terminer cette leçon est que vous devez être prudent et attacher des acteurs à votre personnage car ils peuvent interférer avec la collision de vos personnages. Et cela peut amener votre personnage à s' envoler dans les airs ou à avoir des difficultés se déplacer parce que l' acteur que vous lui avez attaché bloque la collision. Une chose à faire lorsque vous attachez des objets à votre personnage, est-ce une bonne idée de passer en revue l'un de leurs composants ? J'ai une collision comme un chapeau. Nous avons notre composant de maillage de pile ici. Nous descendons et trouvons les préréglages de collision. Actuellement, il est réglé sur block ou dynamic, ce qui inclut notre personnage. C'est donc toujours une bonne idée de changer cela en personnalisé et de s'assurer que **** est réglé sur ignore afin que r hat n'interfère pas du tout avec la collision de nos personnages. C'est donc tout pour notre leçon sur les douilles. J'espère que vous comprenez maintenant comment ils fonctionnent et comment vous pouvez les utiliser dans vos futurs projets. 36. Leçons supplémentaires (volet mouvement): Salut tout le monde. Dans cette leçon, nous allons examiner le composant Mouvement du personnage. Et pour ceux d'entre vous qui ont suivi nos leçons précédentes, je viens de créer un nouveau modèle à la troisième personne afin que nous puissions repartir de zéro pour cette leçon. Désormais, le composant de déplacement de personnage est intégré à n'importe quel type de plan de personnage. Donc, dans notre plan de personnage de troisième personne, vous pouvez voir que dans le panneau Composants, nous avons le composant Mouvement de personnage. Maintenant, la composante mouvement du personnage est ce qui permet à notre personnage de se déplacer réellement. Il nous fournit également de nombreux paramètres supplémentaires que nous pouvons utiliser pour ajuster la façon dont notre personnage se déplace et le type de mouvement qu'il effectue. Donc, si nous allons de l'avant et que nous sélectionnons le composant de mouvement de personnage, vous pouvez voir dans le panneau Détails, nous avons tous les paramètres pour ce composant. Si vous n'avez pas le panneau Composants ou le panneau Détails, vous pouvez toujours les activer simplement en allant dans le menu déroulant de la fenêtre et en sélectionnant dans le panneau Détails ainsi que le Panneau des composants ici. Maintenant, nous n'allons pas passer en revue tous les paramètres de la composante mouvement, car il y en a pas mal, mais nous allons passer en revue les principaux et je vais expliquer ce qu'ils font et comment vous pouvez les ajuster. Si jamais vous oubliez le rôle d'un paramètre, vous pouvez toujours le survoler avec la souris et cela vous donnera une bonne info-bulle sur ce que fait ce paramètre spécifique. Pour commencer, nous avons l'échelle de gravité. Voilà comment la gravité est appliquée à notre personnage. Rapidement pour régler cela sur quelque chose de beaucoup plus élevé, comme cinq, et nous allons le compiler et appuyer sur play. Quand je saute, tu peux voir mon personnage ne saute pas très haut. C'est parce que nous appliquons cinq fois la gravité normale à notre personnage. Maintenant, gardez à l'esprit que cette valeur de gravité n'affecte que le personnage, aucun autre objet dans le monde. Ensuite, en revenant à notre personnage ThirdPersonCharacter et en sélectionnant le mouvement du personnage, nous obtenons l'accélération maximale. Voici à quelle vitesse le personnage va accélérer jusqu'à sa vitesse de déplacement maximale. Plus cette valeur est élevée, plus le personnage sera rapide à cette accélération, et plus elle sera basse, plus elle sera basse. Ensuite, nous avons le facteur de friction de rupture. Maintenant, plus cette valeur est élevée, plus vite le personnage s' arrêtera lorsque nous relâcherons toutes les touches de saisie de mouvement. Ensuite, nous avons la demi-hauteur accroupie. Maintenant, c'est la hauteur que sera notre composant capsule lorsque notre personnage sera accroupi. Et si nous allons dans notre fenêtre d'affichage, vous pouvez voir notre composant Capsule ici. Maintenant, notre composant capsule est ce que les textes rencontrent, ce que notre personnage rencontre. Maintenant, lorsque vous êtes accroupi, vous voulez généralement que ce soit plus court parce que votre personnage est accroupi, et c'est ce qui vous permet de vous déplacer sous des objets inférieurs. Nous allons maintenant revenir au graphique d' événement et je vais vous donner un exemple rapide de la façon dont nous pouvons déterminer composante du mouvement que nous sommes accroupis. Donc, si nous montons ici, je vais créer un nouvel événement d'entrée, enregistrer la recherche des événements d'entrée C. Et je vais juste faire défiler vers le haut et essayer de trouver cette entrée. C'est donc là pour moi. Je vais juste le configurer pour que lorsque j' appuie sur C, notre personnage s'accroupisse. Et quand je vois vraiment notre personnage marcher accroupi, gardez à l'esprit que notre personnage ne jouera pas une animation accroupie parce que nous n'avons pas configuré le côté animation de cette animation. Mais ce que nous allons faire, c'est dire au composant mouvement que nous voulons qu'il utilise les paramètres d'accroupissement pour indiquer à notre composant de mouvement que nous sommes accroupis qu'il sera retiré de la recherche de Preston pour accroupir. Et nous allons sélectionner la fonction accroupissement ici. Ensuite, nous allons sortir de Release , chercher et nous accroupir comme ça. Maintenant, ce sont des fonctions intégrées aux plans des personnages. Si vous essayez d'utiliser ces fonctions et que vous dites, simplement un plan aléatoire, vous ne pourrez pas trouver ces fonctions. Maintenant, il y a un autre paramètre que nous devons activer et qui se trouve dans notre composant de mouvement de personnage Nous devons lui indiquer que notre personnage peut réellement s' accroupir dans le moteur de recherche. nous allons juste chercher Can Crouch. Et vous verrez sous les capacités de mouvement, peut s'accroupir a effectivement coché. Nous allons donc prendre celui-là. Maintenant, nous pouvons tester cela dans le jeu, alors compilez et dirigez-vous vers la carte à la troisième personne et nous allons lancer le jeu. Maintenant, avant d'appuyer sur C, je vais juste appuyer sur la touche Tilde, qui est la touche sur le côté gauche du Wonky. Je vais chercher «  Show-Space Collision ». J'ai appuyé sur Entrée. Nous pouvons donc maintenant voir toutes les collisions dans notre niveau, y compris notre collision de capsule, dont vous pouvez voir le contour rouge de notre personnage. Maintenant, si je maintiens la touche C enfoncée et que mes capsules sont devenues plus petites, c'est la demi-vie de nos capsules, qui est de 40 centimètres. Et si j'essaie de bouger et que je vois que mon personnage se déplace également plus lentement et que ma caméra se déplace vers le bas. Maintenant, tout cela se produit parce que nous avons dit à la composante mouvement que nous allions passer en mode mouvement accroupi. Maintenant, revenons au plan de personnage ThirdPersonCharacter et sélectionnons le composant de mouvement ici. Et si nous recherchons accroupi et barre de recherche ici, nous pouvons trouver les autres paramètres d' accroupissement. Nous avons donc la vitesse maximale de marche accroupie. Maintenant, c'est la vitesse à laquelle le personnage se déplace en s'accroupissant, et cette valeur est exprimée en centimètres par seconde. Maintenant, nous avons également un paramètre appelé peut quitter les registres lorsque vous vous accroupissez. Si ça prend son envol, je peux te montrer ce que ça fait. Nous allons jouer, courir jusqu'à notre rebord ici. Et si je tiens le siège accroupi en C, cela ne me permettra pas de sortir du bord pendant que je suis accroupi. Maintenant, si nous devions activer ce paramètre, cela nous permettrait de nous éloigner des bords en nous accroupissant. Ensuite, nous allons nous débarrasser de la recherche de foule et passer aux paramètres généraux. Nous avons maintenant le mode de déplacement terrestre par défaut et le mode de déplacement de l'eau par défaut. Maintenant, les modes de mouvement ou comment nous indiquons au composant de mouvement quels paramètres nous voulons qu'il utilise. Donc, par défaut, lorsque nous sommes sur terre, nous lui disons que nous voulons utiliser les paramètres de marche qui se trouvent ici. Lorsque vous êtes dans l'eau, nous voulons utiliser les réglages de nage qui se trouvent plus bas. Maintenant, lorsque le composant de mouvement est en mode natation, il ne commence pas soudainement à utiliser les animations de natation. Les animations sont gérées séparément. Ce qu'il fait, c'est qu'il indique la composante mouvement que nous voulons utiliser les paramètres de nage au lieu de, par exemple, les paramètres de marche. Maintenant, en ce qui concerne les réglages de marche, nous avons la hauteur maximale de la marche. Voilà à quel point votre personnage ne pourrait pas monter sans avoir à sauter. Maintenant, par défaut, c' est 45 centimètres, mais peut-être que vous aviez un escalier et que le personnage ne pouvait pas monter normalement, vous auriez dû sauter. Vous devrez peut-être augmenter légèrement cette valeur pour permettre au personnage de monter en hauteur. Ensuite, nous avons l'angle du sol accessible à pied. Voilà la pente abrupte que notre personnage peut gravir. Si vous voulez que votre personnage gravisse des pentes plus raides, vous devez augmenter cette valeur. Ensuite, nous avons notre vitesse de marche maximale. C'est la vitesse maximale notre personnage peut atteindre en marchant. Donc, si nous voulons que notre personnage marche plus vite, nous avions augmenté cette valeur et si nous voulions qu'il marche plus lentement avec diminution, alors nous avons la vitesse de marche maximale pour accroupi. Nous l'avons déjà expliqué. C'est la vitesse à laquelle notre personnage se déplace lorsqu'il est accroupi. Ensuite, nous avons la vitesse de marche analogique Min. Et ceci est utilisé si vous avez un seau, une manette de jeu. Il s'agit de la vitesse minimale que votre personnage peut atteindre avec la saisie du joystick. Ensuite, nous avons la décélération de freinage en marche. Voici la force de décélération appliquée au personnage lorsque vous ne marchez au personnage lorsque vous ne plus dans une direction. Ainsi, plus cette valeur est élevée, plus vite votre personnage ralentira. Ensuite, nous avons la canette qui descend des rebords. Si c'est vrai, il se comporte comme R pouvait marcher sur les registres lorsqu'il est accroupi, cela permet à notre personnage de sortir du rebord en marchant. Et si c'est faux, notre personnage ne pourra pas sortir des registres. Maintenant, en faisant défiler vers le bas, nous allons accéder aux paramètres de saut ici. Maintenant, nous avons les sauts, la vélocité. Il s'agit de la force appliquée lorsqu'un personnage saute réellement. Donc, si nous devions définir cela, c'est quelque chose vraiment élevé, comme dans les années 2000. Et nous pouvons tirer, si nous appuyons sur play et que nous sautons nos personnages en sautant très haut. Maintenant, en revenant au personnage ThirdPersonCharacter et en sélectionnant notre hanche de mouvement de personnage, nous avons d'autres paramètres pour notre saut. Je ne vais pas tous les passer en revue, mais certains des principaux sont le contrôle aérien. Maintenant, c' est le contrôle que le joueur aura sur la direction dans laquelle se déplace votre personnage joueur aura sur la direction dans laquelle se déplace cette valeur est élevée, plus il aura de contrôle. Maintenant, en descendant, nous n'allons pas aborder les paramètres réseau dans cette leçon, car ils sont beaucoup plus avancés que ce que cette leçon va couvrir. Mais si nous continuons à descendre, vous trouverez les réglages de nage. Et ici, vous pouvez régler la vitesse de nage maximale. Nous pouvons régler des choses comme la flottabilité. Et elles ne sont pertinentes que si votre personnage est en mode natation. Ensuite, il faut voler. Encore une fois. Nous pouvons régler la vitesse maximale du débit. Il s'agit de la vitesse à laquelle le personnage se déplacera en mode de déplacement volant. Maintenant, en descendant dans les paramètres de rotation des mouvements du personnage, vous pouvez voir que nous avons un taux de rotation. Il s'agit de la vitesse à laquelle le personnage pivote pour faire face à la direction dans laquelle il est censé se tourner. Donc si je devais régler cela de 500 à 50, et que nous compilions et cliquons sur play. Maintenant, si je regarde dans cette direction et que j'appuie sur W, vous pouvez voir mon personnage tourner lentement dans cette direction. C'est ce réglage que nous contrôlons. Quelle est la rapidité avec laquelle le personnage tourne. Nous avons maintenant quelques autres paramètres de rotation ici. Nous avons maintenant orienté la rotation par rapport au mouvement, ce qui signifie que le personnage fera face la direction dans laquelle nous nous déplaçons. Si nous désactivons cette option et que nous tombons et que nous appuyons sur Play, et que si je commence à me déplacer dans cette direction, notre personnage continue face à l'avant parce que nous ne tournons plus dans la direction de notre mouvement. Maintenant, dans notre composant de mouvement, nous avons également un autre paramètre appelé utiliser la rotation souhaitée du contrôleur. Maintenant, si nous l'activons, notre personnage fera face à la direction de nos caméras. Maintenant, nous fixons notre taux de rotation à 50. Je vais augmenter ce chiffre à 500. Et si nous compilons et que nous appuyons sur Play, vous pouvez voir que chaque fois que je déplace ma caméra, notre personnage se tournera vers la direction. Maintenant, vous pouvez voir si je m'ai empêché de quitter mon personnage rapidement, notre personnage a un peu de retard. C'est à cause de la vitesse de rotation. Nous pouvons donc diminuer ou augmenter cette valeur pour que notre personnage pivote plus rapidement dans cette direction. Maintenant, quelque chose à garder à l'esprit, nous avons utilisé la rotation souhaitée par le contrôleur c' est que cela ne fonctionne pas si vous avez également coché Orienter la rotation par rapport au mouvement. S'ils sont tous les deux cochés ici ou s'ils utilisent la manette, la rotation souhaitée ne fonctionnera pas. Il s'agit donc de la plupart des principaux paramètres que vous allez ajuster et de la composante de mouvement du personnage. Mais nous pouvons également les ajuster dans le jeu. Donc, si nous voulons accéder à ce que sont ces valeurs actuellement, modifiez-les toutes. Nous pouvons toujours faire glisser notre composant de mouvement de personnage et rechercher une valeur particulière. Supposons, par exemple, que nous créions un système de sprint et que nous voulions qu'il modifie la vitesse de déplacement maximale de nos personnages. Nous pourrions rechercher la vitesse de marche maximale définie, ce qui nous donne accès à la fois à notre vitesse de marche maximale et à notre vitesse de marche maximale accroupie, où nous utilisons la vitesse de marche maximale. Je vais régler la vitesse maximale de marche à 1500. Et nous allons copier et coller ce nœud, connecter leur cible de sauvegarde à notre mouvement de personnage ici. Et nous allons créer une nouvelle entrée. Il recherchera donc une entrée, puis Maj, créera une entrée de décalage gauche. Lorsque vous appuyez dessus, nous voulons que notre vitesse de marche maximale augmente à 1500 et qu'une fois relâchée, elle la change en 600. Maintenant que nous compilons et que j'appuie sur Lecture, si je marche sans appuyer sur Maj, nous avons notre vitesse de marche normale. Et si je maintiens la touche Maj enfoncée, vous pouvez voir notre personnage va beaucoup plus vite. Maintenant, revenons au plan ThirdPersonCharacter, nous pouvons également changer le mode de déplacement ou le personnage dans lequel se trouve le personnage. Encore une fois, si nous obtenons le mouvement de notre personnage, nous pouvons le faire glisser et simplement définir le mode de déplacement. Et nous pouvons utiliser la fonction de mode de mouvement SAT ici pour changer le mode de mouvement actuel de notre personnage. Nous pouvons donc le régler sur la chute ou la nage en fonction du mode de mouvement dans lequel nous voulons que notre personnage soit actuellement. Maintenant, si vous vous souvenez, nous avons activé accroupir dans notre composant de mouvement, mais vous pouvez également activer et désactiver d'autres modes de mouvement. Donc, si nous faisons défiler vers le bas ici, cela devrait être sous le mouvement Naff. Nous pouvons déposer, cliquer sur le menu déroulant pour les capacités de mouvement. Ensuite, vous pouvez voir que nous pouvons activer et désactiver tous les types de modes de déplacement auxquels votre personnage peut accéder. Maintenant, nous pouvons également savoir s'ils sont activés ou non dans notre code. Nous pouvons donc rechercher peut s'accroupir par exemple. Cela nous permettra de vérifier si notre personnage peut actuellement s'accroupir ? Maintenant, en utilisant notre variable de mouvement de personnage, nous pouvons également ajuster n'importe lequel de nos autres paramètres. Nous pouvons donc faire glisser et rechercher des ensembles, utiliser la rotation souhaitée par le contrôleur. Et nous pouvons l'activer ou le désactiver en fonction de ce que nous faisons dans notre code. Nous pouvons également augmenter ou diminuer notre taux de rotation. Nous pouvons donc rechercher la rotation, la location, et nous pouvons définir un taux de rotation que nous voulons utiliser au lieu d'avoir à le définir dans nos paramètres de rotation de mouvement de personnage ici. Il y a maintenant des paramètres que nous n'avons pas abordés dans cette leçon uniquement parce qu'ils sont nombreux et que certains d'entre eux sont beaucoup plus avancés et assez spécifiques à certains besoins. Mais vous pouvez trouver dans la plupart des catégories et options avancées qui vous donneront accès à quelques informations supplémentaires. Et si vous voulez savoir à quoi servent ces variables, vous pouvez toujours survoler. Cela vous donne une assez bonne explication de ce qu'ils font. Les derniers réglages que nous allons aborder sont en fait dans les valeurs de classe par défaut du personnage. Donc, si nous cliquons sur les valeurs par défaut des classes et que nous faisons défiler vers le haut, vous devriez trouver le contrôle d'utilisation des options de rotation, de tangage, de lacet et de roulis ici. Maintenant, comme le réglage de rotation souhaité par le contrôleur utilisateur que nous avons dans le mouvement du personnage, cela place le personnage dans la direction pointée par la caméra. Mais la différence est qu' avec ces paramètres, s'ils sont activés, le personnage fera immédiatement face à cette direction. Cela ne prend pas en compte le taux de rotation que nous avons dans notre composant de déplacement de personnage. Si nous faisons défiler vers le bas jusqu'aux paramètres de rotation, ce taux de rotation sera ignoré. Si nous désactivons la rotation souhaitée de notre contrôleur d'utilisation et que nous revenons aux valeurs par défaut de notre classe, faites défiler vers le haut. Nous pouvons activer ces paramètres pour voir comment ils fonctionnent dans le jeu. Donc, pour commencer, il suffira de permettre la rotation en Europe. C'est donc d'un côté à l'autre. Nous allons compiler, appuyez sur Play. Vous pouvez voir que lorsque je fais pivoter mon appareil photo, le personnage fait instantanément face à cette direction. Maintenant, généralement pour un personnage basé au sol comme notre ThirdPersonCharacter ici, vous n'utiliserez que l'option, mais vous pouvez activer les autres paramètres dans les valeurs par défaut de la classe. Si nous faisons défiler vers le bas pour les trouver, vous pouvez voir que nous avons le pitch and roll. Maintenant, si nous activons les deux et que nous cliquons sur Compiler, vous verrez que lorsque nous appuierons sur Lecture, nous pouvons viser notre personnage dans n'importe quelle direction vers laquelle notre caméra est tournée. Mais encore une fois, vous n'utiliseriez généralement ces deux paramètres pour un personnage au sol comme celui-ci. Maintenant, enfin, comme nos variables dans notre composant de mouvement de personnage, nous pouvons les définir à l'aide du code afin que nous puissions cliquer avec le bouton droit de la souris, nous pouvons rechercher pour définir la rotation du contrôleur. Nous pouvons utiliser set, utiliser le contrôle de la rotation, du tangage, du roulis et du lacet. Et nous pouvons ajuster ces paramètres à l'aide du code. Ce sera donc tout pour cette leçon. Nous avons abordé la plupart des paramètres les plus couramment utilisés avec le composant Mouvement du personnage. J'espère que vous comprenez maintenant comment cela fonctionne et comment vous pouvez ajuster la façon dont vos personnages se déplacent. 37. Leçons supplémentaires (effets audio): Salut tout le monde. Dans cette leçon, nous allons voir comment nous pouvons jouer des sons à l'aide des nœuds Blueprint. Maintenant, Unreal Engine 5 a deux systèmes de sonorisation. Vous avez actuellement le système Sound Cue et le système de son Meta. Ces deux systèmes utilisent les mêmes nœuds Blueprint pour jouer les sons. C'est pourquoi nous allons les examiner tous les deux dans cette leçon aujourd'hui. Maintenant, le système audio Meta est actuellement en version bêta, ce qui signifie que nous devons l'activer. Nous allons donc nous diriger vers l'option d'édition, accéder aux plugins, et nous allons rechercher un sujet. Nous allons prendre l'option métal ici. Si le vôtre est déjà coché, c'est génial. Vous l'avez déjà activé. Si ce n'est pas le cas, nous allons cliquer sur Oui, puis nous devons redémarrer le moteur rapidement. Maintenant, je suis de retour dans le moteur et j'ai activé le système audio du métro. Maintenant, nous pouvons toujours utiliser le système de son de file d'attente également. Nous venons également d'activer le système de métro. Et ce que nous pouvons faire pour nous assurer qu'il est activé est le bouton droit de la souris dans le navigateur de contenu. Nous pouvons accéder à l'option son et nous assurer que nous avons l'option de source sonore Meta ici. Je vais maintenant expliquer la principale différence entre les signaux sonores, les sons métalliques et les ondes sonores. Ce que nous allons faire, c'est aller dans le dossier du moteur. Et si ce n'est pas le cas, vous pouvez aller dans Paramètres, puis dans la catégorie de contenu et vous assurer que l'option Afficher le contenu du moteur est cochée. Et cela devrait afficher ce dossier ici. Maintenant, avec le dossier du moteur sélectionné, nous allons ajouter un nouveau filtre, qui va descendre au son. Nous allons trouver l'option d'onde sonore qui devrait être en bas. Nous allons nous occuper de ça. Et maintenant, nous voyons toutes les ondes sonores qui sont intégrées au moteur. Si nous survolons l'un d'entre eux, nous pouvons réellement le lire. Donc si je frappe, tu devrais pouvoir entendre ce son. onde sonore est essentiellement le fichier audio que vous obtenez lorsque vous importez un nouveau son dans le moteur. Pensez aux ondes sonores n'est qu'un fichier sonore de base. Il n'a pas vraiment beaucoup d'options de personnalisation. Ouvrez maintenant l'une de ces ondes sonores qui nous amène à mon autre écran ici, vous pouvez voir que nous avons quelques paramètres ici. La plupart du temps sous le son, c'est ce que vous devez ajuster. Il existe des paramètres supplémentaires, mais nous n'allons pas les aborder dans cette leçon uniquement parce qu'ils sont un peu plus avancés. Mais vous pouvez régler la hauteur du volume et activer ou désactiver la boucle pour cette onde sonore. Mais au-delà de cela, il n'y a pas une tonne d' options ici pour personnaliser le son. C'est là que les signaux sonores et le système audio Mehta entrent en jeu. Il fermera donc notre onde sonore pour le moment et retournera au navigateur de contenu. Et nous allons nous débarrasser de nos hanches filtrantes. Nous allons donc supprimer l'onde sonore, ajouter un nouveau filtre et rechercher les sons qui sortent. Ensuite, nous voulons l'option Sounds Cue ici. Et maintenant, vous pouvez voir tous les signaux sonores intégrés au moteur, comme les ondes sonores. Nous pouvons donc passer la souris sur l'un d'entre eux et appuyer sur le jeu et entendre le son, ce signal sonore ou jouer. Si nous double-cliquons sur un signal sonore, nous pouvons ouvrir l'éditeur de signal sonore. Maintenant, je ne vais pas passer toutes les choses que vous pouvez faire dans un éditeur de sons parce qu' il y en a beaucoup. Si vous cliquez avec le bouton droit de la souris, vous verrez qu' il existe de nombreux nœuds qui font des choses différentes pour le contrôle du son. Mais ce qu'un signal sonore fait essentiellement , c'est qu'il prend un son d'onde. Donc, si nous sélectionnons cette note ici, vous pouvez voir qu'elle représente réellement la vague d'échec compilée. Et nous pouvons changer cela si nous le voulons. Ensuite, il émet ce son vers le nœud de sortie. Tout son que nous avons branché sur cette sortie est celui qui sera joué chaque fois que nous jouerons notre signal sonore ayant échoué à la compilation. Maintenant, si nous le voulions, nous pourrions avoir plusieurs sons d'ondes dans un seul signal sonore. Et la façon dont nous pouvons le faire comme si nous recherchions avec le bouton droit de la souris sur Wave Player. Nous pouvons sélectionner ce nouveau nœud et définir la nouvelle vague que nous voulons placer afin de pouvoir compiler avec succès. Maintenant, peut-être que nous voulions, chaque fois que nous demandions à ce signal sonore de le jouer choisir aléatoirement entre deux ondes sonores différentes. Nous pourrions le faire simplement en faisant glisser la recherche aléatoire. Et nous pourrions brancher ces deux ondes sonores dans cette charge aléatoire, puis la sortie dans notre nœud de sortie. Et maintenant, chaque fois que nous jouons ce Q, il choisira aléatoirement l'un de ces sons comme ça. Maintenant, il y a certaines choses sur la gauche. Il y a le volume multiplié et la hauteur multipliée. Et cela affectera toutes les vagues qui se trouvent dans ce cube. Donc, au lieu d'avoir à aller à chaque vague que nos utilisateurs de file d'attente, nous pouvions simplement contrôler le volume et la hauteur ici. Nous avons maintenant les paramètres d'atténuation. Maintenant, je ne vais pas aborder cela en détail dans cette leçon parce qu'ils sont un peu plus avancés. Mais en gros, les plans de réglage de l'atténuation contiennent juste un ensemble de paramètres qui contrôlent la distance parcourue par un son et aussi la diminution du volume du son sur une distance. Si vous voulez voir les paramètres qui sont inclus, vous pouvez utiliser cette option ici. Et je vais vous montrer tous ces paramètres. Je ne vais pas les parcourir parce qu'ils sont nombreux et qu'ils sont assez complexes. Si vous voulez en savoir plus sur ces épopées, vous trouverez une très bonne documentation sur l'atténuation du son. Nous avons maintenant abordé les différences fondamentales entre une onde sonore et un signal sonore. Maintenant, encore une fois, les ondes sonores ne sont que le fichier sonore de base que vous avez important pour le moteur. Et puis des indices sonores. Nous pouvons faire des choses comme sélectionner des ondes sonores au hasard. Nous pouvons ajuster des éléments tels que la hauteur par le biais de ces nœuds ici. Enfin, je vais juste vous expliquer comment créer un signal sonore. Donc, ce que nous pouvons faire, c'est que si nous allons dans notre navigateur de contenu ici, je vais me débarrasser de mon filtre de signal sonore simplement en cliquant avec le bouton droit de la souris et en supprimant le signal sonore. Et nous allons ajouter un nouveau filtre. Et nous allons passer aux sons et nous allons simplement nous occuper des sons. Et ça va nous montrer tous les types de sons. Nous allons donc nous occuper de cela et nous allons trouver une onde sonore. Nous avons donc notre obturateur de caméra ici. Maintenant, pour créer un nouveau signal sonore, vous pouvez simplement cliquer avec le bouton droit sur une onde sonore. Et ici, vous pouvez monter pour créer un cube et vous pouvez cliquer dessus, et cela nous créera un nouveau signal sonore. Si nous ouvrons ce nouveau signal sonore, vous verrez, si je l'affiche à l'écran. Vous pouvez voir qu'il y a une onde d'obturateur de caméra. C'est sur cela que nous avons cliqué avec le bouton droit de la souris dans le navigateur de contenu. Et il se connecte à notre sortie pour nous à l'intérieur de notre nouvel obturateur de caméra q. Vous pouvez également créer des indices sonores. Si nous allons dans le dossier Personnages ici, je vais juste me débarrasser de ces filtres, cliquer avec le bouton droit de la souris et supprimer tous les filtres. Ensuite, nous pouvons également créer des indices sonores en cliquant avec le bouton droit de la souris. Et ici, allez au son et vous pouvez trouver le signal sonore. Et cela ne fera que créer un signal sonore vide pour nous. Donc, si nous ouvrons ceci, vous verrez qu'il n'y a aucune entrée ici parce que nous ne lui avons pas dit quelle vague nous voulons qu'elle utilise. Et si vous voulez ajouter une vague, vous pouvez simplement cliquer avec le bouton droit de la souris et rechercher wave, wave player. Et vous pouvez définir un signal sonore ici et le connecter à la sortie. Nous allons maintenant passer au système de sonorisation en métal. Et le système audio en métal remplace simplement le système de sons. Donc, si nous allons dans le navigateur de contenu, je vais cliquer avec le bouton droit sur les sons et nous allons créer une nouvelle source sonore métro. Maintenant, c'est l'équivalent de notre signal sonore ici. Nous allons donc créer une nouvelle source sonore de mesure. Nous allons appeler ce nouveau son comme ça, et nous allons l'ouvrir. Nous avons maintenant une nouvelle interface utilisateur. Il ressemble un peu à notre système de file d'attente, mais il présente quelques différences. abord, nous avons une contribution ici, et ce genre de travaux comme pendentifs d'exécution font à l'intérieur des plans. Cela fonctionnera lorsque le son de notre métro sera appelé à jouer. Et puis nous avons terminé. Nous voulons donc lancer ceci une fois que nous aurons fini d'exécuter notre code et ensuite, nous aurons cette sortie et c'est ce que nous branchons pour notre son. Actuellement, il est écrit « tomate », parce que notre réglage pour notre son Meta est en fait réglé sur mono. Si vous souhaitez modifier cela, ce vous faites probablement en général, vous devez cliquer sur ce menu déroulant et sélectionner stéréo. Et maintenant, vous pouvez voir que nous avons une option pour nos sorties gauche et droite. Maintenant, contrairement au système de repères sonores, je ne vais pas entrer dans les détails avec ce système parce que si vous cliquez avec le bouton droit, vous verrez qu'il y a de nombreuses fonctions. C'est un très gros système. Mais ce que nous allons faire, c'est créer un nouveau plan Wave. Donc, si vous cliquez avec le bouton droit de la souris et que vous recherchez Wave Claire, nous pouvons utiliser ce nœud pour jouer nos sons d'ondes. Vous pouvez voir que nous avons des entrées play et stop. Encore une fois, elles fonctionnent comme des entrées d'exécution sur un nœud de Blueprint. C'est ainsi que nous maintenons cette note pour émettre un son ou arrêter de jouer un son. Nous pouvons mettre en place une vague d'actifs. C'est donc ici que nous définissons notre son d'onde que nous voulons qu'il joue. Nous pourrions donc choisir, disons, un fichier compilé. Nous pouvons définir une heure de début. Donc, si nous le voulions, nous pouvions démarrer le son à un moment différent de 0. Nous pouvons changer le ton. Nous pouvons le mettre en boucle. Nous pouvons régler l'heure à laquelle la boucle commence. Et nous pouvons définir combien de fois ou combien de temps, désolé, la boucle va. Boucle pour. La durée de la boucle est réglée sur moins un. Cela signifie simplement que si la flûte est cochée, elle bouclera pour toujours. Maintenant, ce nœud a de nombreuses sorties et nous n'allons pas les couvrir toutes, mais nous allons voir comment jouer ce son. Donc d'après notre entrée, nous voulons lancer notre jeu sur notre vague Claire, c'est ce qui lui dit de commencer à jouer un son. Et puis, à partir de nos sorties que nous voulons, j'ai terminé, et nous allons le brancher sur notre son métal fini ici. C'est ce qui leur indique au son que notre onde a fini de jouer. Ensuite, nous avons cette prise et directement, et nous allons les brancher sur nos sorties ici. Pour notre son métal. C'est ce qui fournit une sortie audio gauche et droite pour notre son. Maintenant, si nous appuyons sur lecture, nous devrions entendre un son. La différence avec les métazoaires est que nous avons ces broches d'exécution sur les nœuds. Et ici, ce que nous pourrions faire au lieu de simplement exécuter le nœud de sortie inachevé, c'est que si nous le voulions, nous pourrions avoir plusieurs sons joués les uns après les autres. Nous pouvons donc copier notre lecteur Wave ici, le coller ici. Maintenant, quand notre premier son sera terminé, peut-être voulons-nous jouer un autre son pour pouvoir connecter cette broche finie trop polie. Nous insérons un nouveau son ou le définissons pour indiquer « Compiler success ». Mais maintenant, nous voulons connecter notre gauche et nos pièces à ces broches de sortie afin que nous puissions réellement entendre le son. Mais si nous les remplaçons, vous pouvez voir que cela déconnecte les premiers. Ce dont nous avons besoin maintenant, c'est d'un mixeur. Nous allons donc cliquer avec le bouton droit et rechercher mixer. Vous voyez que nous avons beaucoup de mixages différents en fonction du nombre d'entrées dont il dispose, nous allons utiliser une table de mixage stéréo. Nous allons donc faire un mixage stéréo ou deux. Cela signifie que nous pouvons brancher notre gauche et notre droite à partir d'ici, et notre gauche et notre droite à partir d'ici. Et cela ne nous donnera qu'une sortie pour la gauche, pour la droite. Ensuite, à partir de notre fin sur notre deuxième diagramme d'onde, nous connecterons cela à la sortie. Donc maintenant, ce qui va se passer, c'est lorsque nous disons à notre médecine de jouer, elle jouera, sera compilée, échouée. Une fois que la lecture est terminée, elle jouera avec succès. Et il va émettre l'audio gauche et droit de ces deux nœuds dans la table de mixage, puis envoyer le résultat sur notre son métal. Et nous pouvons le tester simplement en appuyant sur Play. Vous pouvez voir les deux sons jouer l'un après l'autre. n'est donc qu'un exemple simple de ce que vous pouvez faire avec le nouveau système audio Metro. Maintenant, il existe d'autres paramètres. Si nous allons dans les paramètres de la source ici, vous pouvez voir que nous pouvons définir un réglage d'atténuation tout comme nos signaux sonores. Et encore une fois, il s'agit du plan qui contrôle la distance à laquelle le son peut être entendu et la diminution du volume sonore sur une certaine distance. Ensuite, je vais vous montrer comment nous pouvons jouer tous ces différents types de sons à l'aide de plans. Ce que nous allons faire, c'est aller dans notre ThirdPersonCharacter, retourner dans notre dossier de contenu ici. Je vais juste masquer le dossier de contenu de notre moteur. Nous allons aller dans le dossier de la troisième personne, ouvrir les plans et aller dans ThirdPersonCharacter. Et si vous ne l'avez pas déjà remarqué, j'ai créé un nouveau projet à la troisième personne à partir de nos derniers projets, donc nous prenons un nouveau départ ici. Nous allons donc maintenant mettre en place un exemple de la façon dont nous pouvons jouer certains sons. Je vais donc ajouter le nœud de jeu qui va sortir de là et faire un chronomètre par événements. Du maquereau de l'événement. Nous allons créer un événement personnalisé. Nous appellerons cela le son de M. Et rangez-le rapidement. Et je vais faire cette boucle, disons toutes les deux secondes et nous allons aussi faire la boucle. Il y a maintenant quatre nœuds principaux pour jouer des sons. Si nous sortons de notre événement sonore ici et que la recherche jouera le son. Et vous voyez que nous avons joué du son, 2D et jouer du son sur place. La différence entre ceux-ci est la lecture du son. Une 2D est vraiment utile pour des choses comme les sons de l'interface utilisateur. Il joue simplement sur l'ordinateur du joueur local. Il ne diffuse pas le son à un endroit précis dans le monde. Ensuite, nous avons joué le son sur place, qui joue un son à un endroit précis dans le monde. Nous allons donc commencer par l'endroit mardi. Ici, vous pouvez voir que nous pouvons régler un son. Il peut s' agir d'une onde sonore, d'un signal sonore ou d'un son métallique. Donc, si nous recherchons notre sujet, vous pouvez voir que nous pouvons le régler sur notre nouveau son de masker. Nous pouvons définir une file d'attente sonore aiguë ou une onde sonore. Maintenant, c'est une bonne pratique d' utiliser des indices sonores ou des sons Meta uniquement parce que vous avez simplement plus de contrôle sur la façon dont ils sont exécutés. Mais pour l'instant, je vais juste utiliser nos nouveaux sons Meta. J'ai donc cherché un nouveau son de métro et nous allons le sélectionner à nouveau. Vous pouvez sélectionner un Q si vous le souhaitez. Il fonctionnerait exactement de la même manière que le son de notre métro. Il compilera et appuiera sur play. Et nous devrions entendre ce son. Et il paie ces deux sons. Parce que si vous vous souvenez, dans notre son métal, nous enchaînons ces deux sons ensemble. Maintenant, revenons à notre ThirdPersonCharacter, nous allons cliquer sur ce petit menu déroulant qui nous donne quelques paramètres que nous pouvons utiliser pour contrôler le son en cours de lecture. Nous pouvons modifier le volume et la hauteur. Nous pouvons définir une heure de début. Peut-être que vous aviez un son très long et que vous vouliez qu'il commence à cinq secondes, vous pouvez en mettre cinq ici, et c'est à ce moment-là que le son s'arrête. Nous avons des paramètres de simultanéité. Maintenant, c'est un peu comme le plan d'attention. Mais ce type de plan contient les paramètres de la quantité de ce son pouvant être jouée en même temps. Je ne vais pas entrer dans cette leçon parce que c'est un peu plus avancé, mais c'est à ça que ça sert et c'est pareil pour posséder un acteur ici, les deux sont utilisés pour concurrence. Mais pour l'instant, nous pouvons simplement les laisser vides et notre son jouera très bien. Nous allons maintenant jeter un œil à l'emplacement du son de lecture. Nous allons donc nous débarrasser de notre maison mardi. Compilez, faites glisser notre son ici et recherchez le son de Platon sur. Nous n'émettrons pas de son sur place. Maintenant, ce nœud va avoir quelques options supplémentaires. Nous pouvons donc dire « son ». Cette fois, nous allons choisir, par exemple, la file d'attente d'obturation de notre appareil photo. On peut dire « lieu ». Je vais donc utiliser l'emplacement de nos personnages. Nous utilisons donc obtenir l'emplacement de l'acteur. Branchez-le sur la broche de localisation. Et si nous compilons, nous devrions entendre ce son jouer toutes les deux secondes. Juste comme ça. Si nous revenons à notre plan à la troisième personne, si nous cliquons sur la flèche vers le bas, vous verrez que nous avons quelques nouvelles options ainsi que certaines des mêmes que celles de notre nœud précédent. Nous pouvons définir une rotation si nous le voulons. Nous pouvons également modifier la hauteur du volume et les heures de début comme précédemment. Mais maintenant, nous avons une option pour le réglage de l'attention. Maintenant, si vous laissez ce champ vide, il utilisera le paramètre d'atténuation que vous avez défini à l'intérieur du cube. Donc, si vous vous souvenez qu'il est défini ici, maintenant, c'est un peu comme une option de remplacement. Peut-être que cette fois, lorsque vous jouez le son, vous vouliez utiliser différents paramètres de distance pour déterminer la distance à laquelle le son peut être entendu. C'est donc un peu comme un paramètre de remplacement. En général, si vous utilisez l'activation du son, vous souhaitez les placer dans les repères sonores plutôt que dans les nœuds ici. Ensuite, comme auparavant, nous avons les paramètres de concurrence et les épingles de notre acteur propriétaire ici également. Maintenant, les deux nœuds que nous avons utilisés jusqu'à présent, je viens d'être placés sur des nœuds et ils sont parfaits pour jouer un son et l'oublier. Mais nous pouvons vouloir jouer un son et mettre en pause ce son ou le lupus ou le rejouer. Il y a donc d'autres nœuds que nous pouvons utiliser pour cela si nous sortons de notre son maintenant et que nous recherchons un son de spawn en C que nous avons un son de spawn 2D, un son spawn à l'emplacement et un son de spawn attaché. Maintenant, je ne vais pas couvrir le son de spawn 2D parce que c'est fondamentalement le même que notre note 2D précédente. Mais ce que nous allons faire, c'est utiliser l'emplacement du sondeur. Maintenant, si nous créons ceci, vous pouvez voir que nous avons toutes les mêmes options que nous avions auparavant, à part que nous en avons une nouvelle appelée destruction automatique. Cela signifie qu'une fois le son que nous avons défini aura fini de jouer, il détruira automatiquement ce composant sonore. Donc, selon ce que vous prévoyez de faire avec ces sons, vous pouvez désactiver cette option. Peut-être prévoyez-vous de le répéter ou de le mettre en pause, puis de le rejouer plus tard. Vous devriez probablement désactiver ce réglage. Maintenant, vous pouvez voir que nous avons également une sortie, et c'est une sortie composante audio, et c'est ce que nous pouvons utiliser pour contrôler leur son. Donc, si nous traînons, nous pouvons le promouvoir en variable. Nous pouvons donc sélectionner l'option Promotes Variable qui créera une nouvelle variable appelée composant audio. Et nous pouvons définir un nom. Nous allons donc le définir pour qu'il s'agisse d'un composant sonore comme celui-ci. Et maintenant, en utilisant cette variable de composant sonore, nous pouvons appeler de nombreuses fonctions différentes pour contrôler le son que nous avons défini. Donc, si nous obtenons notre variable de composante sonore ici, nous faisons glisser la souris, nous pouvons faire des choses comme mettre en pause nous-mêmes afin de rechercher Set Pause. Et nous pouvons définir si le son est pause ou si nous voulons modifier le volume de notre son, nous pouvons faire glisser le son et régler le volume. Nous pouvons modifier le volume, multiplier en utilisant ce nœud. Et une fois que nous en aurons fini avec notre composante sonore, peut-être voulons-nous simplement la détruire. Nous pouvons simplement faire glisser la recherche de destroy, et nous pouvons utiliser le nœud du composant destroy ici. Il existe maintenant de nombreux réglages que nous pouvons utiliser avec notre composant sonore. Si vous faites glisser et recherchez de l'audio, vous pouvez trouver toutes les fonctions liées à l' audio qui peuvent être utilisées avec notre composant audio. Le nœud suivant que nous allons aborder est le son attaché au nœud. Donc, si nous supprimons ce code pour le moment, nous le déplacerons un peu vers le haut afin d'avoir un peu plus d'espace. Nous allons sortir de notre événement sonore et rechercher le son de spawn. Et nous voulons que la note de son spawn soit attachée ici. Maintenant, au lieu d'un emplacement, cela nous donne un composant auquel nous pouvons nous attacher. C'est utile pour des choses comme si vous aviez une voiture, si vous aviez un bruit de moteur de voiture, vous voudriez vraiment qu'il suive la voiture autour de vous. Vous devriez donc associer ce son à un composant. Nous pourrions l'attacher à la composante maillée de notre personnage ici. Nous pourrions le brancher et maintenant le son suivra avec notre composant maillé. Et bien sûr, nous pouvons régler notre son afin que nous puissions le régler pour que ce soit le clic sur le bouton Q ici. Maintenant, si nous cliquons sur la flèche vers le bas ici sur notre nœud attaché de spawn nous donne en fait quelques nouvelles options. Je vais juste les déplacer vers le haut. Nous avons donc un peu plus d'espacement. Nous pouvons également configurer une prise pour connecter notre son. Donc, si notre maillage avait dit, une prise sur sa tête, nous pouvons définir le nom du socket ici et je sonnerais effectivement attaché à cette prise et suivrait avec notre maillage. Ensuite, nous avons les paramètres de position et de rotation. Maintenant, ils font quelque chose de différent selon le type de lieu défini ici. Donc, si cela est défini pour conserver le décalage relatif, nous dirions que nous fixons notre valeur Z à 50. Eh bien, actuellement, notre son s'attache à notre maillage. Donc, si nous allons dans notre fenêtre d'affichage, emplacement des maillages est ici et ce point pivot. Donc, comme nous en avons ajouté 15, le son z r serait attaché au maillage, mais il serait à peu près à cette hauteur, 50 centimètres au-dessus de l'emplacement du maillage. Ensuite, si nous revenons à notre nœud, nous avons la possibilité de conserver la position tourbillonnée. Maintenant, si je laissais cela à dire que les zéros sont 0, le son r apparaîtrait au centre du monde et s' attacherait ensuite à notre maillage de personnage. Maintenant, en fonction de la distance notre maillage de personnage par rapport au centre du monde, sûr, par exemple, il était 500 centimètres dans la direction x. Le son restait toujours 500 centimètres dans la direction X de notre personnage, mais il suivait toujours notre personnage lorsqu'il se déplaçait. Enfin, nous avons les deux options d'accrochage. Maintenant, il y en a deux. Peu importe celui que vous sélectionnez pour les sons. Donc, accroché à la cible signifie simplement que le son est attaché aux racines des maillages. Donc, ici sur notre maillage, un autre nouveau paramètre de ce nœud est l'arrêt lorsqu'il est attaché à destroy. Et cela signifie essentiellement que notre son, s'il est coché, nous arrêterons de jouer lorsque notre maillage sera détruit. Si cette case est cochée , le son r continuera à jouer même si le maillage est détruit. Ensuite, en dessous, nous avons tous les mêmes paramètres que ceux que nous avions pour nos nœuds précédents que j'ai déjà traversés. Et bien sûr, nous avons un nœud de sortie du composant audio. Et nous pouvons définir notre variable de composant audio que nous avons créée précédemment. Et nous pouvons utiliser toutes les fonctions que je viens de vous montrer avec cette variable de composante sonore. Maintenant, nous pouvons également ajouter des composants audio aux plans. Donc, si nous nous dirigeons vers le panneau Composants et que nous recherchons de l'audio, vous pouvez voir qu'il indique Audio, puis entre parenthèses , signal d'obturateur de l'appareil photo. Pour moi, la raison pour laquelle il le fait est que si je vais dans le navigateur de contenu, je l'ai sélectionné. Donc, si je le désélectionne, nous revenons à notre composant ici et je recherche l'audio. Nous devrions simplement voir le nom audio pour pouvoir cliquer dessus. Cela crée un nouveau composant audio. Et ce composant est automatiquement attaché à notre personnage. Et dans le panneau Détails, vous pouvez définir tout ce que nous avons dit sur ces nœuds auparavant, nous pouvons définir le son que nous voulons utiliser. Et cela peut être une vague, une file d'attente ou un son métallique. Nous avons donc pu choisir notre nouveau son métro. Et cela fonctionnera parfaitement avec nos nouveaux composants audio. Nous pouvons régler des éléments tels que le volume, la hauteur, nous pouvons régler les paramètres d'actionnement. Et nous pouvons contrôler ce composant audio la même manière que nous contrôlons notre composant audio ici. Nous pouvons le faire traîner, nous pouvons le mettre en pause, par exemple. Nous pouvons le supprimer si nous le voulons. Nous pourrions utiliser une destruction. Et elle se comporte exactement de la même manière que notre variable de composante sonore que nous avons utilisée précédemment. Nous pouvons maintenant tester ce composant audio. Je vais juste déconnecter ce code ici pour qu'il ne joue rien. Et si nous le compilons et que nous cliquons sur Play, vous verrez notre son audio jouer dans le Stan Lee parce que ce composant fait partie de notre personnage. Maintenant, peut-être que vous ne voulez pas que le son soit joué instantanément, vous voulez le jouer plus tard, ce que nous pouvons faire est de revenir à notre personnage ThirdPersonCharacter, de sélectionner notre composant audio, sélectionner notre composant audio faire défiler vers le bas jusqu'à l'auto activez et cochez cette case. Maintenant, lorsque nous compilons et que nous appuyons sur play, notre son ne joue pas. Mais nous pourrions ajouter du code pour activer ce composant. Nous pouvons donc faire une recherche avec le bouton droit de la souris Nous pouvons rechercher, disons, input event one. Et quand j'appuie sur l'un de mes claviers, je veux activer mes sons afin que nous puissions faire glisser le composant audio et activer et utiliser la note d'activation ici. Branchez-le dans notre presse. Et maintenant, nous pouvons compiler et cliquer sur play. Et quand j'appuie sur un, le son est joué. Maintenant, je peux le réactiver chaque fois que je veux en appuyant simplement sur un. Cela couvre à peu près les principales façons dont vous pouvez jouer des sons à l'aide de plans. Désormais, nous pouvons également jouer des sons à l'intérieur des animations. Ce que nous allons faire, c'est X hors de l'éditeur de plan. Je vais retourner dans le dossier de contenu ici, dans le dossier Personnages, puis dans les mannequins, puis dans les animations. Quinn, nous allons ouvrir une course pour l'animation ici. Et ici, vous pouvez voir que nous avons un bar notifié. Désormais, les notifications sont essentiellement des morceaux de code qui peuvent s'exécuter à un moment précis dans une animation. Donc, si nous cliquons avec le bouton droit de la souris sur notre barre de notifications, nous pouvons ajouter une nouvelle notification et il y en a d'autres intégrées ici, mais nous allons utiliser le son de lecture. Si nous ajoutons cela, nous pouvons le faire glisser vers n'importe quel point de l' animation, disons juste ici. Et maintenant, chaque fois que l' animation commence à jouer, à ce stade, elle jouera le son que nous étions assis. Et c'est ici, dans le panneau Détails , que nous pouvons nous définir. Il peut donc s'agir à nouveau d'un son d'onde, d'un signal sonore ou des nouveaux sons de compteur. Nous pouvons donc sélectionner cette cellule sur l'obturateur de notre appareil photo, ou nous pouvons la régler sur notre nouveau son métro. Et ça va très bien se jouer. Nous avons également des réglages pour des éléments tels que la hauteur du volume, et nous pouvons activer si le son suit ou non le maillage. Cela peut être très important si vous faites un son que vous voulez suivre avec le personnage, vous voudriez le prendre en charge. Maintenant, quand on passe à notre station de métro ici, voyons voir. Je jouerai chaque fois que l' animation atteindra ce point. Nous pouvons également ajouter plusieurs sons, notifier afin que nous puissions cliquer avec le bouton droit de la souris et un autre clic sur jouer le son. Et maintenant, nous avons une place supplémentaire et nous vous informons. Nous pouvons ajouter un son totalement différent, disons la prise de vue aiguë de la caméra. Maintenant que nous en sommes arrivés là, nous avons pris cette caméra en jeu. Et puis quand nous en arrivons à ce point, sommes censés jouer des pièces sonores. Nous sommes maintenant prêts à tester cela dans le jeu. Nous allons nous rendre sur notre carte et cliquer sur Play. Alors maintenant, quand je cours en avant, nous devrions entendre nos sons jouer au moment de l' animation, comme si nous étions assis là. Donc, ce sera à peu près tout pour cette leçon. J'espère que vous comprenez maintenant un peu plus comment nous pouvons jouer sons et le moteur utilisant plans et des notifications d'animation. Juste en guise de remarque, vous vous demandez peut-être si vous devez utiliser des indices sonores ou des sons metta. Cela dépendra du moment où vous regarderez cette vidéo. Actuellement, metal sounds est en version bêta, c'est pourquoi nous devons aller le menu des plugins et l'activer. Mais si vous regardez cette leçon et qu'il n'y a plus de mention Beta à côté du plugin metal sounds, vous devriez probablement utiliser le système audio Metro. 38. Leçons supplémentaires (effets de particules): Salut tout le monde. Dans cette leçon nous allons apprendre comment générer des effets de particules de Niagara à l'aide de plans. Donc, avant de commencer pour ceux d'entre vous qui suivaient la leçon précédente, j'ai créé un nouveau modèle à la troisième personne, juste pour prendre un nouveau départ pour cette leçon. Maintenant, le modèle à la troisième personne n' inclut aucun effet de particules Niagara que nous pouvons utiliser. Nous allons donc en utiliser un gratuit sur la place de marché. Je vais utiliser le pack d'effets visuels Niagara Footstep de Side Arm Studio est entièrement gratuit. Vous pouvez donc le récupérer sur le marché, sélectionner Ajouter au projet, puis sélectionner votre projet et il télécharge automatiquement tout pour vous. Une fois le téléchargement terminé, vous devriez trouver un nouveau dossier et votre navigateur de contenu dans lequel nous pouvons accéder. Et voici tous les effets de particules que nous venons de télécharger. Nous allons donc aller dans le dossier Niagara Effects et aller dans systèmes de particules. Ensuite, vous pouvez voir que nous avons tous nos effets de particules de Niagara. Nous pouvons maintenant sélectionner l'un d'entre eux pour l'examiner de plus près. Je vais ouvrir la saleté, par exemple. Et je vais juste ramener ça de mon autre écran. compilation peut prendre un moment, alors laissez-la faire avant que nous puissions voir un aperçu. compilation de la mienne est terminée. Si je zoome un peu, vous pouvez voir que nous avons une particule de saleté parfaite qui joue ici. Maintenant, nous n'allons pas aborder l' éditeur Niagara dans cette leçon uniquement parce que c'est un énorme système qui pourrait avoir un cours complet uniquement axé sur celui-ci. Mais ce que nous allons faire, c'est utiliser ces nouveaux effets que nous avons importés dans notre projet et nous les créerons pendant le jeu. Nous allons donc commencer par le personnage à la troisième personne. Nous allons donc nous diriger vers notre dossier de la troisième personne, puis des plans de ThirdPersonCharacter et hériter, qui va configurer un minuteur sur Begin Play pour générer notre effet de particule. Nous allons donc faire un clic droit. Oubliez donc pour commencer à jouer. Sortez d'ici et nous ferons le chronomètre par eux. Nous allons faire glisser la souris à partir de l'épingle de l'événement et rechercher un événement personnalisé. Et nous appellerons cet effet de spawn comme ça. Et nous allons le régler pour qu'il apparaisse toutes les secondes. Et nous voulons que cela tourne en boucle. Je vais donc affronter Looper. Il existe maintenant quelques nœuds différents qui peuvent générer des effets de particules de Niagara. Nous allons nous concentrer sur les deux principaux points de cette leçon. Donc, si nous sortons de l'effet de spawn et recherchons le système de spawn, vous pouvez voir que nous avons quatre nœuds, mais nous allons examiner le système de spawn à emplacement et le système de spawn attaché. Maintenant, la différence entre les deux, remarquez que le système d' apparition de l'emplacement va simplement générer notre effet à un endroit donné et il restera là. Alors que le système de spawn est attaché, nous pouvons l'utiliser pour attacher notre effet de particule à quelque chose. Et s'il bouge, il suivra cet objet. Nous allons donc commencer par le système de spawn à la note de localisation et nous allons créer. Maintenant, en commençant par le haut, nous avons un modèle de système. C'est l'effet Niagara que nous allons générer à l'aide de ce nœud. Nous pouvons donc cliquer sur ce bouton. Vous pouvez voir que j'ai obtenu tous mes effets grâce à notre pack d'actifs Footstep. Nous pouvons donc sélectionner l'un d'entre eux. Je vais sélectionner, disons, l'effet gazon ici. Cela signifie que maintenant, lorsque nous exécutons ce nœud, il va générer l'effet de particule d' herbe. Il peut vouloir compiler quelques shaders, laissez-le faire. Ensuite, nous avons l'emplacement. C'est à cet endroit que notre effet de particules va apparaître. Nous avons la rotation, c'est la rotation, ce sera le spawn that. Ensuite, nous avons également la balance. Maintenant, nous avons la fonction de destruction automatique. Maintenant, cela va détruire notre composant d'effet de particule quand il aura fini de jouer son effet de particule. Donc, en général, vous souhaiterez probablement l'activer. Nous avons également l'activation automatique, ce qui signifie que lorsque nous générons l'effet de particule, il commencera automatiquement à jouer. Et nous avons la méthode de mise en commun. Maintenant, la mise en commun est le moment où le moteur stocke une charge d'effets de particules désactivés. Ensuite, lorsque nous lui demandons de générer un effet de particule, au lieu d'en créer un nouveau, il peut réutiliser un effet désactivé. Passons maintenant à cet exemple, qui peut laisser ceci comme aucun. Maintenant, nous allons faire apparaître notre effet de particules à l'emplacement de nos personnages. Donc on va juste trouver l'emplacement de l'acteur. Et nous allons le brancher directement dans notre variable de localisation ici. Je vais laisser la rotation et l'échelle telles quelles. Nous pouvons maintenant le compiler et l'essayer . Nous allons donc appuyer sur Play. Et si nous regardons le centre de nos personnages ici parce que c'est l'emplacement de l'acteur de notre personnage, vous pouvez voir que nous avons un effet de particule joue toutes les secondes. Maintenant, si je commence à bouger, vous verrez que les effets de particules restent là où ils étaient au moment de leur apparition. Cela n'est pas vraiment attaché à notre personnage. Ce que nous pouvons faire maintenant, c'est regarder le nœud attaché. Au lieu de cela Cela supprimera notre système de spawn sur place. Et nous allons sortir de l'effet de spawn et rechercher le système de spawn. Nous voulons utiliser le système de spawn attaché. Maintenant, il a les mêmes paramètres que notre nœud précédent, mais il en a également quelques nouveaux. En commençant par le haut, nous pouvons définir notre effet Niagara et le modèle système. On peut en choisir un autre cette fois, peut-être les feuilles. Nous pouvons également fournir un composant attaché à. C'est ce qui nous permet de spécifier à quel composant nous voulons associer notre effet de particule. Nous pouvons saisir le composant de maillage ici, et nous pouvons le brancher directement dans les deux composants attachés. Cela entraînera l' attachement de notre effet de particules à notre composant de maillage. Maintenant, si notre composant de maillage avait des sockets, nous pourrions spécifier le nom du socket ici et cela provoquerait l' attachement des effets de particules à cette socket. Nous avons maintenant l' emplacement et la rotation. Cela fera quelque chose de différent en fonction notre type de localisation. S'il est défini pour conserver un décalage relatif, alors si nous nous dirigeons vers la fenêtre d'affichage, si nous devions définir cette valeur, disons 250 dans le Z, ce qui se passerait si nos effets de particules seraient générés au 0 l'emplacement de notre maillage. C'est donc là que se situe le pivot. Elle ajouterait 50 % à sa hauteur. Il serait donc toujours attaché au maillage, mais il serait 50 au-dessus du point de pivot du maillage. Vient ensuite l'option Conserver la position tourbillonnée. Donc, si nous changeons le réglage de la position du clavier, ce qui se passera maintenant c'est que quel que soit l'endroit que nous définissons ici, c'est là que les effets de particules seront générés. Ensuite, nous l' attachons au maillage. Donc, si vos personnages disent 500 centimètres du centre du monde, alors l'effet de particule sera attaché au personnage situé à 500 centimètres de distance. Et garderait cette distance de 500 centimètres par rapport au personnage auquel il est attaché. Enfin, nous avons le snap to target. Maintenant, cela provoquera un accrochage de l'effet de particule sur ce à quoi nous l'attachons. Donc, si nous l' attachons à notre maillage, il s'attachera directement à son point de pivot ici. Donc, pour cet exemple, nous allons garder notre set pour qu'il s'accroche à la cible afin que notre effet de particule apparaisse exactement sur notre maillage de personnage. Ensuite, nous avons obtenu mêmes paramètres que ceux que nous avions auparavant. Nous avons la destruction automatique, une activation automatique et nous avons également la méthode de mise en commun. Je vais aussi m'occuper parce que je veux vraiment que mon effet de particule soit détruit une fois la lecture terminée. Maintenant, nous pouvons tester cela à nouveau. Nous pouvons appuyer sur Play et vous pouvez voir que notre effet de particule se joue maintenant à notre emplacement de maillage, au lieu d'être au centre de notre personnage. Maintenant, vous pouvez être en mesure de contrôler l' effet de particule qui sera joué en fonction d'une variable. Nous pouvons donc revenir à notre personnage à la troisième personne ici, et nous allons créer une nouvelle variable que nous pouvons insérer dans notre modèle système pour indiquer au nœud quel type de les effets que nous voulons jouer. Nous allons donc créer une nouvelle variable, je vais appeler effet mine. Nous pouvons changer le type de variable en système Niagara. Nous voulons la référence de l'objet système Niagara, puis nous allons compiler et maintenant dans la classe par défaut. Vous pouvez donc voir que nous pouvons sélectionner n'importe lequel de nos effets Niagara. Je peux choisir, disons, de la glace par exemple. Ensuite, nous allons simplement le faire glisser et le connecter à notre modèle système et le compiler avant de le tester à nouveau, nous allons simplement laisser les shaders terminer la compilation. Voilà, c'est fini. Nous pouvons donc appuyer sur Play. Vous pouvez voir que maintenant nous pouvons voir notre effet de particules de glace jouer à la place de nos feuilles. Maintenant, tous les effets de particules que nous avons utilisés sont assez courts, mais peut-être que dans le futur vous travaillerez avec un effet qui joue pendant longtemps à un certain moment, peut-être que vous voudrez le détruire pour n'importe quoi raison. Eh bien, tu peux le faire aussi. Si nous revenons au ThirdPersonCharacter, nous avons une sortie ici, et il s'agit d'un composant du système de particules Niagara. Cela nous permet de contrôler ce que nous voulons que ce système de particules fasse après son apparition. Nous pouvons donc faire glisser, nous pouvons utiliser l'option variable du promoteur qui créera simplement une nouvelle variable avec le type de composant du système de particules Niagara, comme vous pouvez le voir ici, je vais juste appeler le mien et effet engendré comme ça. Et nous allons compiler. Ensuite, en utilisant cette variable, nous pouvons accéder à des fonctions utiles. Donc, si j'obtiens la variable, nous pouvons faire glisser vers l'extérieur et utiliser la pause. Nous pouvons utiliser set post. Et cela nous permet de mettre en pause l'effet de particule ou de le réactiver en fonction des valeurs booléennes sur lesquelles vous vous êtes assis sur la note, nous pouvons savoir s' il s'agit ou non de ports actuels. Nous pouvons donc être mis en pause à cause de tels rapports qui seront interrompus et qui indiqueront si l' effet de particule est actuellement suspendu ou non. Et ensuite, si nous voulons détruire les effets de particules, nous pouvons simplement faire glisser la recherche de Destroy. Nous pouvons utiliser le nœud du composant destroy ici. Maintenant, nous pouvons également ajouter des effets de particules en tant que composants au lieu d'avoir à les générer avec un nœud. Donc, si je dis que je voulais ajouter un effet de particule à mon maillage ici, je pourrais ajouter une recherche pour Niagara. Nous pourrions y ajouter un composant du système de particules Niagara. Avec ce système de particules sélectionné, vous pouvez voir ici nous pouvons définir un système de particules que nous voulons utiliser. Donc disons le gravier par exemple, si nous allons dans notre fenêtre en C quand je suis entré dans la vue, mais cela nous a donné un aperçu rapide. Mais nous pouvons définir le lieu et il nous montre à quoi il ressemblera lorsqu'il jouera à cet endroit. Cela se comportera de la même manière qu'un effet de particule attaché. C'est donc maintenant attaché à notre composant de maillage. Ainsi, quel que soit l'endroit où j'ai maillé le composant, notre effet de particule suivra. Et nous pouvons également utiliser ce composant la même manière dans notre graphe d'événements. Donc, si nous obtenons notre composant Niagara, nous pouvons le brancher sur, disons, le composant détruit. Si nous voulions détruire ce composant. Nous pouvons également utiliser les nœuds de pores que je viens vous montrer avec notre composant Niagara. Maintenant, nous pouvons générer des effets de particules en utilisant le système d'animation. Donc si nous passons à une animation maintenant, je vais passer aux personnages, aux mannequins plutôt qu'à deux animations. Et nous allons aller dans le dossier Quinn parce que c'est notre personnage. Et nous allons ouvrir l'animation de Rumford ici. Maintenant, inspirez, nous pouvons ajouter des notifications qui sont un peu comme des bits de code qui s'exécutent à un certain point d'une animation. Ils nous permettent de jouer des sons ou des effets de particules pendant que notre animation est lecture au moment précis où nous voulons jouer une particule ou un effet sonore. Ce que nous pouvons faire, c'est cliquer avec le bouton droit de la souris sur notre calendrier des notifications ici. Accédez à Ajouter une notification, et vous pouvez voir que nous avons des notifications intégrées ici. Maintenant, nous allons utiliser l' effet de particule de Niagara. Nous allons donc sélectionner cela et cela nous créera de nouveaux effets de particules notifiés. Et nous pouvons le faire glisser pour qu'il soit lu quand nous le voulons pendant l'animation. Donc je pourrais mettre le mien à 40 ans ici. Avec cela notifie sélectionné. Vous pouvez voir ici que nous pouvons configurer n'importe quel système Niagara. Je pourrais donc définir cela comme étant, disons, notre effet de particule. Maintenant, si nous passons à notre notification ici, vous devriez voir une paire d'effets de particules de saleté. Maintenant, si le vôtre ne le fait pas, vous pouvez avoir une petite fenêtre contextuelle indiquant qu'il compile des shaders, laissez-le simplement terminer et vous devriez voir vos effets de particules jouer comme ceci. Actuellement, l'effet de particule joue la racine du personnage, qui se trouve juste ici. Mais si nous le voulions, nous pourrions choisir un autre lieu. Nous pouvons donc utiliser le décalage d'emplacement ici pour ajouter, disons, un 50 et la hauteur. Maintenant, lorsque nous jouons les effets de particules, vous pouvez voir que le personnage est plus à genoux. Maintenant. Nous pouvons également définir le décalage de rotation, qui est la rotation des effets de particules. Et nous pouvons également définir l'échelle. Nous pouvons également associer l'effet de particule à une alvéole ou à un os. Par exemple, si je voulais que mon effet de particules de saleté se fixe à la tête, nous pourrions régler l'os de la tête, la hanche, sélectionner la tête. Et je vais régler le décalage de position sur 0 et sur z. Ainsi, lorsque nous exécuterons l'effet de particule, vous verrez que l'effet de particule s'exécute maintenant à l'emplacement de l' os de la tête. Nous pouvons également ajouter plusieurs effets de particules. Si nous le voulions, nous pourrions simplement cliquer avec le bouton droit sur Ajouter, l' avertir et nous pouvons ajouter une autre notification Niagara. Et ici, nous pouvons régler cela sur un autre emplacement. Nous pouvons définir un effet de particule différent pour enregistrer les effets de particules de glace. Et nous pouvons faire jouer les deux dans cette animation et voir qu' elle est en cours de lecture ici. Maintenant, juste un petit conseil lorsque vous travaillez avec des notifications. Si vous n'avez qu'une barre ici, elle peut s'encombrer si vous avez beaucoup de notifications et une animation. Ce que vous pouvez faire est de cliquer sur le menu déroulant ici pour ajouter une piste de notification. Non seulement vous donne une nouvelle piste de notification à laquelle vous pouvez ajouter des notifications comme un autre effet de particule par exemple. Et cela fonctionnera exactement comme si les ajoutiez à la première piste. Cela vous aide simplement à mieux les organiser. Nous avons maintenant tous ces effets puissants dans notre animation. Nous pouvons vérifier s'ils sont joués dans le jeu. Ce que nous allons faire, c'est économiser, nous allons revenir à notre personnage à la troisième personne ici. Et je vais supprimer le composant Niagara que nous venons ajouter et nous allons le déconnecter. Je commence le nœud de jeu. Donc maintenant, notre personnage ThirdPersonCharacter ne génère aucun effet de particule. Et nous pouvons tester ça et jouer. Maintenant, lorsque nous lançons play, nous devrions être en mesure de courir et de voir les effets de particules que nous avons ajoutés à notre animation. Vous pouvez voir les autres effets de particules lecture et nos effets de particules ICER sont également en cours de lecture. C'est un peu difficile à voir, mais on peut le voir couler aux pieds. Il ne s'agit donc que d'un aperçu de base de la façon de générer et d'ajouter des effets de particules Niagara aux animations. Si vous êtes intéressé par les effets visuels et la façon de créer de nouveaux effets de particules avec le système Niagara, je vous recommande vivement de suivre les cours qui sont spécifiquement axés sur ce système. 39. Widgets (aperçu): Salut tout le monde. Dans cette section du cours, nous allons examiner les widgets. Maintenant, les widgets ou le type de plan que nous utilisons pour ajouter une interface utilisateur à l'écran de nos joueurs, éléments tels que les systèmes de menu, les systèmes inventaire, les barres de santé. Tout cela se fait généralement à l'aide de widgets. Maintenant, ce qui est un système assez important en soi. Vous pouvez probablement créer un cours complet uniquement pour les widgets. Donc, dans cette section, nous allons simplement passer en revue certaines des bases. Vous apprendrez à créer de nouveaux widgets, à modifier leurs mises en page, à lier des éléments tels que des variables et des fonctions. Pour commencer dans cette leçon, nous allons simplement examiner la disposition de l' interface utilisateur du widget. Nous allons également apprendre à créer un widget, puis à l'ajouter à l'écran du lecteur. Pour commencer, nous allons créer un nouveau widget. Pour ce faire, il suffit de cliquer avec le bouton droit de la souris dans notre navigateur de contenu, puis de trouver l'interface utilisateur, de sortir et de descendre dans Widget Blueprint. Et nous allons sélectionner le widget utilisateur commun ici. Et nous allons l'appeler bp underscore, HUD, comme ça. Maintenant, nous devons écrire du code à générer qui est chaud, puis l' ajouter à notre écran de lecture. Je vais donc le faire dans le plan de personnage de troisième personne, qui nous amène de mon autre écran ici. Maintenant, vous pouvez également le faire à l'intérieur la manette du joueur si vous le souhaitez. Je le fais juste à l'intérieur du ThirdPersonCharacter parce que c'est le plan que j'ai dans ce modèle. Ce que nous allons faire, c'est cliquer avec le bouton droit de la souris et le rechercher pour commencer à jouer. Et à partir de là, nous allons faire glisser et nous allons rechercher Créer un widget. Et ça va nous donner ce nouveau nœud ici. Et c'est un nœud spécifique conçu pour générer des widgets. La première chose que nous allons faire est de définir une classe et de sélectionner notre nouveau HUD BP que nous venons de créer. Maintenant, nous devons également fournir un joueur propriétaire, et il s'agit d'un type de contrôleur de joueur. Ce que nous allons faire, c'est cliquer avec le bouton droit de la souris et rechercher le contrôleur de joueur gap. Nous pouvons simplement insérer cela directement dans notre prière d'ouverture. Donc maintenant, nous sommes en train de générer un HUD BP, mais nous ne l'ajoutons pas encore à l'écran du joueur. Nous devons donc d'abord créer une variable pour stocker une référence à notre HUD. Donc, si nous voulons y accéder plus tard, nous pouvons simplement faire glisser depuis la valeur de retour, cliquer sur la variable promotes, et cela créera une nouvelle variable HUD BP saint. Je vais juste appeler mon HUD. Et on peut faire glisser ça ici. Maintenant. Nous allons faire glisser la sortie du nœud set et rechercher Add to Viewport. Et maintenant, ce nœud va être ajouté à notre fenêtre d'affichage des joueurs. Maintenant, sur Begin Play, nous créons notre HUD bp, disant que c'est Owning Player que nos joueurs contrôlent. Nous définissons le HUD variable au cas où nous voudrions y accéder plus tard. Ensuite, nous ajoutons notre tête à l'écran du joueur. Mais si on jouait maintenant, on ne verrait rien. Et c'est parce que notre HUD BP est vide. Nous allons donc y aller maintenant. Nous allons compiler cela et ouvrir notre HUD bp. Nous sommes maintenant dans notre vue de concepteur BP HUD. Et c'est là que nous exposons à quoi vont ressembler nos widgets. Maintenant, sur la gauche, nous avons le palais, et c'est là que vous trouverez tous les types de widgets intégrés fournis avec le moteur. Nous avons des éléments tels que des boutons, des images, des barres de progression et bien d'autres choses que nous examinerons dans les prochaines leçons. Maintenant, la création de nouveaux widgets pour notre HUD se fait en utilisant les widgets intégrés fournis avec le moteur, des éléments tels que la barre de progression dans les types de widgets d'image. Nous les personnalisons pour qu'ils se comportent comme nous le voulons. Donc, si nous voulons une barre de santé, nous utilisons généralement notre barre de progression et nous personnalisons pour qu'elle se comporte comme une barre de santé. Ou si nous créons un système de menu, nous pourrions peut-être utiliser le widget bouton et le widget image et les utiliser en combinaison pour ouvrir nouveaux menus et modifier les paramètres, par exemple. Voici donc notre section palette ici. Nous avons également la section bibliothèque. C'est nouveau et Unreal Engine cinq. Il s'agit en quelque sorte d'une vue plus conviviale de la vue du palais. Vous pouvez voir qu'il y a les mêmes options ici. Cela vous donne juste un petit aperçu de l'icône ici. Il est donc un peu plus facile de voir ce que font ces widgets individuels. Et plus tard, lorsque nous créerons nos propres widgets, nous les trouverons sous le nom créé par l'utilisateur. Donc, si je clique sur ce menu déroulant, vous pouvez voir qu'il n'y en a pas, qu'il n'y a pas de widgets ici à part celui-ci intégré. Mais lorsque nous créons nos propres widgets, nous pouvons les trouver ici et les utiliser dans nos autres widgets. Vous pouvez utiliser la vue du palais ou de la bibliothèque comme préférence totalement personnelle. Maintenant, en descendant dans la hiérarchie ici également, nous pouvons voir les widgets actuels qui sont dans le widget de la barre latérale maintenant au hasard parce que nous n'avons pas placé de m. Mais si je devais dire prenez ceci et il suffit de le déposer, vous pouvez voir que maintenant nous avons un manuel qui apparaît. Nous pouvons utiliser ces paramètres ici pour activer sa visibilité. Cela est utile si plus tard, vous avez beaucoup de widgets en cours et la plupart du temps ils ne seront pas visibles en même temps. Vous pouvez les masquer de cette façon pour faciliter le travail dans le widget. Ensuite, il y a les widgets de liaison. Maintenant, cela a plus à voir avec animations de widgets et nous n'allons pas aborder animation dans ce cours simplement parce que c'est un peu plus avancé. Et ce que nous allons couvrir. Ensuite, nous avons notre panneau Détails. Maintenant que ma zone de texte est sélectionnée ici dans notre panneau de hiérarchie, nous donne les paramètres de nos textes. Par exemple, ce que je pourrais changer ce que dit le texte. Je pourrais donc dire, Bonjour, c'est un test et ça met à jour nos textes. Nous pouvons définir des éléments tels que la couleur, mais si nous utilisions autre chose, si je supprime mes textes ici et que j'ajoute une image, vous pouvez voir que lorsque je sélectionne notre image, nous obtenons des paramètres différents. Cela nous permet de définir des éléments tels une image à la taille de notre image, et d'autres choses de ce genre. Si à un moment quelconque l'une de ces fenêtres est fermée, vous pouvez aller dans l' onglet Windows juste ici et vous pouvez prendre n'importe laquelle d' entre elles ici. Ensuite, nous avons la vue graphique. C'est ici que nous mettons le code qui va être exécuté et qui est pertinent pour notre widget. Si nous passons maintenant à la vue graphique, vous remarquerez qu' elle ressemble à peu près aux éditeurs de plans avec lesquels nous avons travaillé. Vous avez votre panneau Mike Blueprint. Vous trouverez ici les fonctions, les macros, les variables et les répartiteurs d'événements. Nous avons notre panneau Détails qui, selon ce que je sélectionne, si je crée une nouvelle variable, par exemple, vous pouvez voir qu'elle nous donne tous les détails de nos variables comme vous le souhaitez. Et bien sûr, si je fais glisser cette variable quand nous pouvons l'obtenir et la définir, nous pouvons exécuter du code normalement comme s'il nous pouvons exécuter du code normalement s'agissait d'un plan normal. Nous avons maintenant quelques avis différents, nous avons donc la construction d'événement que vous pouvez voir. C'est un peu grisé. Maintenant, si nous supprimons ceci et que nous le recherchons, nous pouvons rechercher Event Construct. Vous pouvez simplement le créer normalement. Maintenant, cela fonctionne à peu près comme un début de lecture à chaque fois que notre widget est créé. Maintenant, nous avons également préconstruit cet événement. Ce sera en fait un chaque fois que nous pourrons sortir le plan. Donc, pour vous donner un exemple, nous pourrions peut-être cacher notre image qui la rehaussera la semaine dernière. Vous remarquez que nous avons une variable image ici dans nos variables. Cela fait référence à l'image que nous avons ajoutée au plan. Et la raison pour laquelle nous l'avons accessible dans notre Event Graph est que si nous retournons voir notre designer, nous sélectionnons l'image. Vous pouvez voir que c'est coché ici car c'est variable. Cela signifie que nous pouvons accéder au code fruit de cette image via une variable. Ce que nous allons faire, c'est récupérer cette image, faire glisser une juste pour définir la visibilité. Nous allons relier ça à notre préconstruit comme ça. Ainsi, quand je peux le retirer, nous pouvons voir qu'il est défini sur Visible. Donc, si je vais voir mon designer, nous pouvons voir notre image. C'est juste une image blanche pour le moment. Mais si nous revenons à Event Graph et que je le change en hidden, maintenant quand je compile, revenons au concepteur, vous pouvez voir qu'il n'est plus visible parce que nous l'avons défini sur hidden, et cet événement s'exécute chaque fois que nous compilons notre code. Maintenant, nos widgets peuvent en fait refroidir le code à l'intérieur de notre graphique d'événements. Ce que nous pouvons faire, c'est de retourner voir notre designer ici. Je vais supprimer l'image pour le moment et nous allons prendre un bouton et le faire glisser sur notre Hud. Vous pouvez le faire glisser directement ici ou le faire glisser vers le bas jusqu'à la hiérarchie. Il fait la même chose. Nous allons donc simplement le faire glisser avec nos boutons sélectionnés dans le panneau Détails. Si nous faisons défiler vers le bas, nous avons certaines de ces options d'événements. Maintenant, si nous cliquons sur ce bouton plus, cela nous créera un nouvel événement et le graphique de l'événement. Peut-être que je veux que ce bouton exécute du code. Lorsque vous cliquez dessus, nous pouvons cliquer sur ce petit bouton plus ici, qui crée un nouvel événement dans le graphe d'événements. Désormais, cet événement se déroulera chaque fois que nous appuierons sur ce bouton pendant le jeu. Maintenant, une chose à garder à l'esprit lorsque vous codez dans des widgets, c'est une bonne pratique de ne pas mettre de code de jeu dans un widget. En fait, vous devriez simplement avoir votre widget pour afficher des informations, puis prendre en compte des informations, par exemple, des pressions sur des boutons. Et puis ce widget devrait indiquer aux autres plans, comme les acteurs de plans ou plan de votre personnage, ce qui a été pressé, vous ne devriez pas réellement coder votre gameplay à l'intérieur d'un widget . Par exemple, si ce bouton tuait mon personnage, par exemple, nous pourrions simplement cliquer avec le bouton droit de la souris sur la recherche, oublier le joueur, le personnage, faire glisser et lancer Destroy Actor. Maintenant, quand j'appuie sur ce bouton, cela détruirait mon personnage et cela fonctionnerait bien. Mais ce n'est pas une bonne pratique de le faire. Ce que tu devrais vraiment faire, c'est qu'on devrait aussi coûter cher. Ou un personnage à la troisième personne comme celui-ci supprimera le nœud d'acteur détruit. Et puis à l'intérieur de notre ThirdPersonCharacter, nous devrions avoir des événements séparés. Je vais donc créer un nouveau client. Alors on peut appeler ça un joueur tueur. Ensuite, cela lancerait Destroy Actor. Comme ça. Nous revenions à notre HUD, sortions de notre ThirdPersonCharacter et nous appellerions que événements appelleraient kill player. Notre widget n'est donc plus le plan qui exécute le code de jeu. Il prend simplement l'entrée ButtonClicked. C'est dire au ThirdPersonCharacter, Hey, vous devez lancer cet événement. Maintenant, cela n'a pas trop d' importance pour le codage dans les jeux solo. Mais plus tard, si vous voulez vous lancer dans le codage multijoueur, c'est une pratique très importante à suivre. Vous ne voulez pas que les widgets exécutent un code de jeu, uniquement pour indiquer au code de jeu à l'intérieur d'autres plans ce qui s'est passé. Maintenant. Enfin, si nous compilons réellement notre HUD, vous verrez que nous obtenons des erreurs. C'est simplement parce que nous avons supprimé notre image dans la vue Designer et l'avons remplacée par le bouton. Et si nous déménageons ici, nous avons toujours une référence à cette ancienne image. Ce que nous pouvons faire, c'est simplement supprimer ces nœuds, les compiler, et cela éliminera les flèches. Nous avons terminé cette leçon. Dans notre prochaine leçon, nous allons examiner de plus près la vue Designer, puis la façon dont nous pouvons contrôler la disposition de notre widget. 40. Widgets (mises en page): Salut tout le monde. Dans cette leçon, nous allons apprendre comment contrôler la disposition d'un widget. Donc pour commencer, dans notre dernière leçon, nous avons créé ce HUD BP et nous avons ajouté du code à notre ThirdPersonCharacter, ce qui crée ce HUD et l' ajoute ensuite à l' écran de notre joueur au début du jeu. Maintenant, nous avons également ajouté dans notre dernière leçon à la BP a un widget de bouton. Maintenant, cela prend l'ensemble de notre HUD bp. Ce que nous allons faire c'est le sélectionner dans la liste hiérarchique. Ensuite, nous allons compiler et cela va nous donner un avertissement. Nous allons donc passer à la vue graphique, qui va supprimer ce code ici. Et la raison pour laquelle nous recevons cet avertissement est que cet événement est censé s'exécuter lorsque le bouton que nous venons de supprimer est pressé et qu'il n'existe plus. C'est pourquoi nous recevons maintenant cet avertissement, nous allons le supprimer et compiler. Nous allons maintenant passer à la conception de la vue et nous allons examiner certains des types de widgets de panneau. Nous allons donc passer à la palette de touches ici, et je vais sélectionner le panneau. Et ici, nous avons différents types de panneaux, sont utiles pour contrôler les mises en page avec des widgets. Mais nous allons commencer par le panneau de toile. Nous allons donc simplement le faire glisser en haut de notre hiérarchie de widgets ici et le publier. Et maintenant, nous avons un panneau de toile. Et vous pouvez penser à un panneau de toile. C'est un peu comme une représentation de l'écran du joueur. Si nous devions ajouter quelque chose comme un bouton ici, nous pouvons simplement le faire glisser et relâcher sur notre panneau de toile. Si nous compilons et jouons, nous devrions voir notre bouton ici sur l'écran des joueurs. Maintenant, nous allons sortir de l'éditeur X et revenir à notre matériel. Maintenant, vous avez peut-être remarqué que nous avons ce bouton en bas que nous pouvons faire glisser et qui nous permet de redimensionner notre fenêtre d'affichage ici. Maintenant, il est important de garder à l'esprit que tout cela fait est de modifier l'aperçu de notre widget afin que nous puissions voir à quoi ressemblerait notre HUD, disons à cette résolution, ou peut-être une autre résolution comme ici. Mais cela ne change pas réellement la taille de notre widget. Tout cela ne fait que modifier l'aperçu. Nous pouvons voir à quoi ressemblent réellement nos widgets pour des tailles d'écran spécifiques. Une autre façon de le faire est d'utiliser l'option de taille de l'écran ici, qui vous donne juste un tas d' aperçus pour différents appareils. Donc, si vous travaillez sur un appareil mobile, vous pouvez choisir un appareil ici pour aperçu de la résolution exacte de l'écran. Mais pour la plupart des gens, vous utiliserez probablement un moniteur dix ADP. Nous pouvons donc nous diriger vers les moniteurs et sélectionner le moniteur de 21,5 à 24 pouces. Et cela va en fait le changer à dix ATP pour nous. Et vous pouvez voir cette résolution ici. Maintenant, notre panneau de toile est en fait un peu spécial par rapport à nos autres panneaux. Lorsque nous y glissons des éléments tels que des boutons ou des images, nous pouvons les faire glisser et les déplacer vers différents endroits à l'intérieur du panneau de la toile, nous pouvons également les redimensionner. Donc, si je veux agrandir mon bouton, je peux simplement le faire glisser et l'agrandir. Maintenant parce que mon bouton est sélectionné et c'est un enfant de notre panneau de toile. Et ce que je veux dire par enfant, c'est qu'il est directement contenu dans notre panneau de toile. Comme vous pouvez le voir ici sous notre panneau de toile, nous avons notre bouton, qui est un enfant du panneau de toile. Pour cette raison, nous avons également certains paramètres dans nos boutons, détails qui lui sont exclusifs lorsqu' il se trouve dans un panneau de toile. Pour commencer, nous avons des points d'ancrage et je vais vous expliquer un peu plus à ce sujet dans un instant. Mais nous avons aussi la position x. s'agit donc d'une possession côte à côte, la possession y, c' est-à-dire sa position de haut en bas, puis nous avons sa taille. Il s'agit donc de sa taille et de sa largeur , de sa taille et de sa hauteur. Maintenant, notre point d'ancrage est essentiellement le point central de ce widget. Donc, si je devais le mettre à 0 dans le x et 0 dans le y. Vous verrez qu'il monte notre coin supérieur gauche car actuellement c'est là que se trouvent les ancres. Mais si je devais changer cette ancre pour dire le centre, vous pouvez voir que c'est la position x et y. Elle a effectivement augmenté. Et c'est parce que maintenant sa position 0 serait au centre de l'écran. Donc, si je devais remettre cette valeur à 0, vous verrez que le widget se place au centre de l'écran. Maintenant, l'alignement est un peu comme la position du point de pivot de notre widget. Donc, actuellement, 00 signifie qu'il sera dans le coin supérieur gauche. Si je change cela à 0.50.5 ou que le centre de notre widget est maintenant au centre. C'est pourquoi le widget est maintenant placé en position centrale, même si sa position x et y est toujours égale à 0. Ensuite, nous avons la taille par rapport au contenu, que j'expliquerai plus loin dans la leçon. Nous avons l'ordre z, qui contrôle essentiellement si nous avons deux widgets qui se chevauchent, celui avec l'ordre de vue le plus élevé sera en haut. Donc, si je prends un autre bouton ici, il faudra zoomer pour le voir. Si je le fais glisser en haut de notre widget, vous pouvez voir qu' il se trouve en fait au-dessus de notre widget inférieur. Mais si je sélectionne mon widget inférieur et que je l'augmente à un, vous pouvez voir qu'il dépasse maintenant le haut de celui-ci. Nous sommes en jet parce que l'ordre est 0. Maintenant, en descendant dans le panneau Détails, nous avons quelques options d'apparence, vont varier en fonction qui vont varier en fonction du widget que vous avez actuellement. Donc, parce que nous sommes dans un bouton, si nous tenons compte du style, vous verrez que nous avons des options pour survol normal et l'enfoncement. Voilà à quoi le bouton va ressembler quand c'est normal, il ne lui arrive rien. Ensuite, lorsque la souris est survolée vers le haut , puis lorsqu'elle est réellement enfoncée. Et si nous ouvrons l'une de ces options, disons l'option normale, nous pouvons modifier des éléments tels que l'image ou la teinte, ou si elle est dessinée sous la forme d'un cadre arrondi ou simplement d'une boîte normale. Et tu le vois maintenant. Les coins ne sont plus arrondis, ou nous pouvons le modifier en temps réel. Donc je pourrais changer ça pour dire « sois rouge ». Et vous pouvez voir qu'il est surligné en rouge. Comme vous pouvez le voir, il existe de nombreuses options différentes et chaque type de widget possède des options différentes. Je ne vais donc pas passer en revue tous ces paramètres. Si vous voulez savoir ce qu'ils font, vous pouvez les survoler avec la souris et cela vous donnera une petite astuce. Ou vous pouvez simplement jouer sur le changement couleur et de taille et d' autres choses de ce genre. Mais à titre d'aperçu, lorsque vous sélectionnez un widget, vous trouverez ici tous ses paramètres relatifs à son apparence réelle. Ensuite, nous allons supprimer ces boutons ici. Nous allons examiner certaines des autres options de panneau que nous avons. Nous allons donc commencer par une boîte verticale. Donc, si nous le faisons simplement glisser, je vais effectuer un zoom arrière un peu plus. Comme vous pouvez le voir, il ne s' agit que d'un widget vide. n'y a aucune apparence visuelle pour nous. Mais ce que nous pouvons faire, c'est y ajouter d'autres widgets. Si je fais défiler vers le haut et que je saisis, disons le texte, je peux soit le faire glisser en haut de la boîte verticale ici, soit le déposer dessus dans la hiérarchie. Nous pouvons donc le déposer. Vous pouvez voir qu'il a maintenant ajouté nos textes pour nous ici. Maintenant, parce que nous n'avons pas ajouté nos textes au panneau de la toile. Lorsque je le sélectionne, je ne peux pas le déplacer ou le redimensionner. Comme si j'ajoutais des textes directement dans le panneau de la toile. Et la raison en est que notre boîte verticale est que ce qui prend le contrôle de la taille de notre texte sera sa position. Donc, si nous devions ajouter un autre texte dans notre boîte verticale, veillez à ce qu'il commence à les empiler verticalement. Et c'est la caractéristique clé d'une boîte verticale. fur et à mesure que nous y ajoutons de nouveaux widgets, il les ajoutera dans une pile verticale. Maintenant, si nous sélectionnons notre boîte verticale ici, vous pouvez voir qu'elle est actuellement de cette taille. Si nous le déplaçons, nous pouvons toujours le déplacer dans notre panneau de toile car il est attaché au panneau de toile, alors que le texte est ensuite attaché à l'intérieur de la boîte verticale. Mais si vous regardez une boîte à outils, n'a pas la même taille que nos textes. Des textos comme des fuites. Maintenant, c'est là que la taille de l'option de contenu entre en jeu. Si je prends cela en compte, vous pouvez voir que maintenant ma boîte verticale s'est agrandie et qu'elle a maintenant la taille de ce que nous y mettons. C'est donc la principale caractéristique du contenu du site. Tout widget contenant un widget enfant. Si vous cochez cette option pour ce widget, il se redimensionnera pour correspondre à la taille des widgets qu'il contient, comme notre boîte verticale. Maintenant, si nous sélectionnons certains des textes qui se trouvent actuellement dans notre boîte verticale et que nous faisons défiler vers le haut vous verrez que nous avons maintenant des paramètres appelés boîte à moustaches verticales. C'est à la place de l'emplacement de panneau de toile que nous avions lorsque nous avons placé notre texte directement à l'intérieur du panneau de toile. Voici quelques-unes des commandes que nous pouvons utiliser pour ajuster nos textes lorsqu'ils se trouvent à l' intérieur d'une boîte verticale. Pour commencer, nous avons du rembourrage. Le remplissage est essentiellement l'espace entre nos textes et l'extérieur de la boîte verticale. Donc, si nous changeons cela pour dire dix, cela donnera nos textes dix pixels entre son bord et le bord des cases verticales que vous pouvez voir ici. Maintenant c'est fait dans toutes les directions pour ce texte parce que je viens de mettre dix dans le top hit. Mais si nous cliquons sur la flèche vers le bas, nous pouvons spécifier gauche, droite, haut et bas. Ensuite, nous avons la taille et les alignements. Actuellement, notre boîte verticale changera simplement sa taille en fonction de ce qui se trouve à l'intérieur. Maintenant, pour vraiment tester les paramètres, nous allons devoir les désactiver. Nous allons donc désactiver la taille du contenu et agrandir notre zone de texte. Maintenant, il est en fait plus grand que ce dont nos textes ont besoin. Donc, si je sélectionne mon texte ici, il est actuellement configuré pour occuper autant d'espace verticalement et horizontalement que possible. Ce que nous pouvons faire, c'est que si je voulais que mon texte soit centré, nous pourrions le placer sur un alignement central, et maintenant il est centré au milieu de notre boîte verticale. Si je redimensionne ma boîte, vous pouvez voir qu'elle change de centre. Nous pouvons également sélectionner à nouveau notre texte et le définir pour qu'il soit aligné à droite. Cela signifie que le texte est maintenant attaché sur le côté droit de notre boîte verticale. Ensuite, nous avons également l'alignement vertical, ce qui nous permet de contrôler la position verticale de notre texte. Actuellement, il est configuré pour remplir verticalement, mais sa taille est également définie sur auto. Le texte va donc utiliser autant d' espace qu'il a besoin verticalement. Mais disons que je voulais que mon texte soit plus au centre de notre boîte verticale. Ce que nous pouvons faire, c'est savoir notre taille à remplir. Cela signifie que notre texte indique à la boîte verticale qu'elle souhaite utiliser autant d'espace que possible. Ensuite, nous pouvons utiliser notre alignement vertical. Nous pouvons définir cela sur centre, et cela sera centré dans l'espace dont il dispose. Maintenant, ces paramètres peuvent être un peu déroutants pour commencer, et la plupart du temps, il suffit de jouer avec eux pour obtenir le résultat que vous recherchez. Mais ils peuvent être très utiles lorsque vous travaillez dans des objets tels que des boîtes verticales. Et le comportement de ces paramètres va dépendre du widget que vous avez sélectionné. Donc, si nous devons saisir un bouton et le déposer à l'intérieur de la boîte verticale ici, vous pouvez voir qu'il s'étend à la taille maximale disponible dans la largeur. Et cela s' explique par nos alignements. Maintenant, si je devais régler mon alignement horizontal sur le centre, vous verrez que mon bouton devient beaucoup plus petit. Et c'est parce que si nous allons dans Style dans le menu déroulant normal ici, taille de notre image est définie sur 32 par 32. Donc, si je devais augmenter cela, vous pouvez voir que mon bouton s'agrandit. Ou si je devais l'augmenter dans la valeur X, vous pouvez voir qu'elle s'allonge. Et si je devais régler ma taille ici pour remplir, vous verrez que mon bouton devient beaucoup plus gros. Maintenant, il n'occupe pas tout l'espace disponible car notre texte ici est également configuré pour être rempli. Donc, si je devais régler cela sur auto et voir que maintenant ma boîte pousse tous ces textes hors de son chemin et qu'elle prend autant de place que possible verticalement. Et c'est parce que notre vertical est réglé pour remplir verticalement pour que nous puissions le remplir horizontalement, vous verrez maintenant qu'un bouton occupe tout cet espace. Et comme remarque, si vous modifiez la taille d'un bouton dans son style normal, vous voudrez probablement faire la même chose pour le survol et appui, car vous devez vous souvenir que lorsque vous survolez un bouton, il commence à utiliser ces paramètres. Et si votre taille est différente de votre taille normale, votre bouton va rétrécir chaque fois que vous le survolez. Ne vous inquiétez pas trop si ces paramètres vous ont dépassé la tête, la meilleure façon d'apprendre les widgets est de simplement jouer avec eux, essayer de créer de petites choses et de les faire fonctionner et de les mettre en comme vous le souhaitez en utilisant ces boutons ici. Ainsi que les paramètres de remplissage et d'alignement disponibles en sélectionnant le widget individuel. Nous avons maintenant utilisé le panneau vertical, mais il existe également des panneaux horizontaux. Donc, si nous allons dans notre option de panneaux, vous pouvez voir que nous avons la boîte horizontale. Et si nous le faisons glisser, il se comporte à peu près exactement de la même manière que notre boîte verticale, mais à la place, il est horizontal. Donc, si je prends, disons, un widget de texte, nous le faisons simplement glisser dans notre boîte horizontale. Vous pouvez voir qu'il est ajouté à l'intérieur de notre boîte horizontale en bas. Si je devais en ajouter un autre à notre boîte horizontale, vous pouvez voir qu'il l'a ajouté, mais maintenant il les déplace horizontalement au lieu de verticalement. Ce qui est bien avec ces panneaux, c' est que nous pouvons les utiliser ensemble. Donc, si nous zoomons un peu ici, je vais tout supprimer dans ma boîte verticale. Et nous allons ajouter une boîte horizontale à l'intérieur de la boîte verticale. Nous allons donc descendre deux panneaux, trouver une boîte horizontale. Et nous allons mettre ça dans notre boîte verticale comme ça. Maintenant, à l'intérieur de notre boîte horizontale, nous pouvons ajouter quelque chose comme des textes, ajouter des textes. Et peut-être que je veux aussi une image. Donc, si nous imaginons qu'il s'agit peut-être d'une liste d'éléments, nous aurions besoin de l'image de l'élément , puis des textes pour son nom. Nous allons donc ajouter une image à notre boîte horizontale comme ça. Maintenant, nous pouvons modifier l' ordre dans lequel ils se trouvent, à l'intérieur de notre boîte horizontale. Nous pouvons les sélectionner et vous pouvez utiliser ces petites flèches juste pour les déplacer. Ou dans le panneau de hiérarchie, nous pouvons simplement le faire glisser. Et nous obtenons cette petite ligne bleue qui nous indique si nous le déplaçons afin de pouvoir le déplacer au-dessus de notre texte. Et maintenant, c'est au-dessus de notre texte ou devant nos textes pour le cadre horizontal. Maintenant, disons que je n'ai pas vraiment aimé son apparence. Je voulais un peu d'espace ou peut-être que je voulais placer ma zone de texte de l'autre côté de notre panneau. Je sélectionne mon texte. Nous pourrions le régler sur remplissage et je vais le régler pour qu'il soit aligné à droite horizontalement. Et maintenant, mon texte est là et mes images sont toujours sur le côté gauche. Nous pouvons donc maintenant copier et coller ou boîte horizontale. Nous allons donc le sélectionner, faire Control C, puis nous allons sélectionner notre boîte verticale et faire Control V. Et maintenant nous pouvons coller deux de nos cases verticales. Vous pouvez voir maintenant que nous avons une liste de boîtes horizontales à l'intérieur de notre boîte verticale. Ensuite, ces boîtes horizontales contiennent nos images et nos textes. Nous pouvons donc sélectionner notre texte et le modifier. Nous pourrions changer cela pour dire épée, cela en or, et cela en boisson santé, par exemple. Nous avons maintenant une liste verticale de cases horizontales qui contiennent ensuite ces informations. Maintenant, peut-être voulons-nous modifier la distance entre le bord de notre boîte horizontale le bord de la boîte verticale. Nous pouvons le faire en utilisant notre rembourrage. Nous pouvons donc régler nos rembourrages, disons dix. Et cela nous laissera un peu d'espace entre nos différentes entrées et également les bords de notre boîte verticale. Nous pourrions donc le faire avec chacun d'eux. Nous pouvons également définir ce chiffre à dix. Et puis pareil avec ça, juste pour ranger un peu comme ça. Maintenant, si nous le voulions, nous pourrions leur donner une image. Donc, si je sélectionne l'une des images ici, nous pouvons définir une image. Maintenant, je n'ai que les images fournies avec le moteur. Donc nous allons, nous allons utiliser, dire celui-ci. C'est en fait défini notre image que nous pourrions nous asseoir et en avoir 12 ici afin que nous puissions faire défiler vers le bas, trouver une image différente, peut-être cette icône Android, vous pouvez voir. Nous pouvons maintenant définir des images pour chacune de nos lignes ici. Une autre façon d'utiliser le rembourrage est en fait dans, disons, une boîte verticale ici. Je voulais peut-être que mon texte soit de ce côté, mais je voulais un peu d'espace entre l'image et le texte. Ce que nous pourrions faire, c'est le remettre en automatique, donc c'est de ce côté. Ensuite, nous pouvons soit utiliser du rembourrage. Donc je pourrais ouvrir le rembourrage à un rembourrage gauche de 50. Et vous voyez maintenant que notre texte est à 50 centimètres, donc à 50 pixels de notre image. Ou si nous nous en débarrassons rapidement, nous pouvons utiliser un widget d'espacement. Donc, si nous recherchons de l'espace, nous pouvons utiliser un widget d'espacement et nous pouvons le déposer entre notre image et nos textes dans la hiérarchie. Il suffit de sélectionner l'entretoise et nous définirons sa taille ici. Nous voulons que le x soit horizontal, donc nous avons été augmentés à 100, ce qui nous donne 100 pixels entre notre image et notre épée. Maintenant, jusqu'à présent, nous avons examiné les panneaux et les panneaux peuvent avoir un nombre illimité d'enfants. Nous pouvons donc ajouter autant de widgets que nous le voulons à notre panneau de toile, à notre boîte verticale ou à la boîte horizontale. Mais certains widgets ne disposent pas de cette liberté. Si nous supprimons notre recherche ici et que nous ajoutons, disons, un bouton, nous pouvons ajouter un enfant à un bouton. Donc, si je prends, disons, quelques textes, je peux le faire glisser en haut ici pour l'ajouter en tant qu'enfant ou simplement le déposer sur le bouton dans le panneau de hiérarchie. Et vous pouvez voir maintenant que nous avons le texte et que c'est un enfant de notre bouton. Mais si je devais prendre, disons, d'autres textes, je ne pourrais plus l'ajouter à notre bouton parce que notre bouton ne peut avoir qu'un seul enfant. Un bon moyen de contourner ce problème est que si nous supprimons les textes de notre bouton, nous pouvons utiliser un panneau comme notre boîte horizontale. Nous pouvons l'ajouter à notre bouton. Et maintenant notre boîte horizontale en tant qu'enfant du bouton. Mais nous pouvons ajouter autant d'enfants que nous le voulons, la boîte horizontale. Ainsi, nous pouvons prendre, disons, du texte, l' ajouter à notre bouton, pouvons également saisir une image. Nous pouvons donc l'ajouter à notre bouton. En ce moment, il y a une fuite d'un bouton. Mais ce que nous pouvons faire, c'est sélectionner le bouton, nous pouvons le redimensionner afin que notre contenu reste à l'intérieur du bouton. Si vous vous en souvenez, nous pouvons cliquer sur Ajuster au contenu. Le bouton se redimensionnera simplement à l' espace dont il a besoin pour le contenu qu'il contient. C'est donc un moyen très simple. Vous pouvez créer des widgets qui ne peuvent avoir qu'un seul enfant, en avoir autant que vous le souhaitez, simplement en utilisant les boîtes de panneau ci-dessous. Maintenant, une chose qui peut être difficile avec ces boîtes de panneau est de dire que je voulais mes textes ou cette entrée ici dans notre boîte verticale soient plus grands. n'y a pas d'option de taille que nous pouvons simplement contrôler. Mais ce que nous pouvons faire, c'est envelopper des éléments individuels avec une boîte de taille. Disons que je voulais que cette image soit en fait beaucoup plus grande. Ce que nous pouvons faire, c'est sélectionner notre image ici. On pourrait le boucler en faisant un clic droit, faire du rap avec. Et en gros, cela signifie simplement que nous indiquons l'image doit être contenue dans un autre widget. Nous allons donc sélectionner, disons, la case de taille. Et maintenant, notre image que vous pouvez voir se trouve dans une boîte de taille. Cette boîte de taille est toujours à l'intérieur de notre boîte verticale il suffit de mettre notre image dans cette boîte de taille pour nous. Nous pouvons également le faire avec nos boîtes. Donc, si je sélectionne mon image ici, par exemple, nous pourrions l'envelopper d'une boîte verticale si nous le voulions. Vous pouvez voir que nous avons une boîte verticale ou une boîte horizontale ou l'une de ces options que vous avez ici. Revenons à notre boîte de tailles que nous venons de créer. Vous pouvez voir que nous avons quelques options de taille ici. Ce que nous pouvons faire, c'est sélectionner ces options pour activer les remplacements de taille. Si je saisis un texte ici, dites 100 par 100. Vous pouvez voir que cela force maintenant cette image à cette taille. Cela peut donc être très utile lorsque vous travaillez avec des boîtes verticales , car parfois vous souhaitez simplement forcer un widget à avoir une certaine taille. Et les contrôles ici peuvent être un peu restrictifs. Donc, en utilisant une case de taille, nous pouvons simplement forcer une taille spécifique. Il existe également quelques autres options. Donc, si nous décochons ou remplaçons les options, la raison pour laquelle je les prends est parce qu'elles forcent simplement le widget à avoir cette taille. Aucune de ces options ne sera meilleure si vous avez ces éléments tectoniques. Nous allons donc simplement les enlever pour l'instant. Nous pouvons également définir une taille minimale et maximale. Et cela nous indique essentiellement que nous voulons que notre widget soit au moins 50 par 50. Mais il peut se redimensionner jusqu'à un autre site. Donc disons 200 par 200. Vous voyez actuellement que c'est 50 parce que nos images ne sont qu'une petite image. Mais si notre image était plus grande, elle utiliserait cet espace supplémentaire jusqu'à 200 pixels. Ensuite, l'image ne serait pas plus grande que 200 parce que nous disons taille maximale. Pour le moment, nous venons d'ajouter des widgets manuellement en faisant glisser des hommes sur notre panneau de toile ou notre boîte verticale, par exemple. Mais dans notre prochaine leçon, nous allons apprendre comment créer des widgets en utilisant du code, les ajoutant à ces boîtes. Nous examinerons également la boîte de défilement, donc je vais simplement l'apporter ici. Et en gros, le fonctionnement de la boîte de défilement est qu'une fois que les widgets qu'elle contient, les enfants à l'intérieur deviennent plus grands que sa taille actuelle, auront une barre de défilement ici, seront en mesure de faire défiler le contenu de la boîte de défilement. 41. Widgets (créer des Widgets): Salut tout le monde. Dans cette leçon, nous allons apprendre à créer des widgets à l'aide de code, au lieu d'avoir à glisser-déposer manuellement ces widgets dans notre panneau ici. Nous allons également examiner la boîte de défilement. Maintenant, j'expliquerais cela un peu dans notre dernière leçon. Mais essentiellement, lorsque le contenu de notre boîte de défilement devient plus grand que la boîte ne l'est réellement, cela nous donnera une petite barre de défilement que nous pouvons utiliser pour faire défiler son contenu. Pour commencer, nous allons créer un tableau de données qui contiendra des informations sur certains éléments. Ensuite, nous allons demander à notre code de widget créer une liste pour chacun de ces articles, et nous allons les stocker dans notre boîte de défilement ici. Pour commencer, nous allons aller dans le navigateur de contenu et créer un nouveau widget. Et ce sera un widget personnalisé lequel nous allons réellement apparaître dans lequel nous allons réellement apparaître et utiliser pour afficher nos informations. Nous allons donc cliquer avec le bouton droit de la souris, accéder à l'option de l'interface utilisateur et créer un nouveau widget. Nous allons sélectionner le widget utilisateur. Et nous allons appeler cela BP sur la liste des éléments de score comme ça. Et nous allons double-cliquer dessus pour l'ouvrir. Et je vais juste faire glisser le mien en haut ici comme ça. Maintenant, la différence avec la création ce widget par rapport à notre HUD, c' est-à-dire que nous n'allons pas utiliser de panneau de toile parce que notre widget de liste d'articles va être ajouté à un autre panneau . De la même manière que nous avons créé nos images et nos textes, la liste des objets n' occupera la liste des objets n' occupera pas tout l'écran des joueurs. Nous n'allons donc pas utiliser un panneau de toile, nous allons simplement utiliser directement une boîte horizontale pour commencer. Je vais donc prendre une boîte horizontale , la mettre ici. Cela va nous permettre de disposer les choses dans une direction horizontale. Nous pouvons vous prendre une image afin que nous trouvions l'option image. Eh bien, je vais ajouter quelques textes pour le joueur ou le nom de l'objet, et j'ajouterai également un autre texte. Peut-être aurons-nous une valeur de coût. le moment, cela semble un peu étrange parce que si vous vous souvenez, nous sommes toujours en train de prévisualiser si les widgets sont ajoutés à un écran ATP 120e par dix. Mais ce que nous pouvons faire pour nous donner un aperçu, c'est d'aller à la taille de l'écran ou au plein écran ici pour personnaliser. Et cela nous permet de saisir manuellement une taille de pixel pour notre widget. Souvenez-vous, c'est juste pour la prévisualisation. Ce n'est pas vraiment la taille de notre widget. Cela nous donne donc juste une idée de ce à quoi ressemblera le widget à une certaine taille. Je vais fixer le mien à 350. Et la longueur, ou peut-être que nous allons faire 400 et la longueur, peut-être AT, et la largeur. Maintenant, nous avons une petite idée de ce à quoi vont ressembler nos widgets une fois que nous les avons ajoutés à une boîte de défilement, comme nous l'avons fait dans la vidéo de mise en page, vous pouvez passer un peu de temps à vous déplacer tout autour, en ajoutant des espaces, en modifiant les polices ou les couleurs si vous le souhaitez. Je vais mettre mon coût pour qu'il soit contre ce côté, donc je vais le régler pour qu'il soit aligné sur le côté droit et nous allons prendre le film. Notre texte se trouve donc de ce côté de notre widget. Maintenant, nous allons également devoir modifier valeurs de ces widgets dans le code. Nous allons donc sélectionner chacun de nos widgets ici et les renommer. Je vais donc renommer l'image en icône d'élément. Et sa variable est activée, ce qui est une bonne chose car nous devrons accéder à notre image dans le graphique d'événements. Maintenant, si nous sélectionnons notre manuel, vous pouvez voir qu'il n'a pas réellement ce TikTok. Nous allons donc nous occuper de cela. Et je vais définir celui-ci sur le nom de l'élément. Et celui-ci s' occupera également de cela, et nous appellerons cet article coût. Maintenant, si nous allons dans notre vue graphique et que nous compilons, vous verrez que nous avons maintenant des variables pour chacun de nos types de widgets. En les utilisant, nous pouvons simplement les obtenir sous forme de variables et nous pouvons définir des informations à leur sujet. Donc, si je voulais modifier le texte de notre coût d'article, je peux définir le texte. Nous pouvons utiliser le nœud de texte défini, ce qui me permet de modifier le texte affiché par notre texte de coût d'article. Maintenant, nous allons simplement supprimer ces nœuds car nous avons réellement besoin de configurer notre table de données. Nous allons donc enregistrer notre liste d' objets pour moment et revenir au navigateur de contenu. Avant de créer une table de données, nous devons d'abord créer une structure à utiliser par cette table de données. Nous allons donc cliquer avec le bouton droit de la souris et nous allons accéder aux plans puis à la structure. Et je vais juste appeler le mien élément de soulignement S. Et nous allons ouvrir ça. Et ici, nous allons ajouter de nouvelles variables. Je vais donc ajouter une nouvelle variable. Le premier, on appellera « name ». Nous allons le remplacer par une valeur de texte. Ce sera donc le nom de notre article. Nous pouvons définir un coût, donc nous appellerons ce coût, et nous le définirons sur un entier. Et nous pourrions ajouter une autre valeur, exemple pour une texture, qui recherchera une texture 2D. Et nous voulons la texture 2D ici, référence d'objet. Je vais juste appeler cette icône comme ça. Et nous allons enregistrer ça. Nous allons maintenant revenir à notre navigateur de contenu et créer un nouveau tableau de données à l'aide de notre structure d'éléments de soulignement S. Nous allons donc cliquer avec le bouton droit de la souris, accéder à l'option Divers ici, sélectionner le tableau de données, puis nous allons sélectionner notre élément S dans le menu déroulant ici et cliquer sur OK, puis nous appellerons notre liste d'éléments de tableau de données comme ça. Nous devons maintenant ouvrir la liste des éléments et y ajouter des éléments. Nous allons donc ouvrir ça. Et nous allons ajouter de nouvelles lignes. Je vais donc ajouter une nouvelle ligne. Je vais appeler ça « épée ». Épée, épée. Et nous allons définir le nom pour trier. Nous fixerons le coût à cinq. Maintenant, je n'ai pas d' icônes pour les objets, mais nous pouvons utiliser des textures aléatoires. Je vais peut-être choisir la texture de la caméra pour celui-ci. Eh bien, je n'ai pas eu de dispute. Nous appellerons cela encore une fois mal orthographié. Voici donc l'ACS. Ensuite, nous allons également définir le nom de notre ligne AKS deux actes. Nous fixerons le coût de, disons, 20 définira une autre texture. Alors je vais juste choisir ce visage vert. On va en ajouter un autre, et je vais régler ça comme bonjour, boire. Je l'ai encore mal orthographié. Buvez comme ça. Et encore une fois, nous fixerons le nom pour aider à boire, le prix à dire ou le coût à deux. Et nous allons choisir une autre image. Je vais donc choisir, disons, l'icône Android ici. Ça ira pour l'instant. Nous en ajouterons d'autres afin de pouvoir faire fonctionner notre boîte de défilement un peu plus tard. Mais pour l'instant, c'est ce que je vais faire. Nous allons revenir à notre widget de liste d' objets. Nous devons maintenant créer une fonction qui va réellement configurer cette liste et définir cette liste et définir notre icône de coût d'article et les noms de ce widget. Pour ce faire, je vais créer une nouvelle fonction. Je vais juste appeler cette liste de configuration. Nous allons ajouter une entrée, nous allons donc sélectionner le nœud d'entrée ici. Et sous les entrées, nous ajouterons une nouvelle entrée. Et je vais régler cela sur l'élément de soulignement F. C'est la structure que nous avons utilisée pour notre table de données. Si vous vous en souvenez, nous serons en mesure de saisir une structure d'élément pour cette fonction. Nous allons donc le définir sur cela et nous allons définir le nom sur item. Maintenant, nous allons utiliser les informations de cette entrée de structure pour définir réellement nos widgets. Si nous faisons glisser vers l'extérieur, nous pouvons casser notre structure d'élément et nous pouvons accéder au nom coûte une icône. Donc, pour commencer, nous allons récupérer le nom de l'élément Widget, Get that variable, puis faire glisser et définir le texte. Et nous allons faire le nœud SetText. Connectez cela à notre entrée. Nous allons prendre le nom et l'insérer dans le texte. Ensuite, nous obtiendrons le coût de l'article. Fais la même chose. Alors définissez le texte, récupérez ce nœud. Connectez cela à notre SetText précédent, et nous saisissons le coût. Nous pouvons également intégrer cela directement dans nos textes. Cela nous donnera ce nœud qui convertit simplement un entier en texte. Enfin, nous allons définir l'icône. Nous allons donc saisir l' icône de l'élément et nous allons faire glisser vers l'extérieur et définir le pinceau. Nous voulons définir le pinceau à partir d' une texture comme ça. Et cela nous permet simplement dire quel est notre widget d'image, quelle texture vous souhaitez utiliser. Je vais donc simplement saisir notre icône ici, connecter à la texture. Donc maintenant, lorsque nous exécutons cette fonction, nous allons définir le coût du nom de l'article et l'icône ou à n'importe quelle structure que nous fournissons à l'entrée. Nous pouvons maintenant compiler et enregistrer cela et nous allons revenir à notre HUD. Maintenant, j'ai la boîte de défilement de nos leçons précédentes. Je vais donc l' agrandir un peu parce qu'il est assez petit pour le moment. C'est donc juste un peu plus grand. Nous allons également ajouter une boîte verticale à notre boîte de défilement. Maintenant, nous pouvons simplement ajouter nos widgets directement dans la boîte de défilement. Mais le problème avec cela est que vous pouvez avoir des problèmes de mise à l'échelle et que certaines options manqueront également. Donc, si nous faisons défiler vers le bas, je vais prendre une case verticale et l'ajouter à la boîte de défilement ici. Maintenant, si je devais simplement, par exemple, prendre un bouton et l'ajouter à la boîte de défilement. Si je sélectionne ce bouton, vous pouvez voir qu'il nous manque les options de remplissage et automatique. Alors que si je l'ajoute à la boîte verticale, vous pouvez voir que nous récupérons ces options. C'est pourquoi je vais ajouter , nous pouvons supprimer ce bouton. Maintenant. Je vais en fait ajouter nos widgets à la boîte verticale au lieu de directement dans la boîte de défilement. Mais ne vous inquiétez pas, la boîte de défilement se comportera toujours comme elle le devrait une fois que notre boîte verticale à l'intérieur de la boîte de défilement sera trop grande car la boîte de défilement aura une petite barre de défilement et nous serons en mesure de faire défiler par le biais du contenu. Pour l'instant, nous devons pouvoir accéder à cette case verticale dans notre code. Nous allons donc faire comme nous l'avons fait précédemment dans la liste des objets, nous allons sélectionner la case verticale que nous avons ajoutée à la boîte de défilement. Et nous allons dire son nom à la liste d'objets. Et nous devons prendre en charge sa variable et ensuite compiler. Ensuite, nous allons passer au mode graphique et nous allons utiliser le nœud de construction maintenant, le vôtre est peut-être grisé. Le mien n'est pas parce que je l'ai déplacé plus tôt, mais j'ai dit qu'il était grisé. C'est très bien ça. Vous pouvez toujours le faire glisser et cela fonctionne bien. Ce que nous allons faire, c'est d' abord récupérer toutes les entrées de notre liste d'objets. Nous allons donc cliquer avec le bouton droit de la souris et obtenir le tableau de données. Et nous voulons obtenir les noms des lignes de la table de données. Cela nous permet de définir un tableau de données qui nous donnera tous les noms de lignes de notre liste d'éléments. Il va donc nous donner tous ces noms ici. Ensuite, nous retournerons dans le capot et nous allons définir notre table de données sur Liste d'objets, connecter à notre Construct d'événement. Ensuite, à partir des noms d'outro, on va faire une boucle. Je vais donc faire glisser et rechercher une boucle. Maintenant, j'ai eu un bug en filmant cette leçon où mes nœuds de boucle arrivaient. Donc, si vous rencontrez ce problème alors qu'ils ne sont pas là, vous pouvez aller dans le navigateur de contenu, trouver le dossier du moteur. Si ce n'est pas le cas, vous pouvez l' afficher en accédant aux paramètres. Cliquez sur Afficher le contenu du moteur, puis sur Moteur, recherchez Standard. Et si vous voulez des macros standard, ouvrez-les simplement. Ensuite, si vous revenez au widget de votre baie d'Hudson, faites-le glisser, vous devriez pouvoir les trouver. J'espère que vous n' aurez pas ce bogue, mais juste au cas où vous le ferez, c'est comme ça que je l'ai corrigé. Il suffit donc de le faire. Maintenant, j'espère que vous avez ces nœuds de boucle qui apparaissent. Je vais donc simplement rechercher une boucle et nous voulons faire une boucle foreach. Et cela va parcourir en boucle toutes les différentes entrées de notre table de données. Et en utilisant le nom de la ligne, nous allons obtenir les données ou la structure de notre liste d'éléments. Nous allons donc obtenir un tableau de données. Nous n'obtiendrons pas de ligne de tableau de données. Nous allons définir le tableau de données sur la liste des éléments. Et vous pouvez voir que nous avons le nom de notre rôle. Nous allons donc simplement l' insérer dans élément tableau parce que si vous vous en souvenez, cela nous fournit tous les noms de lignes. Ainsi, chaque fois que cela s'exécute, il nous donnera l'un des noms de ligne de notre liste d'articles. Nous allons le connecter au corps de la boucle. Ensuite, nous allons créer notre widget de liste d'objets. Nous allons donc créer un widget. Nous allons définir la classe sur notre liste d'objets Joueur propriétaire. Nous pouvons simplement faire glisser et obtenir Owning Player parce que nous sommes à l'intérieur d'un widget, nous pouvons simplement fournir notre nouveau widget. Nous avons nos widgets actuels Owning Player. Ensuite, nous allons connecter la ligne trouvée pour créer un nœud de widget. Ensuite, à partir de la valeur de retour, nous voulons configurer ce nouveau widget de liste d'articles. Pour ce faire, nous allons utiliser la fonction de configuration que nous venons de créer. a donc été mis en place. Et nous voulons alors la fonction de mise en page de la liste qui peut récupérer la ligne ou l'outro de notre liste d'articles et la connecter pour configurer la liste. Enfin, nous devons ajouter le nouveau widget que nous avons créé ici à notre liste d'articles. Je vais donc récupérer la liste des objets. Et nous allons faire glisser à partir de cela et faire Ajouter un enfant. Nous voulons que notre enfant se connecte à la boîte verticale à notre liste de configuration ici. Ensuite, pour le contenu, nous avons besoin du widget que nous ajoutons à la liste d'éléments. Nous allons donc simplement récupérer la valeur de retour et nous connecter à ce type de contenu. Donc, pour résumer le code que nous venons d'écrire, ce qui se passe lorsque le widget est créé, c'est qu'il récupère tous les noms de lignes de notre liste d'éléments. Je vais donc récupérer ces trois lignes de notre liste d'objets. Ensuite, il passera en boucle sur chacun d'entre eux. Donc ce code ici que nous avons mis en évidence 13 fois. Et chaque fois qu'il s'exécute, il sera exécuté avec un nom de ligne différent de celui de notre liste d'articles. Cela signifie que nous obtiendrons les différentes informations de structure de notre liste d'articles. Cela permet de configurer ou de créer un nouveau widget de liste et de lui donner informations différentes pour chaque liste de widgets que nous créons. Ensuite, pour chacun d'eux, nous les ajoutons au widget de liste d'articles que nous avons ajouté à notre boîte de défilement et ici. Nous pouvons donc maintenant tester cela dans le jeu. Je vais simplement supprimer ces anciens widgets que nous avons ajoutés dans notre leçon précédente. Je vais donc simplement sélectionner la case verticale ici, supprimer, supprimer le bouton. Nous allons sélectionner cette case horizontale ici. Supprimez-le et nous supprimerons cette zone de texte juste pour que nous puissions voir notre boîte de défilement un peu plus facilement. Je vais déplacer la boîte de défilement juste en haut à gauche. Il va donc compiler ça. Et maintenant que nous sommes prêts à tester cela, nous allons donc cliquer sur Play. Et maintenant, vous pouvez voir que tous les articles que nous avons ajoutés à notre liste d'articles apparaissent sur notre écran. Et tout cela se fait par code. Actuellement, nous n'avons pas la petite barre de défilement car il n'y a que trois entrées, donc elle ne prend pas assez de place pour que la barre de défilement existe réellement. Mais ce que nous pouvons faire, c'est que si nous sortons de l'éditeur d'avion, nous pouvons simplement accéder à la liste des éléments. Vous pouvez ajouter des éléments individuels si vous le souhaitez. Mais je vais juste prendre la hache ici et nous allons dupliquer plusieurs fois, puis faire de même avec la boisson santé, qui est dupliquée plusieurs fois. Maintenant, lorsque nous appuyons sur lecture, nous espérons avoir cette barre de défilement. Actuellement, je ne peux pas interagir avec la barre de défilement. Et c'est parce que notre souris est verrouillée sur la caméra de notre joueur. Ensuite, je vais juste vous montrer comment nous pouvons configurer un peu de code qui nous permet de libérer notre souris du contrôle de la caméra afin que nous puissions réellement interagir avec nos différents éléments de l'interface utilisateur. Pour commencer, nous allons passer à notre plan de personnage. Donc je vais juste aller à, nous allons nous débarrasser de cette recherche, aller dans le dossier de contenu de la personne, puis les plans. Et nous allons aller dans ThirdPersonCharacter et l'ouvrir. Nous avons encore du code des leçons précédentes. Évidemment, nous avons ici le code qui crée notre HUD et l' ajoute à l'écran. Nous voulons donc conserver cela. Et nous pouvons supprimer ce code kill player parce que je ne l'utilise plus. Donc, ce que nous allons faire est d'ajouter une entrée, donc je vais cliquer avec le bouton droit de la souris et rechercher un événement d'entrée. Je ferais un quart de travail. Tu as quitté le quart. Ainsi, chaque fois que nous appuyons sur Maj gauche, nous basculons entre contrôle de la caméra de notre personnage et la possibilité pour notre souris d'interagir avec l'interface utilisateur. Donc pour commencer, nous devons aller où notre souris contrôle actuellement la caméra ou non. Nous allons donc obtenir un contrôleur de joueur. À partir de là, nous allons faire glisser et obtenir Afficher le curseur de la souris. Cela sera vrai ou faux, que le curseur de la souris soit actuellement visible ou non . Nous allons donc faire un F. Cela nous permettra de contrôler le code que nous exécuterons si le curseur de la souris est actuellement visible plutôt que nous voulons le masquer. Donc nous allons faire ou allons copier, je vais prendre un contrôleur de joueur. Nous allons sortir de là et définir le mode de saisie. Et nous voulons régler le mode de saisie sur jeu uniquement parce que nous changeons. Si le curseur de la souris est actuellement visible, nous passons en mode gain, donc nous voulons simplement contrôler notre caméra. Nous allons donc nous connecter à true. Ensuite, nous voulons également masquer le curseur de la souris. Nous allons donc faire glisser et afficher le curseur de la souris. Et nous voulons que ce soit faux comme ça. Ensuite, si le curseur de la souris n'est pas visible actuellement , nous voulons le définir comme visible. Mais nous voulons d'abord le régler pour gagner en mode et en interface utilisateur. Nous allons donc définir le mode de saisie, le jeu et nous savions pourquoi la raison pour laquelle nous utilisons le jeu et l'interface utilisateur et pas seulement l'interface utilisateur est que si nous devions le définir uniquement sur l'interface utilisateur, aucune de nos entrées et notre personnage ne fonctionneraient plus. Donc, si nous devions appuyer à nouveau sur Maj gauche, nous ne serions pas en mesure de quitter le mode Y parce que ce nœud ne fonctionnerait pas. Nous utilisons donc à la place le mode de saisie set, game et gy. Et nous allons connecter cela à false. Ensuite, nous allons récupérer la variable que nous avons réellement créée dans une leçon précédente. Vous pouvez voir que le code en bas, c'est là que nous créons le HUD. Nous le définissons sur une variable , puis nous l'ajoutons à notre fenêtre d'affichage. Nous allons donc utiliser cette variable pour définir le widget et le focus comme ça. Enfin, nous voulons afficher notre curseur. Je vais donc simplement faire glisser à nouveau depuis get player controller pour définir Afficher le curseur de la souris. Nous voulons prendre cela en charge et le connecter à notre sortie ici. Maintenant que tout est configuré lorsque nous appuyons sur Shift, cela libère notre souris du contrôle de la caméra et nous permet de contrôler l'interface utilisateur. Et lorsque nous appuierons à nouveau dessus, il reprendra le contrôle de la caméra de notre joueur. Nous pouvons donc compiler ceci et le tester. Nous allons jouer. Je suis donc en train de contrôler ma caméra. Si j'appuie sur Maj, vous pouvez voir que j'ai maintenant ma souris. Je ne contrôle plus la caméra. Je peux également utiliser notre petite barre de défilement ici pour faire défiler toutes les différentes entrées. Dans cette leçon, tout ce que nous avons fait est d'utiliser le cadre horizontal pour l' ajouter à notre boîte de défilement. Mais si nous le voulions, nous pourrions modifier le widget de liste d'articles autant que vous le souhaitez. Nous pourrions donc aller voir le designer. Peut-être que je voulais vraiment que ce soit un bouton. Ce que nous pouvons faire c'est cliquer avec le bouton droit sur le Boxer On pourrait faire du rap avec et sélectionner un bouton. Ensuite, nous pourrions l' avoir pour que lorsque ce bouton est enfoncé, il exécute du code. Nous pouvons donc sélectionner le bouton ici, faire défiler vers le bas et cliquer dessus. Cela nous donne naissance à un nouvel événement. Ainsi, chaque fois que vous appuyez sur ce bouton de liste , il affichera un. Nous pouvons faire une chaîne d'impression, et nous pouvons faire en sorte que cette chaîne d'impression affiche la valeur actuelle du nom de l'élément afin que nous pourrait obtenir ItemName, obtenir du texte. Nous utiliserions GetText. Notez-le. Ainsi, chaque fois que nous cliquons sur ce bouton, le nom de l'élément sur lequel nous avons cliqué sera imprimé. Nous allons donc nous diriger vers le jeu, appuyez sur Play. Et maintenant, vous pouvez voir que ce sont des boutons. Actuellement, j'ai le contrôle de ma caméra. Si j'appuie sur Shift, j'ai ma souris maintenant, maintenant quand je clique dessus, vous pouvez voir qu'il imprime le nom de l'élément. C'est donc tout pour cette leçon. J'espère que vous comprenez maintenant comment créer des widgets, puis ajouter ces widgets à l'aide de code. 42. Widgets (fixations): Salut tout le monde. Dans cette leçon, nous allons maintenant examiner les liaisons de widgets, qui nous permettent de contrôler certaines propriétés de nos widgets à l'aide de variables ou de fonctions. Donc, pour vous donner un exemple, si je fais glisser une image ici, je vais juste l'agrandir un peu. Si vous regardez dans la partie droite du panneau Détails, vous verrez cette option de liaison pour certaines des différentes propriétés de notre image. Maintenant, il s'agit en fait de paramètres que nous pouvons contrôler avec une variable ou une fonction. Un bon exemple est l'option de visibilité ici. Maintenant, cela définit simplement si le widget est visible ou non. Donc, si nous le laissons comme légume, nous pouvons le mettre en pause et appuyer sur lecture. Nous verrons que nous avons notre image ici. Et si nous revenons au capot et que je règle la visibilité sur la compilation cachée , puis nous appuyons sur Play. Vous pouvez voir qu'il n'est plus visible. Mais nous pouvons également contrôler ce paramètre à l'aide d'une variable. Donc, si nous revenons à notre HUD, sélectionnez notre image ici, vous pouvez voir que nous avons une option de liaison à côté de la visibilité. Et pour l'instant, nous n'avons que l'option Créer une liaison, et je vais vous l'expliquer dans une minute. Mais si nous allons dans notre vue graphique ici et que nous créons une nouvelle variable, et que nous allons simplement l'appeler, nous l'appellerons visibilité de l'image. Et nous allons définir son type pour indiquer, désolé, visibilité de l' ardoise. Nous voulons donc de la visibilité à Eastlake. C'est le type de variable que nous devons utiliser lorsque nous associons un paramètre de visibilité. Je vais donc le faire en tant que composant. Et si vous voyez en bas, la valeur par défaut est en fait les mêmes paramètres que ceux que nous avons dans notre vue de conception si je clique sur le menu déroulant pour une visibilité ici. Maintenant que nous avons créé cette variable, nous pouvons la lier à cette image est visibilité. Nous pouvons donc cliquer sur bind et vous voyez que nous pouvons maintenant voir cette variable ici. Si je sélectionne cette option maintenant, notre image utilise maintenant ce paramètre variable pour déterminer si elle est visible. Et vous pouvez voir que cela est grisé. Maintenant, si nous allons dans le graphique d'événements et que nous sélectionnons la variable que nous avons créée, elle est actuellement définie sur Visible. Donc, si nous appuyons sur Play, vous verrez qu'il est visible. Et si nous revenons en arrière et que nous définissons cette variable comme étant masquée en C, elle est maintenant masquée. Cela nous permet de contrôler la visibilité de ces images uniquement à l'aide de cette variable. Et nous pouvons changer cette variable, nous le voulons, donc par exemple, nous pourrions la définir, nous pourrions la définir pour qu'elle soit masquée après un certain temps. Nous pourrions donc ajouter, disons un retard ici. Au bout de deux secondes, je vais masquer notre image. Et nous allons définir la visibilité par défaut pour qu'elle soit visible au début. Ensuite, au bout de deux secondes, il sera réglé sur masqué. Si nous appuyons sur Jouer, vous verrez qu'il est maintenant visible et qu'au bout de deux secondes, il sera masqué. Désormais, nous pouvons également contrôler d'autres propriétés de nos widgets à l'aide de variables. Donc, si nous revenons à notre HUD, allez dans la vue Design et nous avons sélectionné notre image. Vous pouvez voir que nous pouvons également lier une variable au pinceau. Nous pouvons donc utiliser une variable pour contrôler tous ces paramètres ici. Donc, si nous allons sur le graphique et que je crée une nouvelle variable, je vais appeler mes paramètres de pinceau comme ça. Nous allons changer le type en pinceau ardoise. Et nous allons choisir la meilleure option ici. Et si nous compilons, vous verrez que ces options correspondent réellement à ce que nous avons dans la conception de l'affichage pour nos paramètres de pinceau d'image. Et si nous cliquons sur le lien, nous pouvons également définir cette variable de paramètres de pinceau ici également. Nous pouvons maintenant contrôler les paramètres de pinceau de nos images à l'aide de la variable que nous venons de créer. Donc, si nous sélectionnons Paramètres du pinceau , nous pouvons choisir une nouvelle image. Par exemple, je vais choisir ce visage vert. Et si nous compilons et que nous appuyons sur Play, vous verrez que nous utilisons maintenant cette face verte. Et il disparaissait encore à deux secondes. Parce que si vous vous souvenez, nous avons ici notre variable de visibilité, et c'est ce qui contrôle la visibilité de nos images. Vous pouvez donc avoir plusieurs liaisons pour les différents paramètres ici, pour le même widget également. Jusqu'à présent, nous n'avons utilisé variables pour contrôler ces liaisons, mais vous pouvez également utiliser des fonctions. Donc, si nous allons dire l'option de visibilité ici, si nous cliquons simplement sur la liaison et si vous voulez supprimer une liaison, vous pouvez simplement cliquer dessus et supprimer la liaison, et cela la réinitialisera à l'aide de ce cadre ici. Maintenant, il est simplement réglé sur masqué. Donc si je devais appuyer sur Play, vous verrez que c'est juste caché. Et même après deux secondes, cela ne changera pas car nous utilisons à nouveau ce paramètre de visibilité ici, et non la variable. Mais nous pouvons également utiliser des fonctions. Donc, si nous cliquons sur l'option ici et que nous cliquons sur Créer une liaison, cela créera en fait une nouvelle fonction et nous sommes toujours dans notre HUD bp ici, vous pouvez voir que la valeur de retour sera quelle que soit la liaison nécessite. Parce que nous utilisons l'option de visibilité. Cela nous donne une sortie de visibilité de notre nœud. Si je devais en créer un pour notre pinceau, par exemple, si je supprime cette reliure, créez-en une nouvelle. Vous verrez que maintenant la valeur de retour est une légère valeur de pinceau car c'est la variable dont elle a besoin pour cette liaison. Mais pour l'instant, je vais juste remettre cela à notre variable de réglage de pinceau ici. Il utilisera donc cette variable que nous avons créée plus tôt ici et reviendra à notre nouvelle fonction. Donc, si nous passons aux fonctions, vous verrez que nous avons maintenant une option d'obtention de visibilité. Et c'est la fonction que nous avons créée lorsque nous avons créé cette liaison ici. Maintenant, nous pouvons ajouter du code ici comme d'habitude pour contrôler la visibilité. Par exemple, nous pourrions obtenir un contrôleur de joueur. À partir de là, nous pourrions obtenir la souris, afficher, le curseur de la souris. Et on pourrait s' éloigner de notre valeur de retour, tu te feras gifler. Branchez. Affiche le curseur de la souris dans l'indexeur. Donc, si le curseur de la souris est vrai, alors je vais définir notre image sur visible. Et si c'est faux, nous allons le définir sur masqué. Si vous vous souvenez de notre leçon précédente dans ThirdPersonCharacter, nous avons configuré ce code ici, qui nous permet essentiellement de basculer entre le contrôle de la caméra et le contrôle de la souris. Donc maintenant, quand on appuie sur play, vous pouvez voir, je ne peux pas voir l'immature du tout, mais je prends le contrôle de mon appareil photo. Mais si j'appuie sur Maj, vous pouvez voir que j'ai ma souris et que mon image est réellement affichée. Et si j'appuie à nouveau sur Maj, vous pouvez voir qu' il est maintenant masqué. Et la raison pour laquelle il le fait , c'est parce que dans notre HUD, cette fonction est exécutée pour déterminer la visibilité de nos images. Cela signifie que si le curseur de la souris est visible ou si cette variable est vraie, nous la définissons sur visible. Et s'il est faux, il le met en masqué. Il y a un autre exemple que je voulais vous donner , celui de l'utilisation de la barre de progression. Les barres de progression sont généralement utilisées pour des éléments tels que les barres de santé et les barres de faim ou l'écran de chargement et les barres. Nous allons donc nous diriger vers la vue de conception et obtenir la barre de progression dans la palette. Faites-le glisser dedans. Je vais allonger un peu le mien comme ça. Nous avons maintenant quelques paramètres pour des éléments tels que le style qui contrôlent son apparence. Mais nous allons simplement nous concentrer sur la valeur en pourcentage ici. Et si c'est 0, cela signifie que la barre de progression est vide. Et s'il y en a un, vous pouvez voir quand je le déplace vers le haut, qu'il est plein. Notre pourcentage sera donc toujours une valeur comprise entre 01 et cela déterminera le niveau de remplissage réel de la barre de progression. Maintenant, nous pouvons également utiliser une liaison pour cette propriété. Vous pouvez donc voir que nous avons l'option bind ici, donc nous pouvons définir une variable ou fonction pour contrôler cette valeur. Actuellement, au moment du tournage, il y a un bogue dans le moteur où vous ne pouvez pas lier cela à une variable et vous donner un exemple. Normalement, vous pouvez lier cette valeur à une variable flottante. Donc, si je vais créer une nouvelle variable flottante en C, vous dites amount et la définissez sur un flottant comme ça. Et nous allons simplement compiler. Si je reviens à la vue de conception et que je clique sur l'option de liaison ici, vous pouvez voir que notre flux n'est pas là et qu'il devrait l'être. Si votre variable est ici, c'est génial. Vous utilisez une version plus récente du moteur et le bogue a été corrigé, vous n'avez donc pas à vous inquiéter à ce sujet. Mais si vous ne l'avez pas ici et qu'il n'a pas encore été corrigé, il existe un autre moyen de contourner ce problème, en utilisant simplement la fonction. Donc au lieu de simplement sélectionner la variable, nous pouvons simplement créer une liaison. Et ici, vous pouvez voir que la valeur de retour est un flottant. Et nous pouvons simplement prendre notre variable de montant, l' insérer dans la valeur de retour. Et maintenant, nous pouvons utiliser ce flotteur pour contrôler le montant. Je peux donc le définir sur 0.2. Nous pouvons cliquer sur Compiler puis sur Play. Vous pouvez voir qu'il est maintenant à 0,2 sur la barre de progression. Nous pouvons maintenant configurer un autre widget qui contrôle la variable de montant que nous venons de créer, et qui mettra à jour notre barre de progression ici. Donc, si nous sortons du jeu, allez dans le HUD. Nous pouvons ajouter, disons un curseur ici. Et nous allons l'agrandir un peu. Je vais changer ce point d'ancrage en haut à droite parce que c'est le point le plus proche. Je vais donc changer le point d'ancrage. Et nous pouvons changer le style juste pour être un peu plus grand. Je vais donc faire en sorte que l' épaisseur de la balle soit un peu plus facile à voir dans le jeu. Ensuite, nous allons compiler. Et ici, vous pouvez voir que notre propre valeur a changé. Et si nous cliquons sur le bouton Plus, cela nous créera un événement qui nous permettra définir une variable en utilisant ce que la diapositive est actuellement définie pour être simplement saisir notre variable de montant ici, connectez-la. Et maintenant, lorsque nous déplaçons notre curseur dans jeu, vous pouvez voir qu'il est ici. Si j'appuie sur Maj pour entrer en mode souris , vous pouvez voir que notre image apparaît toujours. Nous ne pouvons pas faire glisser un curseur et vous pouvez voir que notre barre de progression est en fait mise à jour avec notre curseur. C'est à peu près tout pour la façon dont vous pouvez lier des variables et des fonctions aux propriétés d'un widget. Si nous revenons au cœur ici, je vais juste sortir des planètes pour accéder à la vue Graphique si jamais vous voulez trouver une fonction de liaison. Nous avons donc créé, lorsque nous avons cliqué sur l'option de liaison et que nous avons créé une liaison, vous pouvez les trouver sous l'onglet Fonctions. Comme n'importe quelle fonction normale. Le moteur donne automatiquement ces noms afin que vous puissiez les renommer si vous le souhaitez. Et vous pouvez également les supprimer si vous ne les utilisez pas, faites attention. Si vous supprimez un élément que vous utilisez dans une liaison de widget, cela vous donnera une erreur, alors soyez prudent avec cela. C'est tout pour cette leçon. J'espère que vous en savez un peu plus sur le fonctionnement des liaisons et des widgets et sur la façon dont vous pouvez les utiliser dans vos futurs projets. 43. Widgets (frontières, superpositions et grilles): Salut tout le monde. Dans cette leçon, nous allons examiner quelques autres types de widgets. Nous allons jeter un coup d'œil à la superposition de bordure et au panneau de grille uniforme. Mais avant de commencer, nous allons juste nettoyer un peu notre projet de notre dernière leçon. Je vais donc simplement sélectionner ces trois widgets ici, supprimer, me diriger vers le graphique d'événements. Je vais prendre mon nœud de construction, connecter à ce nœud ici. Ensuite, nous supprimerons les nœuds que nous n' utilisons pas supprimera également ce curseur. Et si nous compilons, tout devrait bien se passer. en revenir à la conception de la vue, première chose que nous allons examiner est le panneau de grille uniforme. Si on fait glisser ça dedans. Et je vais juste agrandir un peu le mien ici. Ce panneau fonctionne de la même manière que la boîte horizontale. La boîte verticale. La seule différence est qu'il peut avoir des enfants verticaux et horizontaux. Donc, pour vous donner un exemple rapide, si je prends, disons, une image ici et je l'ajoute au panneau de grille uniforme. Tu peux le voir. C'est dans le coin supérieur gauche. Je vais ajouter une image supplémentaire ici. Vous voyez que c'est toujours, les deux sont toujours dans ce coin supérieur gauche. Mais vous dites que si je sélectionne l'une d'entre elles, j'obtiens ces flèches et je peux les positionner à différents endroits, soit vers le bas, soit horizontalement comme ça. Maintenant, nous pouvons également contrôler cela dans le panneau Détails. Vous pouvez voir qu' actuellement ce widget Row est défini un et que sa colonne est définie sur 0. Mais si je devais définir la colonne pour dire trois, vous pouvez voir qu'elle la déplace ensuite vers la troisième colonne. Contrairement aux boîtes horizontales et verticales, vous pouvez également modifier l'alignement. Donc, dans le panneau Détails, si nous voulions dire B dans le coin inférieur droit, nous pourrions le faire en utilisant ces options d'alignement. Maintenant, nous pouvons également ajouter des widgets à notre panneau de grille uniforme à l'aide de code. Et c'est là qu'ils deviennent vraiment puissants parce que nous pouvons utiliser des panneaux de grille uniformes pour créer des éléments tels que des inventaires ou des listes plus avancées. Donc, pour vous donner un exemple de la façon dont vous feriez cela, je vais créer un nouveau widget que nous pouvons également utiliser la bordure et la superposition n. Nous allons donc nous diriger vers le navigateur de contenu. Je vais simplement cliquer sur le bouton Ajouter, aller dans l'interface utilisateur , puis Widget Blueprint sélectionnera utiliser un widget et il descendra. Et nous sommes rentrés chez nous et la fente de grille S2, BP et Scott. Et nous allons ouvrir ça. Je vais juste faire glisser le mien en haut ici comme ça. Pour commencer, nous allons ajouter le widget de bordure à la hiérarchie, juste comme ça. Lorsqu'elle est sélectionnée, vous pouvez voir les paramètres de notre bordure dans le panneau Détails. Et c'est ici que nous pouvons définir des choses comme si nous voulions utiliser une image et cela transformera simplement notre bordure en image. Nous pouvons également définir la couleur. Donc, par exemple, si je voulais qu'il soit gris, je pourrais simplement changer la couleur ici en gris plus foncé comme ça. Et cela nous offre également des options de rembourrage. Cela affectera donc tous les enfants que nous ajouterons à cette frontière. Désormais, les frontières ne peuvent avoir qu'un seul enfant. Il est très utile d'agir comme une sorte d' arrière-plan ou de conteneur pour d'autres widgets. Et l'un de ces widgets est la superposition. Donc, si nous prenons la superposition et que nous l'ajoutons à notre bordure comme ça, maintenant, si je voulais ajouter un autre enfant à la bordure, je ne peux pas. Donc, si je saisis l' image, vous pouvez voir qu'elle ne me laissera pas l'ajouter à la bordure, mais notre superposition peut avoir autant d'enfants que nous le voulons. Nous allons donc ajouter notre image à notre superposition comme ça. Maintenant, avec la superposition sélectionnée, vous pouvez voir qu' elle n'a pas vraiment ses propres paramètres. Et c'est parce que ça ne fait rien de vraiment visuel. Il ne fait que nous permettre d' y ajouter plusieurs widgets. Et ces widgets se superposent les uns aux autres afin qu'ils ne soient pas déplacés dans une direction horizontale ou verticale différente. Ils étaient tous empilés les uns sur les autres. Donc, avant de commencer à mettre en page ce widget, nous allons modifier la taille de notre aperçu ici car actuellement il est 1920 par 1080, ce qui est beaucoup trop grand. Nous allons donc changer l'option plein écran ici en tant que souhaité comme ça. Maintenant, cela indique simplement au widget occuper autant d'espace que le contenu qu'il contient. ce moment, il est très petit parce notre image ne prend que très peu de place. Mais si nous sélectionnons notre widget d'image et que nous définissons l'image sur autre chose. Je vais donc choisir ce petit visage vert. Vous pouvez voir qu'elle s' agrandit parce que notre image est plus grande que ce que nous pourrions augmenter cette taille si nous le voulions, disons 128 par 128 comme ça. Vous remarquerez peut-être qu'en zoomant le haut est plus proche du bord et du côté. Et c'est parce que si nous revenons à notre frontière, le rembourrage est réglé sur 42. Et si nous cliquons sur le menu déroulant, vous pouvez voir que les valeurs gauche et droite ou quatre pixels. Il se trouve donc à quatre pixels du bord de notre image. Et puis le haut et le bas sont deux. Donc, si nous voulions que tout soit pareil, nous pourrions le faire. Je vais donc définir le mien pour qu'il dise dix comme ça. Nous avons donc juste un écart de dix pixels entre notre bordure et widget de superposition qui se trouve à l'intérieur de notre bordure. Nous avons maintenant notre image d' icône ici. Nous allons également ajouter quelques textes. Nous allons donc récupérer du texte et l' ajouter à notre superposition. Veillez à ce qu'il se superpose juste au-dessus de notre image. Maintenant, notre texte est assez volumineux pour le moment, donc je vais le sélectionner et modifier la taille de la police à 16 ou peut-être 40. Comme ça. Je vais modifier le texte pour simplement dire 99, par exemple. Et nous allons le régler pour qu'il soit aligné sur le coin supérieur droit, donc nous allons utiliser la bonne ligne et ensuite nous allons le laisser en tant que ligne du haut. C'est donc maintenant dans le coin droit. Maintenant, peut-être voulons-nous ajouter, disons, une barre de progression à notre emplacement de grille. C'est ce que nous pouvons faire. Nous allons donc également ajouter notre barre de progression à la superposition. Maintenant, je veux que ça soit en bas au centre. Je vais donc sélectionner l'alignement central puis l' alignement inférieur, comme ça. Nous pouvons maintenant modifier la taille de notre barre de progression à l'aide d'une boîte de taille. Donc si nous cliquons dessus avec le bouton droit de la souris et que nous pouvons faire du rap avec, alors faites du rap avec size box Cela va nous permettre de définir la taille exacte que nous voulons que notre barre de progression batte. Nous pouvons donc modifier la largeur et la hauteur, définir la largeur sur quelque chose comme 95 et la hauteur sur peut-être dix. Et maintenant, nous avons ajouté une barre de progression à notre superposition. Ce sont les tailles exactes que nous voulons utiliser. Maintenant, je voudrais peut-être le pousser un peu vers le haut par le bas. Nous pourrions utiliser le rembourrage pour cela. Avec notre boîte de taille sélectionnée. Nous pouvons cliquer sur le menu déroulant de remplissage et le tamponner à partir des bombes, disons, cinq pixels comme ça. Nous avons donc maintenant notre widget de grille , tous disposés à l'aide d'une superposition, nous permettant simplement de superposer tous ces différents widgets dans le même espace tout en nous donnant contrôle du remplissage et de l'alignement. paramètres. Maintenant, nous allons compiler et ajouter ces emplacements de grille à notre grille uniforme à l'intérieur de notre capot en utilisant du code. Avant cela, nous allons supprimer les images que nous avons ajoutées à la grille uniforme. Avec notre grille uniforme, nous allons la sélectionner. Nous allons appeler cette grille. Maintenant. Nous devons prendre en charge sa variable afin que nous puissions accéder à cette grille dans le code, compiler et passer à la vue graphique. Donc, pour commencer, nous allons déplacer ce code vers le haut et le supprimer. Et nous allons maintenant ajouter une séquence juste avoir les deux morceaux de code un. Cela va d'abord exécuter ce code , puis nous ajouterons le reste de notre code ici. Nous allons donc commencer par faire glisser vers l'extérieur et rechercher la boucle for. Nous voulons l' option pour la boucle ici. Et cela nous permet de simplement spécifier l'index de début et de fin, qui contrôle le nombre de fois que le corps de la boucle sera réellement exécuté. Je vais donc définir mon dernier indice. Tu dis neuf ? Cela va maintenant être exécuté dix fois parce que 0 est essentiellement un. Ainsi, pour chaque fois que cette boucle s'exécute, nous voulons créer n'importe quel widget. Nous allons donc faire glisser depuis le corps de la boucle et créer un widget comme ça. Ensuite, comme avant, nous avons besoin d'un logement propre. Donc je vais juste traîner et obtenir Owning Player. Maintenant, nous allons simplement fournir le joueur propriétaire de l'ATH. Ensuite, nous devons définir la classe, donc nous allons la définir sur l'emplacement de la grille. Ensuite, nous avons besoin de notre panneau de grille et nous allons ajouter ce nouveau widget à notre panneau de grille. Maintenant, parce que les enfants d' une grille uniforme peuvent avoir une ligne et une colonne qui définissent la distance, verticalement et horizontalement. Nous allons devoir faire quelques calculs pour déterminer où nos nouveaux emplacements de grille doivent être positionnés. Il sera donc déplacé depuis le panneau de la grille. Est-ce que vous ajouteriez un enfant à une grille uniforme ? Et nous allons le connecter au widget de création. Maintenant, le contenu sera juste le nouveau widget que nous avons créé, mais nous avons également une ligne n puis une colonne, maintenant nous voulons m'expliquer comment cela fonctionne. Ce que nous allons faire, c'est d'abord stocker l'index. Je vais donc simplement faire glisser la valeur de l'indice sur notre boucle for et promouvoir la variable. Je vais juste le garder appelé index. Et nous allons connecter ça à notre boucle ici comme ça. Maintenant, nous devons également savoir combien de colonnes aura la largeur de notre panneau de grille. Nous allons donc créer une nouvelle variable pour cela. Je vais appeler mes colonnes comme ça. Et ce sera un nombre entier. Il suffit donc de le définir sur integer, puis nous allons compiler. Ensuite, nous devons dire valeur par défaut. Je vais donc régler le mien à trois. Pour commencer, notre panneau de grille aura une largeur de trois widgets. Maintenant, à l'aide de nos valeurs d'index et de colonne, nous pouvons déterminer les emplacements de la grille de lignes et de colonnes qui doivent se trouver. Il récupérera notre index et nous allons le diviser par nos colonnes. Donc, divisez, connectez jusqu'à n rangées. Et nous voulons diviser cela par nos colonnes comme cela. La raison pour laquelle cela fonctionne est que lorsque nous divisons l'index par les colonnes, si cette valeur d'index est inférieure à la valeur de la colonne. Donc, s'il s'agit d'un ou deux, le retour sera toujours 0 car deux divisés par trois vaut 0, car ce sont des entiers. Il n'y a donc des nombres entiers que jusqu'à ce que cet index soit libre. Ainsi, la valeur de retour du nœud de division r sera 0. Cela signifie donc que nos widgets resteront à la hauteur verticale de 0 jusqu'à ce que cet index soit libre. Et puis ce nœud retournera un car trois divisés par trois font un. Ensuite, cela déplacera notre widget vers le bas dans la ligne verticale suivante. Ensuite, nous avons les colonnes. Et cela fonctionne d'une manière similaire. Nous allons donc copier ces deux variables et nous allons les faire glisser depuis mon index et faire le symbole du pourcentage. C'est donc le symbole du pourcentage, hanche. Maintenant, c'est le mode. Donc, cela consiste essentiellement diviser ces deux valeurs l'une par l'autre. Mais au lieu de nous donner le résultat, il nous donne le reste. Donc, si nous connectons cela aux colonnes, si vous imaginez que l'index est un et que les colonnes sont libres. Eh bien, si nous les divisions, le résultat serait 0. Mais comme nous obtenons le reste, le reste sera un. Si notre indice est de deux et que nos colonnes sont trois, le reste sera de deux. Et c'est ce qui pousse notre widget le long de l'axe horizontal. Nous avons maintenant terminé notre configuration pour générer nos grilles, puis les ajouter au widget de grille uniforme afin que nous puissions comparer et voir à quoi cela ressemble dans le jeu. Nous allons donc appuyer sur Play. Maintenant, nous avons notre réseau. Vous pouvez voir qu'il s'agit de trois sites Web , puis qu'il ajoute dix widgets. Nous en avons donc neuf, puis dix en bas ici. Maintenant, il y a un peu écrasé parce que notre grille uniforme réelle est trop petite pour s'adapter à tous ces widgets. Donc, ce que nous pouvons faire, c'est simplement revenir à notre HUD, à la conception de la vue, et avec notre grille uniforme sélectionnée, nous pouvons simplement prendre la taille du contenu en C, il est devenu vraiment petit parce que actuellement, il n'a aucun contenu. Mais lorsque nous compilons, nous cliquons sur Play. Vous verrez que tous nos widgets ont désormais la bonne taille. Si nous le voulions, nous pouvions revenir à notre HUD. Nous pourrions changer la valeur des colonnes gentiment et facilement en changeant simplement la valeur, disons cinq. Et quand je compilerai et que je cliquerai sur Play, vous verrez qu' il fait maintenant cinq de large. Maintenant, vous vouliez peut-être laisser un peu d'espace entre vos widgets qui se trouvent à l'intérieur de la grille. Nous pouvons également le faire. Nous pouvons donc revenir au HUD. Ensuite, dans la conception de la vue, sélectionnez le panneau de la grille. Et ici, nous pouvons définir le remplissage des emplacements. Nous pouvons donc définir cela sur cinq. Et nous aurons maintenant cinq pixels entre ordre et les enfants de la grille uniforme. Nous allons donc recommencer à jouer. Vous pouvez voir que nous avons maintenant un écart entre ces widgets. Si vous vous souvenez, comme dans notre liste, nous pouvons les transformer en boutons. Actuellement, ce ne sont que des images statiques, mais nous pouvons les transformer en boutons comme nous l'avons fait avec notre liste verticale ici également. Donc, si nous revenons à notre emplacement de grille, nous pouvons envelopper notre superposition ici dans un bouton, donc nous allons envelopper avec le bouton du. Vous pouvez voir que nous avons maintenant un bouton et nous utilisons toujours la bordure comme arrière-plan, vous pouvez voir que le bouton présente en fait cet écart de dix pixels. Donc, si nous voulons nous en débarrasser, nous pouvons simplement sélectionner notre bouton, faire du remplissage et le mettre à 0. Et vous voyez que maintenant notre bouton se dirige vers le bord de notre frontière. Mais nous avons encore un peu de remplissage étrange sur les côtés de notre widget. Et c'est parce que si nous sélectionnons un bouton ici et que nous faisons défiler vers le bas, vous le trouverez dans la section Je crois qu' il est installé. Ouais. Si nous ouvrons le style, vous verrez que nous avons maintenant un rembourrage normal et un rembourrage par pression, car nous en avons 12 ici. Si nous ouvrons ça, vous verrez à gauche et à droite, nous avons 12 motifs et c'est ce qui nous donne ce grand écart. Si nous voulons changer cela pour qu'il soit égal de tous les côtés, nous pouvons simplement changer ce chiffre supérieur ici, disons cinq, et ensuite nous ferons la même chose avec le rembourrage de la presse également. Changez cela à cinq , puis nous compilerons. Vous verrez que nous avons maintenant la bonne quantité de remplissage pour chaque bord de notre widget. Nous avons maintenant ajouté un bouton à notre widget d'emplacement de grille. Nous pouvons faire exécuter du code lorsque vous appuyez sur ce bouton afin que nous puissions faire défiler vers le bas ici, nous avons sélectionné nos boutons. Nous pouvons ajouter des événements onclick, afin de pouvoir l'ajouter. Et quand nous les collectons, nous pouvons exécuter du code. Je vais donc simplement ajouter une chaîne d'impression ici. Maintenant, lorsque nous compilerons ceci et que nous cliquerons sur Jouer, vous verrez que nos emplacements de grille sont mis en surbrillance comme le fait un bouton. Et si j'appuie dessus, vous pouvez voir que cette chaîne d'impression est en cours d'exécution. Désormais, notre panneau de grille uniforme peut également fonctionner dans une boîte de défilement. Si nous sortons des planètes pour frapper la tête vers le hub, alors si nous sélectionnons notre panneau de grille et que nous cliquons avec le bouton droit de la souris, faisons du rap avec et nous voulons la boîte de défilement comme ça. Maintenant, notre boîte de défilement, nous voulons en fait définir une taille, parce que si nous avons une taille maximale, contenu n'affichera jamais cette petite barre de défilement parce qu'elle fera que s'agrandir. Nous voulons donc décocher cette case et choisir une taille. Je vais donc élargir un peu le mien comme ça, mais je vais le raccourcir. Nous affichons donc notre barre de défilement. Ensuite, nous allons compiler. Et nous voulons simplement nous assurer que notre panneau de grille est configuré pour se remplir horizontalement et verticalement. Ensuite, nous allons appuyer sur Play. Nous devrions voir que nous avons notre boîte de défilement verticale ici. Et nous pouvons, si j'appuie sur la touche Maj, nous pouvons faire défiler notre grille comme ça. Maintenant, vous vouliez peut-être ajouter un arrière-plan à cette boîte de défilement. Nous pouvons le faire en utilisant des frontières. Donc, si nous quittons maintenant et revenons à notre HUD, nous pouvons sélectionner notre boîte de défilement et l'envelopper d'une bordure. Nous allons donc faire de la frontière. Notre boîte de défilement est maintenant contenue à l'intérieur de la bordure. Si nous zoomons, vous pouvez voir qu'il y a un peu de ce rembourrage étrange en cours. Donc, si nous sélectionnons notre bordure ici et que nous trouvons le rembourrage, je vais juste régler la mienne vendre à dix. Maintenant, nous allons avoir une belle et grande frontière. Ensuite, nous changerons la couleur. Une fois notre bordure sélectionnée, nous pouvons descendre dans les paramètres du pinceau. Et encore une fois, vous pouvez définir une image ici si vous le souhaitez. Je vais juste utiliser la couleur du pinceau. Et nous pouvons régler cela pour qu'il soit cette couleur rouge ici. Maintenant, lorsque nous compilerons et que nous cliquerons sur Play, vous verrez que nous avons maintenant cette belle couleur de fond que nous avons sélectionnée et que nous pouvons toujours faire défiler notre liste très bien. C'est donc tout pour cette leçon. J'espère que vous en comprenez un peu plus sur ces trois types de widgets. 44. Widgets (glisser-déposer): Salut tout le monde. Dans cette leçon, nous allons examiner les opérations de glisser-déposer à l'aide de widgets. Maintenant, si vous n'avez pas suivi la leçon précédente, nous avons créé cette grille ici. Nous avons ces différents widgets et les avons placés dans une boîte de défilement. Je vous recommande vivement de suivre cette dernière leçon, car nous allons utiliser ces widgets pour notre glisser-déposer. Donc, juste pour commencer, je vais l'agrandir un peu, afin que nous ayons un peu plus d' espace pour travailler. Nous allons donc passer au capot et je vais juste prendre notre boîte de défilement ou, en fait, notre bordure ici, qui va la rendre un peu plus grande comme ça. Ensuite, nous allons passer à la vue Graphique, et je vais également ajouter quelques emplacements supplémentaires. Nous allons donc définir cela sur 19. Nous aurons donc 20 machines à sous cette fois-ci, nous pouvons tester cela, appuyez sur Play. Vous pouvez voir que nous avons tous nos emplacements ici et notre barre de défilement fonctionne également correctement. Maintenant, nous pouvons sortir de l'éditeur de plan X et nous allons accéder à notre widget d'emplacement de grille, puis passer en mode graphique. Maintenant, dans les fonctions, nous avons certaines fonctions que nous pouvons remplacer. Et ce sont des fonctions intégrées à tous les widgets. Comme vous pouvez le voir, ils sont nombreux. Nous n'allons pas tous les examiner parce que certains d'entre eux sont un peu plus avancés. Mais si vous les survolez, vous obtenez une petite info-bulle qui indique de quoi sont responsables ces fonctions. Et il y en a quelques-uns qu' pratique de se familiariser avec. Nous avons donc des choses comme le bouton de la souris enfoncé. Donc, cela va être exécuté si vous appuyez sur le bouton de la souris pendant que votre souris survole le widget et le jeu, nous avons des choses comme les fonctions de glissement ici. Nous allons les utiliser aujourd'hui pour créer un système de glisser-déposer. Il existe également des fonctions pour l'entrée ou la sortie de la souris. Et c'est, ils seront exécutés chaque fois que notre souris survolera notre widget , puis arrêtera de survoler notre widget. Mais nous allons commencer par la traînée et détectée. Et ce sera la fonction qui détectera quand nous maintenons souris enfoncée pendant qu'il est au-dessus de ce widget et que nous commençons à le déplacer. C'est alors qu'il détecte un glissement et que cette fonction sera erronée. Nous allons donc cliquer dessus pour remplacer cette fonction. Et ici, nous avons quelques entrées et sorties. Donc, juste pour couvrir rapidement ces entrées, vous avez ma géométrie et cela vous donne essentiellement des informations sur position de votre souris par rapport à l'emplacement de l'écran et des choses comme ça. Vous ne l'utiliserez probablement pas trop souvent. Mais ce que vous utilisez peut-être beaucoup plus souvent, c'est l'événement pointeur. Cela nous permet d' obtenir des choses comme le bouton de la souris enfoncé par exemple. Et nous pouvons l'utiliser maintenant pour vérifier quel bouton de la souris a réellement été enfoncé lorsque le médicament a été détecté, car nous pouvons réellement faire glisser avec les boutons de la souris à la fois à gauche, à droite et au milieu de la souris. Donc, si nous voulions que ce code ne s'exécute que pour, disons, le bouton gauche de la souris, nous voudrions vérifier si c'est le bouton des clics, le bouton gauche de la souris. Et tout ce que j'ai fait, c'est cliquer sur le petit bouton , puis sur le bouton gauche de la souris pour le régler sur le bouton gauche de la souris. Nous pouvons également utiliser cet événement pointeur pour obtenir le nom du bouton qui a été enfoncé. Nous pourrions donc avoir un bouton d'impact. Et à partir de là, nous pouvons obtenir l'affichage, et nous pouvons obtenir le nom d'affichage de la clé. Et cela nous indiquera exactement quelle touche a été enfoncée lorsque ce médicament a été détecté. Mais pour aujourd'hui, nous allons simplement utiliser le bouton de la souris enfoncé. Il suffit donc de les mettre en surbrillance et de les supprimer, et je vais faire en sorte que ce code ne s'exécute que lorsque nous faisons glisser le bouton gauche de la souris. Je vais donc ajouter un if ici, connectez-le à notre nœud de début ici. Ensuite, nous allons connecter le reste du code à notre vrai. Maintenant que nous sommes prêts à utiliser les notes d' opération Créer un glisser-déposer, nous allons cliquer avec le bouton droit de la souris et rechercher Créer, Créer, faire glisser. Et nous voulons une opération de glisser-déposer comme ça. Et nous allons relier ça au vrai comme ça. Maintenant, nous pouvons utiliser un widget existant, mais je vais créer un nouveau widget qui sera utilisé pour suivre notre souris lorsque nous glisserons et déposerons. Nous allons donc créer un nouveau widget. Nous allons donc compiler et enregistrer cela pour l'instant. Et nous allons cliquer avec le bouton droit dans le navigateur de contenu, accéder à l'interface utilisateur. Faire un plan de widget. Utilisez un widget et faites défiler vers le bas et nous appellerons ce BP. Déplacez le widget comme ça. Et nous ouvrirons ça, peu importe. Je vais juste faire glisser le mien en haut ici comme ça. Maintenant, lorsque nous faisons glisser le curseur depuis notre widget d'emplacement de grille, ce sera le widget qui sera créé et suivra notre souris lorsque nous la déplacerons. Nous allons donc vouloir, disons, une image pour cela. Nous allons donc commencer par une superposition. Donc il va prendre une superposition, mettre ici, puis je vais prendre une image. La raison pour laquelle je commence par une superposition est simplement pour que nous puissions avoir plusieurs widgets, comme une image et du texte par exemple. Nous allons donc également récupérer du texte, ce qui est un zoom avant ici. Maintenant, je vais définir la taille de mon aperçu sur la souhaitée afin que nous puissions voir exactement la taille de notre widget. Je vais changer l' image pour qu'elle dise 64 par 64. On va faire en sorte qu' il soit ce petit visage rouge. Au lieu de cela, nous allons modifier nos textes pour qu'ils soient un peu plus petits, donc nous ferons comme 14. Maintenant, notre image est encore assez. Allons-y. Nous voulons modifier à nouveau sa taille. Nous le changeons en 64 par 64, comme ça, et nous réduirons un peu nos textes , tout de même, 12. Et nous allons le configurer pour qu'il soit simplement écrit, par exemple. Maintenant, je veux que mon texte soit dans le coin droit, donc il utilisera l'alignement à droite. Et ça me semble bien. Encore une fois, il ne s'agit que d'un exemple rapide, vous montrant simplement comment configurer un widget, puis le faire glisser. Nous allons maintenant retourner à notre emplacement de grille. Et dans la zone de glissement détectée, nous devons créer widget que nous venons de créer. Ensuite, nous fournirons cela à notre opération glisser-déposer. Cela va donc les faire avancer un peu. Et nous allons faire glisser et rechercher créer un widget. Et nous voulons définir le joueur propriétaire sur la classe propriétaire. Nous allons donc rechercher le joueur propriétaire, le connecter et définir la classe sur le widget de connecter et définir la classe sur le déplacement que nous venons de créer. Ensuite, nous allons prendre notre valeur de retour de notre note Créer un widget et l' intégrer dans le visuel de glissement par défaut. Et nous allons connecter notre opération Créer un glisser-déposer au nœud renvoyé. Et nous voulons utiliser la valeur de retour pour fournir l'opération au retour. Remarque ici. Maintenant, nous avons quelques épingles supplémentaires sur notre note d'opération glisser-déposer ici nous avons une classe. Je ne vais pas parler de cela parce que c'est principalement du C plus et vous utilisez presque toujours celui par défaut de toute façon, vous pouvez ajouter des balises. Comme dans notre leçon sur les balises, vous pouvez ajouter quelques balises différentes. Et puis à l'autre bout, lorsque nous déposerons notre widget, disons qu'un autre widget sera capable de lire ces balises. Ensuite, nous avons la charge utile. Maintenant, la charge utile peut être n'importe quel objet de votre choix. Cela peut être un acteur ou peu importe. Cet objet peut être utilisé pour stocker des variables ou des fonctions. Et encore une fois, nous aurons accès à cela sur n' importe quel widget sur lequel nous abandonnerons l'opération. Vous pouvez donc, si vous transmettez des informations de ce widget au widget sur lequel nous les déposons. Vous pouvez inclure des balises ou même un objet contenant juste une tonne d'informations que vous pouvez ensuite lire sur cet autre widget. Pour l'instant, nous n'allons pas les utiliser parce qu'ils sont un peu plus avancés. Mais nous avons également une option de pivot. Maintenant, c'est essentiellement là que le widget sera verrouillé lorsqu'il sera sur notre souris. Donc s'il est au centre, cela signifie que notre souris, si elle est restée immobile, le widget sera autour de notre souris avec la souris au centre. Et pendant que nous le faisons glisser, la souris reste toujours au centre de notre mouvement, ce qui pendant que nous nous déplaçons. Et il y a plusieurs options parmi lesquelles vous pouvez choisir. Je vais juste garder mon centre de santé. Ensuite, vous avez quelques décalages pour pouvoir ajouter des décalages de pixels. Vous vouliez peut-être que la souris soit au centre du widget de déplacement, mais vous vouliez ajouter, disons, un décalage de dix pixels vers la gauche. Vous pouvez le faire en utilisant ces valeurs. Actuellement, ce code ne sera jamais exécuté. Et c'est parce que nous devons avertir le widget quand quelque chose est déplacé. Donc pour ce faire, nous devons aller au remplacement et nous devons descendre jusqu'au bouton de la souris enfoncé. Maintenant, cela s'exécutera chaque fois que le bouton de la souris est enfoncé en haut de notre widget. Pour commencer, nous voulons d' abord vérifier quel bouton de la souris a été enfoncé. Nous allons donc faire glisser à partir d'ici et obtenir un bouton d'impact. Et à partir de là, nous pouvons réellement tirer et faire les égaux. Cela nous permet de vérifier si ce bouton est égal au bouton que nous avons défini ici. Je vais donc cliquer sur le petit bouton du clavier ici, puis sur le bouton gauche de la souris. Il le met donc sur le bouton gauche de la souris. Et nous allons ajouter un nœud if. Donc ça ira si c'est comme ça. Maintenant, nous pouvons, si vous le souhaitez, ajouter le code pour lequel vous voulez qu'il s'exécute lorsque le bouton gauche de la souris clique sur notre emplacement de grille. Et le code différent qui s'exécute lorsque nous écrivons un clic de souris, vous pouvez l' ajouter ici afin que nous puissions copier et coller ce nœud, le connecter au bouton d'effet, et Ensuite, nous pouvons le changer en souris blanche. Nous pourrions donc en avoir un autre si, si le bouton gauche de la souris était enfoncé la véritable broche ici fonctionnerait. Et si le bouton droit de la souris a été pressé et la troupe, et ici nous sommes ivres. Ensuite, vous pouvez avoir un code différent en fonction de celui sur lequel vous appuyez. Maintenant, parce que je veux que mon opération glisser-déposer ne s'exécute que lorsque nous laissons le bouton de la souris, nous allons ajouter ce code ici. Nous allons donc faire glisser à partir de true et nous allons rechercher la détection de glissement. Nous voulons détecter un médicament si vous appuyez dessus, alors nous avons besoin des événements de pointeur. Nous allons donc simplement saisir l'événement de la souris et nous connecter au pointeur de m. Ensuite, la touche drogue, qui va cliquer sur le clavier, puis cliquer avec le gauche de la souris pour le définir sur le bouton gauche de la souris comme ça. Et ce nœud va simplement détecter, est-ce que la souris fait actuellement glisser notre widget. Et si c'est le cas, nous voulons le transmettre au nœud renvoyé et la valeur de retour à la valeur renvoyée. Et c'est en fait ce qui va provoquer exécution de la fonction de texte et exécution de tout le code que nous avons ajouté ici. Donc, en revenant vers vous en appuyant sur le bouton de la souris, nous voulons toujours que toutes les broches renvoient une valeur importante pour la manipulation de la souris et d' autres choses de ce genre. Nous allons donc simplement copier une note écrite, la coller ici. Et peut-être que lorsque nous cliquons avec le bouton droit la souris sur le widget, désolé, nous voulons que quelque chose d'autre se passe, donc je vais simplement ajouter disons, print string ici. Nous pouvons l'insérer dans la valeur de retour, puis il le copiera et le collera ici. Donc, s'il ne s'agit ni du bouton gauche ni du bouton droit de la souris, c'est peut-être le bouton central de la souris, par exemple. Nous ne voulons juste pas qu'il se passe quoi que ce soit. Maintenant, nous ne voulons pas laisser ces broches de valeur de retour vides comme ceci. Nous devons fournir un produit manipulé ou non manipulé. Donc, si nous faisons glisser et recherchons handle, maintenant, si nous renvoyons un handle qui indique au moteur, « Hé, nous avons géré l'entrée de la souris ». Ne laissez aucun autre widget s'en occuper. Ne lancez donc plus événements car la souris a été pressée. Nous pourrions donc l'utiliser pour, disons, ce code sur le bouton droit de la souris enfoncé, mais peut-être pas pour le nœud en bas. Nous pouvons donc traîner et faire sans être manipulés. Et cela dit simplement au moteur : « Hé, nous n'avons rien fait avec l'entrée de la souris. Si quelqu'un d'autre souhaite utiliser cette entrée, autorisez-la. Nous utilisons donc unhandled ici. Donc ça devrait ressembler à ça. Il y a maintenant un changement que nous devons apporter au designer. Donc si nous y retournons, si vous vous souvenez, nous avons ajouté un bouton que nous utilisons essentiellement comme arrière-plan qui nous a permis d'appuyer sur ce widget. Nous devons maintenant supprimer ce bouton. La raison en est que les boutons remplacent le code que nous avons ajouté ici. Donc, si nous devions appuyer sur ce bouton ou sur le bouton de la souris, nous ne fonctionnerions pas parce que le widget bouton gère cela à la place. Donc, pour supprimer ce bouton, c'est en fait un moyen très simple de le faire. Nous pouvons simplement cliquer avec le bouton droit sur le widget ici et nous pouvons descendre pour remplacer par, et il y a une option pour remplacer par enfant. Et en gros, cela supprime simplement le bouton , puis nous demandons à la superposition de le remplacer. Nous allons donc remplacer par remplacé par enfant. Et vous pouvez voir que notre bouton a disparu et que nous revenons à la superposition avec tous ses widgets à la place. Maintenant, si vous le souhaitez, vous pouvez ajouter un peu plus de rembourrage à la superposition. Donc je vais juste ajouter cinq ou dix en fait, c' est un peu mieux. Nous avons maintenant un peu plus de remplissage entre la superposition sur la bordure. Maintenant, nous pouvons le compiler et le tester. Nous venons de recevoir un avertissement parce que j'ai supprimé ce bouton. Nous pouvons simplement accéder au graphique d'événements et vous pouvez voir que nous avons toujours un événement à partir de ce bouton Nous pouvons donc simplement le mettre en surbrillance, les supprimer, et nous n'aurons plus d'avertissement. Nous pouvons donc maintenant jouer et tester ça. Nous allons donc cliquer sur Play. Vous pouvez voir que nos widgets sont un peu écrasés parce que les cases de défilement sont un peu trop petites, mais c'est très bien. Nous n'avons pas à nous inquiéter à ce sujet pour le moment. Si nous cliquons et glissons sur l'un d'entre eux, vous pouvez voir que notre widget apparaît réellement. Et j'ai le contrôle de mon appareil photo en ce moment. Mais si j'appuie sur Shift, vous pouvez voir que je peux faire glisser et si je lâche prise, elle disparaît. Actuellement, nous ne faisons rien avec ces informations d' opération glisser-déposer, mais nous pouvons maintenant faire glisser mais nous pouvons maintenant faire glisser l'un de ces widgets. Et il nous donne également notre petit widget de déplacement ici. Et si j'essaie de faire glisser depuis le bouton droit de la souris, vous pouvez voir que les textes de bonjour s'impriment. Il imprime donc hello parce que nous avons ajouté cette chaîne d'impression hello à l'événement press button. Nous avons maintenant la configuration glissante. Nous voulons pouvoir transmettre des informations entre ces différents widgets. Ce que nous allons faire, c'est expirer planètes et retourner à la hanche lente de la grille. Et nous allons créer une nouvelle variable, que nous appellerons « has item ». Et nous allons le laisser en tant que type booléen et nous allons compiler. Ensuite, nous allons nous diriger vers le concepteur et nous allons définir notre petite icône de visage ici pour qu'elle soit masquée si le booléen est faux. Nous allons donc passer à la visibilité en bas, nous allons utiliser un classeur. Nous allons donc créer une liaison. Et ici, nous allons retourner, si l'article est faux, nous renvoyons qu'il est masqué. Nous allons donc faire glisser la valeur du tour. Do a select US a item comme index. Et si l'élément est faux, nous voulons être masqués. Si c'est vrai, nous voulons qu'il soit visible. Nous pouvons donc compiler cela. Maintenant, si nous revenons jouer au jeu, vous pouvez voir que toutes nos petites icônes de visage sont actuellement absentes parce qu'elles n'ont pas d'élément par défaut. Ensuite, nous allons nous diriger vers notre HUD et nous allons modifier le code ici afin que le premier emplacement ait toujours son élément défini sur true. Nous allons donc faire glisser à partir d' ici et faire un F. Nous voulons vérifier si l'indice est égal à 0. Et nous allons nous connecter à la condition. Et si c'est faux, qui relient ça jusqu'ici. Et si c'est vrai, nous voulons obtenir la valeur de retour de notre nœud Créer un widget. Et nous voulons définir un élément et nous allons le définir sur true. Ensuite, nous connecterons l'extrémité au nœud Add child comme ça. Tout ce que nous faisons ici, c'est vérifier c'est le premier index de la boucle ? Si c'est le cas, alors nous définissons it has item sur true. Et si nous pouvons tirer ceci et appuyer sur Jouer, vous verrez que notre première machine à sous a maintenant une petite icône de visage, mais pas les autres. Maintenant, nous voulons vérifier avant de faire l'opération de glissement, le sel que nous faisons réellement glisser contient l'élément. Nous allons donc X hors de la hanche, revenons à notre emplacement de grille, et nous allons aller sur la souris pour appuyer sur, faire glisser les textes, ajouter une nouvelle coche, allons simplement déplacer cela hors du chemin. Nous allons faire glisser et faire si nous voulons vérifier si l'élément est vrai, alors nous autoriserons la création de la coopération sèche. Sinon, nous ne ferons rien. Et nous pouvons également le tester rapidement. Nous allons donc appuyer sur play et j'appuierai sur Shift pour relâcher ma souris. Et vous pouvez voir que si je m'éloigne de ce genre, cela ne crée pas vraiment une coopération sèche. Mais si je m'éloigne de ce slop, c'est le cas. Ensuite, nous devons stocker une référence à l'emplacement d'origine depuis lequel nous avons fait glisser. Parce que lorsque nous le déposons sur un autre emplacement qui ne contient pas l'objet, nous allons devoir mettre à jour l' emplacement précédent qui contenait l'objet pour indiquer qu'il n'a plus cet objet. Nous avons donc besoin d'une référence à cet emplacement d'origine. Pour ce faire, nous allons jouer en dehors du jeu et nous allons passer à la mise Move, puis au graphique de l'événement, et nous allons créer une nouvelle variable. Nous appellerons cet ancien widget. Et nous allons définir son type pour qu'il soit le widget d'emplacement de grille que nous avons créé. C'est donc le même sur lequel nous avons travaillé. Et nous allons le définir sur une référence d'objet. Et nous allons nous occuper du petit œil ici juste l'instance soit modifiable et que nous puissions compiler. Ensuite, nous allons revenir à la grille. Ici, dans les détections de glissement, nous voulons définir cette variable pour le nouveau widget de déplacement que nous venons de créer. Donc ici, nous pouvons faire glisser vers l'extérieur, nous pouvons définir un ancien widget. Nous voulons définir cet ancien widget sur self parce que nous nous définissons comme étant l'ancien widget. Nous allons donc nous éloigner de cela et faire nous-mêmes. Et nous allons connecter ça comme ça, puis nous allons compiler. Nous avons donc besoin d'une fonction qui s'exécutera lorsque nous relâcherons ou ferons glisser le curseur au-dessus de notre emplacement de grille. Nous allons donc nous diriger vers le remplacement et nous voulons trouver la fonction drop ici et nous allons la créer. Vous pouvez maintenant voir que nous avons les mêmes entrées que celles que nous avions pour nos fonctions précédentes, mais nous en avons une nouvelle appelée operation. Et ce sont essentiellement toutes les informations que nous avons fournies à partir de l'on drag détectent toutes les informations que nous fournissons ici auxquelles nous pouvons accéder maintenant dans le drop. Donc, si je fais glisser et que je recherche un visuel de glissement, vous pouvez voir que je peux obtenir une référence au visuel de médicament, et c'est une référence au widget que nous avons branché ici. En utilisant cela, nous pouvons faire glisser le coût vers le widget de déplacement, car le nôtre est un widget de déplacement. Si vous vous souvenez quand nous l'avons défini dans le médicament, c'est le widget de déplacement. Nous allons donc payer pour cela. Et en utilisant ce coût, nous pouvons réellement accéder à l' ancien widget, obtenir l'ancien widget. Cela nous donne une référence au widget que nous avons initialement fait glisser. Maintenant, nous pouvons également accéder aux balises et à la charge utile afin pouvoir sortir de l'opération et obtenir des balises. Cela nous donne la variable tags ainsi que les plaquettes. Si nous obtenons une charge utile, nous pouvons également ajouter l'accès à la référence d'objet que nous pouvons fournir ici dans le nœud Créer une opération de glisser-déposer. Pour en revenir à la fonction On drop, nous pouvons supprimer ces variables car nous n' allons pas les utiliser réellement. Ensuite, il va définir l'ancien élément des widgets. Il recherchera donc l'ensemble a un élément. Nous devons définir cela sur false car il n'a plus l'élément dont nous avons besoin pour définir R has item sur true, ainsi que item. Nous allons régler ça sur vrai, comme ça. Et nous connecterons cela à la valeur de retour qui prendra la valeur de retour parce que nous avons traité notre code. Donc, ce que nous allons faire, c'est vrai, et nous voulons relier cela à notre coût ici. Ensuite, nous pouvons compiler ceci et le tester. Donc si nous allons sur la carte, appuyez sur Play, je vais appuyer sur Shift pour relâcher ma souris. Si je commence à faire glisser, vous pouvez voir que notre opération de glisser-déposer fonctionne. Si je le relâche sur une autre chaussette et que je vois que cette fente est maintenant visible et que son élément est défini true et que le précédent est réglé sur false. Nous pouvons le faire avec n'importe lequel de nos emplacements ici, en faisant glisser cette nouvelle opération vers les autres widgets. Si je prends mon widget et que je le relâche ici, disons par exemple sur ces autres widgets, vous pouvez voir que rien ne se passe réellement car nous n'avons pas configuré de fonctions de dépôt pour ces autres widgets. Donc rien ne se passera quand nous libérerons l' opération abandonnée par-dessus eux. C'est donc à peu près tout pour cette leçon. Nous espérons que vous comprenez maintenant comment créer des opérations de glisser-déposer avec des widgets et également comment transférer informations d'un widget à un autre à l'aide du visuel glisser-déposer ou la référence de l'objet de charge utile. 45. Les plans d'animation (aperçu): Salut tout le monde. Dans cette section du cours, nous allons examiner les plans d'animation. Maintenant, Animation Blueprint. Alors, comment pouvons-nous indiquer à un maillage squelettique quelles animations nous voulons qu'il joue ? Maintenant, un maillage squelettique est généralement un maillage qui a été fixé à un squelette dans un programme de modélisation 3D. Ensuite, une fois dans le moteur, nous pouvons faire jouer une animation à ce squelette , ce qui entraîne l'animation du maillage. Dans cette leçon, je vais juste vous présenter un aperçu rapide de l'éditeur de plan d' animation, ainsi que de la configuration de l'animation fournie avec le modèle à la troisième personne. Avant de commencer, certains d'entre vous ont peut-être suivi les leçons précédentes. Tout ce que j'ai fait ici, c'est créer un nouveau modèle à la troisième personne. Nous avons donc pris un bon départ pour cette section du cours. Pour commencer, nous allons nous diriger vers le plan d'animation, qui se trouve dans le dossier du personnage, puis les mannequins, les animations. Vous pouvez voir que nous avons un plan d'animation de l'argent et de Quinn. Dans cette leçon, nous allons utiliser le plan d'animation de l'argent. Et la raison en est que le plan d'animation de Quinn utilise en fait celui de l'argent comme plan parent. Donc, toutes les fonctionnalités se trouvent réellement à l'intérieur de notre plan d'animation monétaire. Nous allons donc ouvrir ça. Et je vais juste faire glisser le mien jusqu'à la barre supérieure ici comme ça. Maintenant, vous pouvez voir que je joue actuellement un éditeur, donc je vais simplement cliquer sur le petit bouton d' arrêt ici pour arrêter cela. Nous avons maintenant ouvert notre plan d'animation. Vous pouvez voir que nous avons le graphique des événements. Si le vôtre n'est pas ouvert, vous pouvez toujours l' ouvrir en haut de l'onglet. Vous pouvez également double-cliquer sur le graphique des événements ici pour ouvrir notre animation. Le graphe d'événements est identique à tous les autres graphes d'événements que vous avez utilisés et aux autres plans. Nous avons notre code ici dans notre graphique d'événements. Nous avons notre panneau My Blueprint où nous pouvons créer et trouver nos fonctions, variables, répartiteurs d'événements et macros. Maintenant, l'objectif principal de notre graphique d'événements dans Art Animation Blueprint est de définir des variables qui sont ensuite utilisées dans notre graphique Anim. Pour l'ouvrir, nous allons aller dans le panneau My Blueprint ici et double-cliquer sur I'm graph et cela nous mènera à notre graphique Anim. Cela a en fait beaucoup changé depuis la version quatre d'Unreal Engine. Vous remarquerez peut-être quelques différences si vous avez déjà utilisé le moteur ML, mais nous allons commencer par aller à la machine d' état de locomotion ici. Nous allons donc double-cliquer dessus. Vous pouvez voir que nous avons un état et c'est là que nous pouvons définir des animations à jouer. Nous avons donc un état inactif, puis un état d'exécution avec barre oblique marchée. Si nous ouvrons notre état inactif, vous pouvez voir que nous avons ici une animation utilisant un lecteur de séquence d'animation qui produit en fait une animation inactive. Nous pouvons voir quelle animation est réellement lue par le nom du nœud en haut ici. Ou si nous le sélectionnons, nous pouvons passer à la séquence et survoler l'entrée et vous pouvez voir qu'il indique MM, trait de soulignement inactif. Nous pouvons également cliquer sur ce petit bouton de navigation dans le navigateur de contenu qui nous mènera à l'animation qui y est utilisée. Nous pouvons voir que c'est l'animation qui est réellement jouée chaque fois que nos personnages sont dans cet état d'inactivité. Maintenant, en revenant à notre machine de locomotion, vous pouvez voir que nous pouvons cliquer sur la locomotion ici dans la barre du haut. Maintenant, ramène-nous là-bas. Nous avons également un état de marche slash run. Maintenant, si nous double-cliquons dessus pour l'ouvrir, vous pouvez voir que nous avons un type de nœud différent qui est utilisé pour lire une animation, monsieur. Il s'agit d'un nœud blend space qui nous permet saisir une variable comme un float, par exemple, et de faire jouer différentes animations en fonction de cette valeur de flux différente. Donc, si nous sélectionnons ce nœud et que nous nous dirigeons vers la séquence ou l'option blend space, désolé, nous pouvons voir qu'il est actuellement réglé sur BSIMM walk run, et c'est le blend space pour notre marche et notre course animations. Nous pouvons y accéder dès maintenant en cliquant sur le bouton Browse to Content (Parcourir le contenu). Cela nous mènera au Blend Space. Et si nous ouvrons cela ici, les espaces de mélange nous permettent maintenant d'ajouter plusieurs animations ensemble et les faire passer en douceur entre elles à l'aide d'une variable. Vous pouvez donc voir ici que nous avons une valeur de vitesse commençant à 0. Il s'agit de l'animation qui sera lue lorsque notre valeur de vitesse est égale à 0. Et si je maintiens la touche Ctrl enfoncée et que je commence à déplacer ma souris, vous pouvez voir que la vitesse de prévisualisation augmente réellement et nous commençons à augmenter la vitesse de marche de nos animations jusqu'à ce point. Maintenant, ce point ici est actuellement défini sur la marche avant. Vous pouvez donc voir quand je déplace le point d'aperçu ici, nos personnages jouent une animation en marche avant. À mesure que je l'augmente, nous commençons à obtenir cette animation en cours d'exécution. Et comme nous arrivons à la fin, vous pouvez voir qu'il est actuellement réglé sur la course, et c'est ce que nous jouerons lorsque nous serons à la vitesse 500. Nous pouvons donc l'utiliser pour effectuer une transition en douceur entre les animations de marche et de course. Lorsque nous revenons à notre plan d'animation, contrôlant l'animation qui est jouée dans notre camp, notre espace de mélange à l'aide cette variable de vitesse sol qui est ensuite connectée à cet espace de fusion nœud. Et en fonction de la vitesse que nous avons, produira une animation différente de notre pose de sortie ici. Revenons à notre graphique Anim. Et je vais juste cliquer dessus. Saisissez la barre du haut ici. Toute animation produite par notre locomotion est ensuite entrée dans cette caisse de locomotion. Maintenant, cela enregistre l'animation actuelle produite par notre locomotion, afin que nous puissions l'utiliser plus tard. En revenant à la machine d'état de locomotion, vous pouvez voir que nous avons ces flèches qui vont entre nos deux états. Maintenant, ce sont des règles de transition et c'est ainsi que nous vérifions si nous devons être en état d'inactivité. Ou l'état de marche, slash run. Donc, si nous survolons une variable, vous pouvez voir que nous avons cette variable qui apparaît dans l'infobulle. Et cela signifie simplement que cette règle est définie sur la variable should move. Donc, si cette variable est vraie, alors nous passerons de notre état inactif à la course slash. Et puis si je passe la souris sur celui du bas ici, c'est la même chose qui devrait déplacer la variable mais avec un non. Donc si cette variable est fausse, alors nous allons revenir de Walk slash run à l'idole. Et nous pouvons double-cliquer dessus pour consulter le code. Vous pouvez voir qu'il s'agit simplement d'une variable insérée dans le résultat. Ensuite, nous pouvons faire la même chose avec le code du rôle qui passe de l'état de marche à l'état inactif. Donc, si nous double-cliquons dessus, vous pouvez voir que nous avons la même variable avec un nœud nœud et qu'elle est ensuite insérée dans le résultat. Maintenant, cette variable should move est définie dans notre graphe d'événements en utilisant du code et nous verrons cela un peu plus tard. Mais si nous revenons à la locomotion en utilisant ces deux états et ces deux règles, nous choisissons si notre personnage doit jouer une animation inactive ou une animation de marche ou de course. Nous sortons ensuite cette valeur de l'état de locomotion vers le caissier de locomotion. Nous pouvons donc utiliser cette animation plus tard. Maintenant, dans notre graphique Anim ici, si nous allons sur le côté droit, nous avons ce nœud de pose en sortie. Maintenant, c'est l'animation que nous allons réellement voir dans le jeu. Donc, quelle que soit l'animation qui se connecte ici nous verrons ce que nous verrons lorsque nous jouerons à notre jeu. Actuellement, ces deux nœuds ne sont connectés à aucune de ces chaînes. Mais si nous ouvrons notre machine d'état principale ici, maintenant notre machine d'état principale est exactement la même que notre machine d'état de locomotion. Ils font la même chose. C'est juste que nos états principaux, la machine à états a différents états initiés. Et si nous regardons l'état de locomotion ici, si nous double-cliquons dessus, vous pouvez voir que nous utilisons une locomotion cash pose. Voici la position de trésorerie que nous avons définie dans notre graphique Anim. Donc, si vous regardez ici, nous le définissons ici, puis nous l'utilisons dans cet état de locomotion dans notre machine d'état principale. C'est ainsi que ces nœuds sont connectés au reste du code. Maintenant, en revenant à la machine d'état principale, vous pouvez voir que nous avons certains états ici qui ne sont pas réellement connectés à notre état en bas. Maintenant, la raison en est que dans Unreal Engine 5, nous avons ces nouveaux alias d'état, nœuds, qui nous permettent de connecter états sans avoir réellement de règles qui s'y connectent. Nous avons maintenant deux alias ici. Les deux tombent et les deux atterrissent. Vous pouvez maintenant reconnaître qu'il s'agit d'un alias grâce la petite icône sur le côté gauche. La façon dont cela fonctionne est si je sélectionne les deux alias de chute, par exemple, vous pouvez voir ici sur le panneau de droite, nous avons la locomotion sur les états terrestres, la tectonique. Vous allez maintenant avoir une case à cocher pour chaque état existant dans votre machine à états. Nous en avons donc un pour la locomotion, qui est ici, saut qui est là-haut, boucle complète qui est là, puis l'atterrissage qui a ici. Maintenant, si nous avions d'autres États, ils seraient également répertoriés. Maintenant, parce que la locomotion et le terrain des deux textes sur ce nœud exécuteront toutes les règles qui y sont connectées pendant que nous sommes dans la locomotion ou ces états de terrain. qui signifie que ces deux règles seront appliquées à chaque image si nous jouons actuellement en état de locomotion ou en état terrestre. Et il en va de même pour le nœud terrestre R2 ici. s'agit également d'un alias et vous pouvez voir que Il s'agit également d'un alias et vous pouvez voir que le saut pour boucle est activé, ce qui signifie que si nous sommes dans l'état saut ou l' état pour boucle, alors cette règle s' exécutera à chaque image. Et si à un moment donné cette règle devient vraie alors que nous sommes dans l'un ou l'autre de ces États. Les deux terres nous feront ensuite passer de l'un ou l'autre de ces états à notre paysage. Et c'est ainsi que ces États ici sont connectés aux États d'ici. Maintenant, juste pour couvrir les règles qui se passent ici pendant que l'état de locomotion est en exécution et cela fonctionnera chaque fois que notre personnage sera inactif, marchant ou courant. Et c'est parce que, si vous vous souvenez, nous utilisons ce cache de locomotion, qui a été défini par la machine d'état de locomotion. Et cela a notre ralenti et nos animations de marche slash run là. Donc, pendant que cet état de locomotion est en cours d'exécution, les deux qui tombent exécuteront toutes ses connexions pour voir si l'une de ces règles est vraie. Et si à n'importe quel moment nous commençons à tomber, chute devient vraie, nous passerons de la locomotion à la boucle avant. Et si nous tombons et qu'il y a une vitesse supérieure à 100 dans la z. Donc, si nous tombons au-delà d'une certaine vitesse, utiliserons l'état d'animation de saut au lieu d' aller simplement dans la boucle for. Et puis nous avons une règle qui se situe entre notre saut et notre boucle for. Et cela ne fait que vérifier, est-ce que notre animation de saut est presque terminée. Et si c'est le cas, cela nous fera passer de notre saut à notre boucle for. Et la raison pour laquelle il le fait est parce que nous avons coché cette option ici, qui vérifie simplement l'animation que nous vérifions. J'ai presque fini. Si c'est le cas, nous passerons à l'état que nous recherchons. Maintenant, à tout moment où nous jouons sautons ou une animation en boucle for reste. Ce sera également en cours d'exécution pour atterrir. Il va vérifier, est-ce que tomber est faux ? Si c'est le cas, cela nous fera passer d'Eva, de la boucle for, ou du saut à la terre ferme, puis de la terre à notre locomotion. Ce sont donc les bases du fonctionnement réel de notre machine à états principaux . Revenons maintenant à notre graphique Anim. Afficher l'animation que nous sommes train de lire dans notre machine d'état. Donc, si nous sommes juste dans notre état de locomotion, cela produira notre animation de locomotion. Si nous devions dire « tomber », cela jouerait notre boucle for. Ce serait donc une sortie qui irait dans ceci, qui est un slot de montage. Maintenant, nous allons avoir une leçon complète sur les montages à l'avenir. Mais ce n'est qu'une machine à sous qui nous permet de jouer un montage. Montage nous permet de superposer une animation au-dessus de nos animations de mouvement. Mais si aucun montage n'est en cours de lecture, tout ce qui se passera c'est que nos animations de mouvement iront dans la fente de montage. Il vérifie si un montage est en cours de lecture. Si ce n'est pas le cas, il passe simplement et aucune modification n'est apportée. À moins qu'un montage ne soit joué. Ensuite, cela passe de notre emplacement de montage à notre plate-forme de contrôle. Maintenant, je ne vais pas trop m'attarder sur la plate-forme de contrôle dans ce cours uniquement parce que c'est ce cours uniquement parce que c'est un système massif à lui seul, qui pourrait avoir un parcours complètement séparé, mais nous pouvons voir quel appareil de contrôle est en cours d'exécution. Nous allons donc sélectionner le nœud. Et dans le panneau Détails, vous pouvez voir que nous avons une classe de plate-forme de contrôle. Ici. Il est réglé sur le pied de base du mannequin IK. Et nous pouvons le trouver en cliquant sur le navigateur Browse to asset and content. Et nous pouvons ouvrir ce contrôle Rick, et vous pouvez voir tout le code qui est exécuté par cette plate-forme de contrôle. Encore une fois, je ne vais pas passer par tous ces nœuds car Control Rig est un système assez avancé. Mais en gros, cela fait que cela place notre pied à notre place. Je peux vous donner un exemple rapide de ce que je veux dire. Nous allons donc jouer un éditeur. Et si je cours sur cette rampe et que j'en mets une sur mes pieds, vous pouvez voir que le pied augmente en fait sa hauteur parce que la hauteur du sol est plus élevée à ce moment-là. C'est juste un bref aperçu de ce que fait le gréement de contrôle dans ce plan ici. Et tout ce code se passe à l'intérieur de cette note de la plate-forme de contrôle ici. Il prend donc en compte nos animations de mouvement, il applique ces nouvelles positions de pied à la hauteur du sol. Ensuite, il l'affiche dans nos publications de sortie ici pour notre animation finale que nous voyons dans le jeu. Maintenant que nous avons parcouru le graphique Anim, vous avez peut-être remarqué que certaines variables telles que R est variable en baisse ici, toute la vitesse sol à l'intérieur de l'état de course de la barre oblique marchée. Ce ne sont que des variables normales qui ont ensuite été définies dans notre graphique d'événements. Nous pouvons donc les utiliser dans notre graphique Anim. Donc, si nous allons maintenant sur le graphique d'événements en cliquant simplement dessus dans le panneau Mon plan directeur, comme vous pouvez le voir, nous indiquons certaines des variables que nous utilisons dans le graphe Anim. Nous avons donc notre vitesse sol ici, c' est-à-dire simplement obtenir la vitesse de notre composant de mouvement. Ensuite, nous le convertissons en flotteur et le réglons sur la vitesse sol. Nous avons une autre variable appelée should move, qui détermine si nous devons être un état d'animation idole ou notre état d'animation walk slash run. Et puis nous avons r est variable descendante ici, qui utilise simplement les composants du mouvement est variable descendante intégrée. Ensuite, nous prenons cela et le définissons sur la variable est en baisse. Et tout cela est défini par l'événement ici appelé animation de mise à jour du plan d'événement. Cela exécutera chaque image et à jour ces variables comme il se doit. Ensuite, nous avons l'animation d' initialisation du plan directeur. Maintenant, cela sera exécuté de la même manière que les notes de début de jeu. Cela s'exécutera donc lorsque le jeu démarrera ou lorsque notre plan d'animation sera créé. Cela obtient juste l'acteur propriétaire, ce qui est généralement le plan du personnage. Nous provoquons la variable de caractère du plan de caractère. Ensuite, nous obtenons également son composant de déplacement de caractères et le définissons comme variable afin de pouvoir l'utiliser ici pour définir ces variables. Maintenant, nous vous montrons où nous définissons plan d'animation que nos personnages utilisent. Nous allons nous diriger vers le personnage ThirdPerson. Pour ce faire, nous allons aller dans le navigateur de contenu, puis dans les plans à la troisième personne ouvrirons le plan de personnage de troisième personne. Ensuite, nous pouvons sélectionner le composant de maillage ici dans le panneau Composants. Et si nous double-cliquons dessus, cela nous mènera à la fenêtre d'affichage. Maintenant, surchauffez et le panneau Détails. Tant que le mode animation est configuré pour utiliser le plan d'animation, vous devez avoir cette option Classe Anime. Et vous pouvez voir ici qu'il est actuellement réglé sur les huit plans d'animation BP Quinn. Donc, si vous souhaitez modifier cela, vous pouvez simplement cliquer sur le menu déroulant ici et trouver votre nouveau plan d'animation. Il y en a plusieurs qui sont intégrés au moteur, mais vous n'en utiliserez généralement aucun. Vous pouvez utiliser, par exemple, notre plan d'animation de l'argent ou celui de Quinn ici. Enfin, en guise de remarque, peut-être qu'à l'avenir, vous créerez un personnage PNJ qui ne se déplace nulle part, et vous voulez juste qu'il joue une seule animation. Vous pouvez le faire en sélectionnant le mode animation ici pour utiliser la ressource d'animation. Ensuite, vous pouvez définir une seule animation que vous souhaitez qu'elle joue sans avoir besoin d'un plan d'animation complet. Mais pour les personnages des joueurs, vous voudrez presque toujours que cela soit configuré pour utiliser un plan d'animation. Et vous devez vous assurer que la classe Anime est bien définie sur votre plan d'animation. Donc pour nous, c'est l'ABP Quinn ici. C'est donc tout pour cette leçon. Ne t'inquiète pas trop si tu ne comprends pas tout. Dans nos prochaines leçons, nous allons examiner chaque système de manière beaucoup plus détaillée. 46. Les plans d'animation (montages): Salut tout le monde. Dans cette leçon, nous allons examiner les montages d'animation. Montages d'animation, ou comment nous indiquons notre plan d'animation, l'animation spécifique que nous voulons qu'il joue. Par exemple, si votre personnage devait recharger ou balancer une arme de mêlée, vous utiliseriez des montages d'animation pour jouer ces animations. Dans cette leçon sur certaines de nos futures leçons, je vais utiliser des animations qui ne sont pas incluses dans le modèle à la troisième personne. Dans la description de la classe, je mettrai un lien pour télécharger les animations que j'utiliserai dans cette leçon et dans nos prochaines leçons également. Une fois que vous avez téléchargé et extrait ces fichiers, vous devriez vous retrouver avec un dossier qui ressemble à ceci. Nous allons maintenant ajouter ces fichiers à nos projets. Nous allons donc cliquer dans l'éditeur ici, cliquer avec le bouton droit sur notre dossier de contenu et aller sur Afficher dans l'Explorateur. Cela nous montrera un dossier de contenu. Et nous voulons déplacer les animations de nos leçons ici le dossier de contenu. Vous pouvez maintenant voir que cela s'affiche dans notre navigateur de contenu. Maintenant, si nous l'ouvrons, si les animations ne sont pas là, ne vous inquiétez pas. Il vous suffit de fermer puis de rouvrir le projet. J'ai donc redémarré mon projet. Et vous pouvez voir à l'intérieur des animations de leçon que toutes nos animations s' affichent correctement maintenant. Nous allons maintenant n' utiliser qu'une seule de ces animations dans cette leçon. Ça va être l'animation de rechargement. Donc, si dans le dossier Animations des leçons vous recherchez reload, vous verrez que nous avons une animation de rechargement. Nous allons maintenant l'utiliser pour créer un montage. Pour ce faire, nous allons cliquer avec le bouton droit de la souris et monter dans Créer, puis sélectionner Créer et un montage. Et nous allons simplement garder le même nom. Je vais donc simplement appuyer sur Entrée. Nous avons maintenant un nouveau montage. Maintenant, si nous ouvrons notre montage d'animation, vous pouvez voir qu'il ressemble assez à une séquence d'animation. Je vais juste faire glisser le mien en haut comme ça. Maintenant, la principale différence est que nous avons ce slot de montage et un plan de montage est la façon dont nous indiquons au plan d'animation quel montage nous voulons jouer. Donc, si nous nous dirigeons vers notre plan d'animation d' argent, si vous vous souvenez que c'est dans les personnages, débarrasserons de cette animation de mannequins de recherche et ouvrirons un argent BP. Ensuite, dans notre graphique Anim, si vous vous souvenez, nous avons cet emplacement et il est actuellement défini sur l'emplacement par défaut. Maintenant, si nous jetons un coup d'œil à notre montage de rechargement, il est également défini sur le swap par défaut. Cela signifie que si nous devions jouer notre montage de recharge, I Animation Blueprint serait capable de le lire. Actuellement, notre montage et notre emplacement de montage à l'intérieur de notre plan, ou les deux utilisant la même pente. Mais si nous sélectionnons l'emplacement ici dans le panneau Détails, vous pouvez cliquer sur le bouton vers le bas et voir qu'il existe en fait de nombreux types différents inclus dans le modèle à la troisième personne. Maintenant, si nous devions changer cet emplacement pour utiliser un autre emplacement et jouer, notre montage. Montage ne jouerait plus car il aurait une machine à sous différente de la machine à sous ici. Maintenant, la principale raison pour laquelle nous pouvons avoir plusieurs emplacements est que vous pouvez réellement faire jouer plus d'un montage à un personnage en même temps. Mais chaque slot ne peut jouer qu'un seul montage. C'est pourquoi nous pouvons avoir plusieurs emplacements et assigner des montages à différents emplacements. Mais pour cette leçon, nous allons simplement nous en tenir aux emplacements par défaut. Assurez-vous donc de conserver ce jeu de diapositives sur l'option par défaut hip. Et de retour dans notre montage , assurez-vous que le slot par défaut et le nom de l' emplacement sont cochés ici. Nous allons maintenant écrire code pour lire notre montage. Nous allons donc nous diriger vers le navigateur de contenu, aller dans le dossier du plan de la troisième personne, puis ouvrir le plan ThirdPersonCharacter. Et ici, nous pouvons ajouter un peu de code qui indique à notre maillage de personnage de jouer un montage. Nous allons donc faire un clic droit. Je vais rechercher l'événement d'entrée un, et nous allons créer cette entrée. Ensuite, nous allons récupérer notre composant de maillage ici, faire glisser et rechercher « play montage ». Et cela va nous créer ce nouveau nœud ici. Je vais maintenant vous présenter certaines des entrées et sorties de ce nœud. Pour commencer, nous avons un montage à jouer. C'est ici que nous lui indiquons quel montage nous voulons jouer. Nous allons donc sélectionner notre montage de recharge ici. Nous avons le dramaturge. Donc, si ce paramètre est défini sur un, l'animation sera lue à sa vitesse normale. Mais si nous devions définir pour dire que l'animation jouerait deux fois plus vite. Ensuite, nous avons la position de départ. Cela vous permet de définir l'heure exacte à laquelle vous souhaitez que le montage commence à jouer. Par exemple, si vous aviez un montage de 10 secondes et que vous vouliez commencer à deux secondes, vous devez définir la position de départ sur deux. Ensuite, nous avons la section de départ. Je vais maintenant expliquer cela un peu plus tard dans la leçon. Nous allons donc sauter cela pour l'instant. Ensuite, pour les sorties, nous avons la sortie d'exécution normale. Cela s'exécutera dès que le nœud aura fini de fonctionner. Alors nous n'avons pas terminé. Maintenant, cela s'exécutera lorsque l'animation sera terminée. Ensuite, on passe au blend out. Ce qui est cool avec les montages, c'est qu'ils se fondent dedans et dehors quand on les joue. Vous obtenez ainsi une transition en douceur entre l'animation originale que vous étiez en train de jouer et le montage. Ensuite, lorsque le montage sera presque terminé, il reviendra à votre animation d'origine. Et ce fondu s'exécutera lorsque l'animation commencera à sortir. Couvrez-en un peu plus sur les transitions dans un instant, mais en passant à autre chose, nous sommes interrompus. Et cela fonctionnera si nous annulons ou arrêtons la lecture de notre montage. Et j'expliquerai comment nous pouvons procéder un peu plus tard dans la leçon. Enfin, nous avons quelques sorties d'exécution de notification et un nom de notification. Je ne vais pas couvrir les notifications dans cette leçon parce que nous aurons en fait une leçon complète juste pour les notifications. Nous allons donc sauter cela pour l'instant. Nous allons maintenant terminer la configuration notre code pour lire réellement votre animation. Je vais créer une nouvelle variable. ce que nous appellerons le rechargement. Je vais juste l'utiliser pour que si nous spammons la seule entrée, elle ne redémarre pas notre montage encore et encore. Ce que nous allons faire, c'est vérifier d' abord que le rechargement est vrai. Et si ce n'est pas vrai, alors nous réglerons le rechargement sur true comme ça. Et nous allons connecter cela au montage de jeu. Ensuite, nous voulons définir le rechargement sur false. Lorsque l'IVR est terminée, la lecture de l'animation de rechargement est terminée ou elle est interrompue comme ça. Maintenant que nous sommes prêts à tester cela, nous allons compiler et cliquer sur Play. Et maintenant, quand j'appuie sur l'un mes claviers, rien ne se passe réellement. La raison en est que lorsque nous avons importé dans nos animations de leçon, elles étaient livrées avec leur propre squelette. Maintenant, même si ces deux squelettes sont exactement les mêmes, il y a maintenant deux éléments de squelette dans notre projet, un que nos personnages utilisent, un autre que nos nouvelles animations utilisent. Si nous expirons, utilisez l'éditeur simple et allez dans les animations de la leçon, ouvrez le mannequin, puis allez dans les maillages. Vous verrez que nous avons un mannequin SK. Maintenant, c'est le squelette ou moins que l'animation. Donc en utilisant, mais si nous allons dans le dossier Personnages, puis dans les maillages des mannequins, vous verrez que nous avons un autre mannequin SK. Maintenant, c'est le squelette que sont les maillages de caractères utilisant. C'est pourquoi nos animations sur le jeu, mais il y a une nouvelle fonctionnalité et des sous-vêtements sur Jim Five appelés squelettes compatibles. Donc, si nous allons dans le squelette de notre dossier personnages, ouvrez-le, allez dans les fenêtres et nous voulons trouver les détails de la ressource et nous en occuper. Vous pouvez maintenant trouver ici des squelettes compatibles. Nous allons donc ajouter une nouvelle entrée. Nous allons sélectionner le menu déroulant ici. Nous allons trouver le squelette qui se trouve dans l'animation de notre leçon. Donc, si vous survolez, vous pouvez voir que cela dit moins que les animations, mannequins coupés coupent les maillages. Nous allons donc cliquer sur celui-ci. Ensuite, nous allons économiser. Maintenant, toutes les animations qui fonctionnent pour notre leçon. squelette d'animation fonctionnera avec notre personnage. Donc si nous revenons au niveau ici, appuyez sur Play. Maintenant, quand j'appuie sur un, vous verrez nos montages jouer très bien. Si j'en spamme un, vous pouvez voir qu'il ne jouera pas à nouveau le montage tant que nous n'aurons fini de jouer le montage original. Et c'est à cause du booléen que nous avons configuré pour empêcher cela. Vous remarquerez peut-être que pendant que nous jouons le montage, ou que les pieds ne bougent pas avec notre corps. Tout joue ce montage. Maintenant, dans notre prochaine leçon, nous verrons comment mélanger les os, ce qui nous permet de séparer les parties du corps les unes des autres. Ainsi, par exemple, pendant que nous jouons notre animation de rechargement, nous pouvons avoir les jambes. Ils seront en mesure de jouer les animations de mouvements et nous en parlerons dans la prochaine leçon. Une autre chose que vous remarquerez peut-être est que si nous allons sur la rampe ici, vous pouvez voir que mes jambes se dressent sur la rampe. Et si j'appuie sur une, vous pouvez voir que les jambes restent relevées et la rampe, même si ce montage occupe tout le corps. La raison pour laquelle cela se produit est parce que notre montage ici est joué avant que le rig de contrôle ne soit appliqué. Le montage est donc joué ici. Ensuite, nous appliquons le système de contrôle, qui traite du placement du pied, puis nous sortons la pose finale. C'est pourquoi nos animations de mouvement sont prises en charge par le montage, mais pas le placement des pieds. Donc si je devais déplacer mon emplacement par défaut ici pendant un moment, deux, devant mon appareil de contrôle comme ceci. Et connectez tout ça. Maintenant, quand je compile, appuyez sur Play, si je cours sur la rampe, vous pouvez voir que le placement de mon pied fonctionne toujours, mais si j'appuie sur un, vous pouvez voir qu' il cesse de fonctionner pendant que je joue un montage. Il va donc simplement revenir à notre plan d'animation et définir cette sauvegarde comme elle était. Il va donc simplement avancer ici, connecter ceci, et connecter notre sauvegarde de montage ici. Comme ça. Si vous avez déjà voulu ajouter un nouvel emplacement de montage à votre graphique d'animation, vous pouvez simplement cliquer avec le bouton droit de la souris sur la recherche d'emplacement, faire défiler vers le haut ici. Vous pouvez utiliser l'emplacement par défaut de l' emplacement, puis le sélectionner. Et si vous souhaitez utiliser un nom d'emplacement différent, vous pouvez le modifier ici. Mais pour l'instant, nous pouvons simplement supprimer ce nœud et compiler notre graphique d'animation. Désormais, les montages ont également d'autres fonctionnalités. Nous pouvons ajouter plusieurs animations à un même montage. Par conséquent, ici, nous avons le navigateur d'actifs. Si vous n'avez pas le vôtre, vous pouvez toujours accéder à Windows et utiliser le navigateur de ressources ici. Maintenant, à l'aide du navigateur de ressources, nous pouvons faire glisser des animations à utiliser avec notre montage. Donc, par exemple, nous pourrions utiliser le fusil qui tourne au ralenti. Nous allons juste le faire glisser. Vous pouvez maintenant voir que nous avons les deux animations dans notre montage. Actuellement, ces deux sections sont configurées pour utiliser la section par défaut. Ce qui va se passer, c'est le rechargement ou la lecture du fusil, puis notre animation de fusil au ralenti sera lue. Mais en utilisant des sections, nous pouvons diviser notre montage en différentes sections et les lire différemment. ce faire, nous pouvons cliquer avec le bouton droit de la souris sur la barre en haut ici et cliquer sur Nouvelle sélection de montage. Et nous pourrions appeler cela une section en boucle. Maintenant, nous obtenons cette ligne violette et nous pouvons choisir où commence cette section. Donc, si je mets ceci ici, notre section maintenant pour la section boucle est toute cette zone ici. Ensuite, notre section par défaut est toute cette zone ici. Maintenant, tout ce qui va se passer, c'est notre section par défaut sera lue , puis notre section boucle jouera. Mais si nous nous dirigeons vers les sections de montage ici, vous pouvez voir que nous avons quelques contrôles sur façon dont nous pouvons lire ces différentes sections. Encore une fois, si vous n' avez pas ces sections de montage, vous pouvez aller dans Windows et cocher cette case ici. heure actuelle, vous pouvez voir que la section par défaut est en cours de lecture . Ensuite, il passera à la section suivante, qui est notre section boucle. Je vais juste agrandir un peu ma fenêtre ici. Vous voyez que le bouton est maintenant au bon endroit ? Maintenant, si nous le voulions, nous pourrions avoir ces sections complètement séparées. Si nous cliquons sur cette flèche ici et que nous supprimons le lien, vous pouvez voir qu'il s' agit maintenant de deux sections distinctes, donc seule notre section par défaut sera jouée maintenant. Parce que nous lui avons dit de ne rien faire une fois qu'il a fini de jouer. Maintenant, si nous voulions qu'il rejoue notre section de boucle cliquez sur cette petite case et faites une section de boucle. Et maintenant, il va lire notre section boucle une fois que la section par défaut sera terminée. Maintenant, nous pouvons également faire des boucles de sections. Donc, si nous cliquons sur cette case à côté de notre section boucle ici, nous pouvons sélectionner à nouveau section de boucle, et cela fera en sorte que notre section boucle ici bouclera encore et encore. Donc, une fois que notre section de boucle terminée par défaut, nous jouerons et cela continuera à boucler encore et encore. Comme tu peux le voir maintenant. Cela peut être utile pour différentes choses. Supposons, par exemple, que vous réalisiez une animation de rechargement pour un fusil de chasse. En général, vous pouvez charger des balles individuelles dans un fusil de chasse. Peut-être que lorsque vous jouez au rechargement, il ne manque que deux balles au fusil de chasse. Vous voudriez que la section de boucle ne s'exécute que deux fois pour avoir inséré la puce deux fois. Mais parfois, lorsque le personnage se recharge, il doit mettre six balles. Vous avez donc besoin d'une section de boucle à exécuter six fois. Nous pouvons maintenant le faire avec la section de bouclage et utiliser des plans pour contrôler le nombre de fois qu'elle est exécutée. Donc, si nous revenons au ThirdPersonCharacter, je vais vous montrer certains des nœuds que nous pouvons utiliser pour contrôler les différentes sections que le montage va jouer. Nous allons donc revenir au personnage à la troisième personne ici et commencer par, si vous vous souvenez, nous avons cette section de départ. Maintenant, si nous le voulions, nous pourrions simplement faire en sorte que notre montage joue cette section de boucle tout de suite au lieu de lire la section par défaut d'abord, nous pourrions lire la section en boucle ici. Maintenant, si nous le compilons et que nous jouons, il ne jouera même plus le rechargement. Il appuiera donc sur un et vous pouvez voir qu'il saute simplement cette section par défaut et passe directement à notre section boucle. Ensuite, nous pouvons revenir à notre ThirdPersonCharacter ici. Maintenant, pour avoir accès à nos différentes fonctions de montage, nous devons obtenir une référence à notre plan d'animation. Pour ce faire, nous allons faire glisser les composants du maillage, rechercher, par exemple, et utiliser le nœud d'instance get anime. Cela nous donne une référence au plan d'animation que nous utilisons. Donc pour nous, c'est l'argent de l'ABP. Maintenant, si je fais glisser, je peux simplement obtenir des variables qui existent dans ce plan. Pour ce faire, nous aurions besoin d'un coût. Nous pourrions donc coûter de l'argent à ABP. Ensuite, nous pourrions obtenir des variables qui sont stockées à l'intérieur ou des fonctions si nous le voulions. Par exemple, get devrait bouger. s'agit d'une variable qui existe dans notre plan d'animation ici. Mais pour contrôler nos montages, nous n'avons pas besoin de coûts car ces fonctions sont intégrées à tous les plans d'animation. Nous pouvons donc supprimer ces fonctions pour le moment, et nous pouvons les faire glisser depuis la valeur de retour et rechercher montage. Cela nous donnera accès à toutes les différentes fonctions qui peuvent être utilisées pour contrôler les montages. Maintenant, l'un des nœuds les plus couramment utilisés avec des sections est le saut à la note de section. Donc, si nous créons cela, vous pouvez voir que nous obtenons une entrée de nom de section. C'est donc là que nous placerions la section dans laquelle nous voulons que notre montage change. Nous pouvons également spécifier un montage. Maintenant, si nous ne spécifions pas de montage ici, ce qui se passera c'est si vous avez plusieurs montages joués en même temps et qu'ils ont tous les mêmes noms de section. Cela changera tous vos montages cette section que nous lui avons mise. Maintenant, si vous voulez juste que cela arrive à un montage, disons le rechargement de notre fusil, nous allons simplement spécifier le montage, nous voulons que cela se produise également, donc nous pouvons le sélectionner ici. Et maintenant, nous allons uniquement modifier cette section pour ce montage. Nous avons donc pu mettre en place une démonstration rapide. Si nous faisons un clic droit, recherchez une entrée. Nous allons ajouter cela et nous allons le brancher enfoncé dans le montage sauté à la section. Et nous allons le remplacer par défaut. Par défaut comme ça. Maintenant, lorsque nous compilons et que nous cliquons sur Play, si j'appuie sur un pour jouer, notre montage peut voir qu'il passe directement à la section boucle. Mais si j'appuie aussi, vous en C, il joue maintenant la section par défaut. Il y a beaucoup d'autres choses que nous pouvons faire avec ces fonctions. Donc, si nous revenons au ThirdPersonCharacter et que nous supprimons ce montage, passez à la section. Nous pouvons faire glisser et rechercher au toucher. Je ne vais pas passer par tout ça. La plupart d'entre eux sont assez explicites. Et si vous avez besoin d'une info-bulle, suffit de survoler et cela vous donnera une assez bonne explication de ce qu'ils font. Mais un élément important est l'arrêt du montage. Cela nous permet de dire à un montage d'arrêter de jouer. Donc, si nous cliquons sur arrêter le montage ici, nous obtenons un nœud qui nous permet de définir le temps de fusion. Peut-être que vous voulez juste que le montage s'arrête instantanément ici. Vous pouvez simplement le régler sur 0 et le montage s'arrêtera complètement instantanément. Ou peut-être voulais-tu qu'il s'estompe lentement. Vous pouvez mettre une heure ici et elle disparaîtra lentement de ce montage. Encore une fois, vous pouvez définir un montage ici. Si vous ne le faites pas, tous vos montages en cours de lecture seront simplement interrompus . Si c'est le cas, vous pouvez simplement spécifier le montage que vous souhaitez arrêter. Donc, si nous connectons cela à nos deux entrées ici, nous lui avons demandé d'arrêter le rechargement du montage. Nous allons donc compiler, appuyer sur Play, appuyer sur un pour lire ce montage. Et si j'appuie sur pour, cela arrête instantanément le plan de montage. Enfin, je voulais vous montrer comment ajuster les temps de mélange et de fondu pour vos montages. Nous pouvons donc tester cela. Nous allons accéder à notre montage ici, et je vais simplement supprimer notre section de boucle et supprimer également cette animation. Juste pour que le rechargement soit en cours de lecture ici dans les détails de nos actifs. Et encore une fois, si vous ne l'avez pas, vous pouvez simplement accéder à Windows et trouver les détails de l'actif pour le prendre en charge. Nous avons les temps de mélange et de mélange. Maintenant, plus ces valeurs sont élevées, plus il faudra de temps pour que l'animation les fusionne complètement et ensuite complètement. Donc, si je devais les définir pour dire 00 comme ça, nous reviendrons à notre modèle de troisième personne ici. Je vais juste me débarrasser de cette section de style. Et nous n'allons pas arrêter le montage, ce qui revient à le laisser se terminer tout seul. Nous allons donc appuyer sur Play. Et si j'appuie sur un, vous verrez qu'il démarre instantanément. Il n'y a pas d'outil de transition, et il se termine instantanément. Nous allons donc appuyer sur un et vous verrez qu'il se termine et commence très rapidement. Mais si nous voulons des transitions plus fluides dans notre animation, nous pouvons augmenter ces valeurs. Donc disons 0,30,3 ici également. Si nous revenons en arrière, appuyez sur Play, et maintenant, lorsque j'appuie sur un, vous verrez la transition entre l'animation et la transition beaucoup plus fluides. Ce sont donc des paramètres que vous utiliserez probablement beaucoup avec les montages, car si vous avez un montage rapide, vous pouvez souhaiter que les temps de transition d'entrée et de sortie soient plus courts. Et si vous avez un long montage, vous pouvez en vouloir un plus long. La dernière chose que je voulais aborder était le gérant du magasin d'anime. Donc, si nous sortons de l'éditeur d'avion ici et ouvrons notre mannequin SK, puis allez dans Windows et ouvrez le gestionnaire de machines à sous anime qui fera apparaître le gestionnaire de machines à sous d'animation. Maintenant, c'est ici que nous pouvons ajouter de nouveaux emplacements ou supprimer ou renommer des emplacements existants. Maintenant, vous remarquerez peut-être que le nom affiché ici est en fait le même nom. Si tranchant quand on sélectionne le slop, pas de pourboire. Ce sont les emplacements qui sont définis dans notre squelette. C'est donc là que nous gérons tous ces créneaux horaires. Maintenant, une chose à garder à l'esprit avec les machines à sous et les groupes est un groupe ne peut avoir qu' un seul montage dans toutes ses machines à sous à la fois. Par exemple, si l'emplacement de montage complet du corps jouait un montage, puis que je jouais un autre montage en utilisant le slot du haut du corps qui annulerait le montage complet du corps. Et la raison en est que les deux font partie du même groupe. Donc, si je voulais que mon montage complet du corps et mon montage du haut du corps puissent être lus en même temps, je devrais déplacer mon emplacement du haut du corps vers un autre groupe. Je pourrais donc créer un nouveau groupe ou le déplacer vers un groupe existant. Si vous souhaitez déplacer un logement vers un groupe existant, vous pouvez simplement cliquer avec le bouton droit de la souris, configurer un groupe de corps deux, et cela vous donnera une liste de tous les groupes existants que vous pouvez déplacer dans cet emplacement deux. C'est tout pour cette leçon, mais nous utiliserons beaucoup plus de montages dans nos prochaines leçons également. 47. Les plans d'animation (mélangez les noeuds): Salut tout le monde. Dans cette leçon, nous allons examiner les nœuds de fusion. Désormais, les nœuds de fusion nous permettent de jouer plusieurs animations sur notre personnage en même temps. Ils nous permettent également d'utiliser des variables pour contrôler la section de notre graphique Anim en cours de lecture. Donc avant de commencer, je vais réutiliser certains des éléments que nous avons mis en place lors de notre dernière leçon, la leçon de montages. Et si vous vous souvenez de cette leçon, lorsque nous appuyons sur lecture et que nous appuyons sur un pour réellement lire notre animation, si nous commençons à bouger, la moitié inférieure de notre corps ne bouge pas. Et c'est parce que je recharge l'animation prend en fait tout le corps. Aujourd'hui, nous allons utiliser un blend know pour diviser notre corps en deux afin que nos animations de mouvement puissent être pour diviser notre corps en deux afin que nos animations de mouvement puissent jouées sur la moitié inférieure tandis que l'animation de rechargement jouera sur la moitié supérieure. Nous allons donc commencer par quitter l'éditeur de plan. Ensuite, nous passerons à notre graphique d'animation. Nous allons donc passer aux personnages plutôt qu'aux mannequins, aux animations, et nous allons ouvrir le plan d'animation ABP money. En ce moment, dans notre graphique d'animation, ce qui se passe, c'est que notre machine à états de locomotion produit une idole ou une animation de course. Nous mettons en cache cette animation dans ce nœud de pose de locomotion puis dans notre machine d'état principale ou état de locomotion en cours de lecture. Et c'est juste jouer ce que nous avons mis en cache dans la caisse de locomotion. Ensuite, si nous revenons au graphe Anim, cette locomotion met en cache la sortie de notre machine à états principale dans cet emplacement de montage. Et si vous vous souvenez que le montage est une leçon, c'est ce qui joue réellement notre montage. Maintenant, une fois que le montage a été demandé de jouer, cela produira simplement notre animation de montage. Il ne va plus jouer en mode inactif ou en cours d' animation. Enfin, il passe dans notre plate-forme de contrôle et c'est pourquoi notre placement de pied fonctionne toujours lorsque nous jouons le montage, parce que cela se produit après le montage a été appris à jouer, puis nous sortons la pose finale. Donc, en gros, ce que nous devons faire est d'ajouter un mode de fusion qui nous permettra de mélanger la moitié supérieure du corps jouant le slop de montage et la moitié inférieure du corps jouant le caisse de locomotion. ce faire, nous allons cliquer avec le bouton droit de la souris et rechercher blend PER. Nous voulons un mélange superposé par os comme ça. Maintenant, nous devons le connecter. Je vais juste reculer ces nœuds un peu comme ça. Et nous allons faire glisser ce nœud ici et nous allons déconnecter ces deux nœuds. Je tiens simplement Alt enfoncé , puis je clique sur moins de stylo ici. Nous allons donc d'abord prendre la broche de sortie et brancher sur notre plate-forme de contrôle comme ça. Déplaçons-les vers le haut. Maintenant, l' entrée de la pose de base sera les animations qui joueront sur la moitié inférieure de notre corps. Nous ne voulons donc pas que ce soit l' argent de locomotion, car il n'y aura pas nos animations de saut. Nous avons besoin d'argent provenant de nos principaux États. Pour ce faire, nous allons déconnecter le slot ici, le déplacer vers le bas. Nous sortons des piliers. Je vais chercher de l'argent et cliquer sur Nouveau, économiser de l'argent. Et nous pouvons sélectionner ce nœud et l'appeler comme vous le souhaitez. Je vais appeler les miens, disons les états principaux, en espèces comme ça. Alors je vais les déplacer ici. Ils sont donc un peu plus éloignés. Ensuite, nous allons compiler. Maintenant, ne vous inquiétez pas si nous sommes allés dans une pose en T ici ou que nous avons une note ici C'est juste parce que nous n' avons pas de vignette de plug d'animation. Nous sommes donc en train de mettre en cache notre pose principale. Nous pouvons sortir de notre affiche de base, rechercher principal. Et nous pouvons utiliser la pose mise en cache, argent de base comme ça. Ensuite, nous voulons copier ceci, le coller. Et maintenant nous voulons le brancher dans la source de notre slot et le brancher dans la pose de fusion est 0. Maintenant, la pose de fusion vaut 0, ou ce seront les animations qui seront jouées sur la moitié supérieure de notre corps. Maintenant, tout ce que nous faisons ici, c'est obtenir notre animation de base. Donc, nos principales animations d'état, ce sont nos animations de course au ralenti et de saut. Ils seront toujours joués sur la moitié inférieure de notre corps. Ensuite, pour la moitié supérieure de notre corps, nous disons, si nous jouons un montage, utilisez le montage pour la moitié supérieure. Mais si nous ne jouons pas un montage, nous voulons simplement utiliser la même animation cash d'état principal. Encore une fois, des animations de course au ralenti et de saut. Donc maintenant nous pouvons compiler juste pour nous débarrasser de cette note ici et vous pouvez voir que nos animations sont à nouveau planifiées. Mais pour le moment, notre animation ne sera pas divisée comme nous le voulons. Ils ne se sépareront pas au milieu. Nous devons en fait configurer cela dans la configuration des couches ici. Donc, si nous sélectionnons le nœud, allez dans Configuration de la couche, puis cliquez sur ces petites listes déroulantes. Vous pouvez voir que nous avons quelques filtres et c'est là que nous définissons réellement à quel os nous voulons que notre corps soit divisé. Nous allons donc ajouter une nouvelle entrée ici et cliquer sur le menu déroulant de l' index. Et c'est là que nous avons défini l'os que nous voulons que la scission se produise. Donc pour nous, nous voulons activer le nom de nos os. Nous pouvons trouver exactement quel os nous voulons utiliser. Nous allons donc passer à Character, puis à bones et nous voulons prendre en charge les noms des os. Nous allons donc nous occuper de cela. Et maintenant, nous pouvons zoomer et nous voulons que la division se fasse sur la colonne vertébrale. Nous allons donc zoomer un peu ici. Et je pense que Spine One est probablement le meilleur choix. Les animations de notre logo seront jouées sous la colonne 1. Ensuite, nos animations du haut du corps seront jouées au-dessus. Maintenant, selon votre personnage, vous pourriez avoir des noms différents à l'avenir, donc vous ne mettez pas toujours Spine One. Vous devez vérifier quels sont les os de la colonne vertébrale de votre personnage spécifique. Donc pour l'instant, nous allons utiliser Spine One et nous devons nous assurer que nous épelons le nom exactement de la même manière que dans le squelette. Donc Spine Underscore 01, comme ça. Maintenant, il y a d'autres paramètres pour cette note que je vais aborder dans un petit moment. Mais pour l'instant, nous allons juste compiler et tester cela et jouer. Et si j'appuie sur une pour lancer notre rechargement et que je commence à bouger, vous pouvez voir notre animation de rechargement lecture et nos animations du bas du corps en cours de lecture. Et lorsque nous ne jouons pas, cette animation de recharge ou les animations du haut du corps se jouent normalement. Ce n'est qu'un exemple simple de la façon dont nous pouvons configurer différentes animations pour jouer sur différentes parties du corps. Maintenant, pour expliquer un peu la profondeur de fusion, il s'agit essentiellement d' un effet de mélange. Actuellement, il est 0, ce qui signifie à partir de la colonne vertébrale un et y compris un os de la colonne vertébrale, tous les os situés au-dessus. Nous allons simplement utiliser cette sortie d'animation ici. Quand je recharge le montage joue 100% de tous les os ci-dessus. Nous utiliserons ce montage et uniquement ce montage. Maintenant, si nous devions définir ceci sur trois, par exemple, ce qui se passerait, c'est notre colonne vertébrale. On utiliserait environ 33 % des sorties de cette animation. Ainsi, 33 % de notre montage de rechargement, puis de la colonne vertébrale 2 utiliseraient 66 % de notre montage de rechargement et 33 % uniquement de notre cache d'état principal. Et puis par colonne vertébrale car il utiliserait pleinement le montage pour le rechargement. Vous pouvez donc les utiliser comme un moyen de mélanger les effets du nœud de fusion entre plusieurs os. Maintenant, si nous voulions exclure une partie du haut du corps de la lecture du montage de rechargement, nous pourrions le faire. Donc, si nous avons ajouté un autre filtre de branche, ouvrez-le et définissez-le sur « bras inférieur ». Je vais donc dire un trait de soulignement plus bas. J'ai défini la profondeur osseuse de deux moins un. Cela signifie que nous disons la note de mélange que nous ne voulons pas que l'os du bras inférieur ou les os situés en dessous utilisent notre position de fusion 0, nous voulons qu'il utilise notre pose de base. Donc, si nous appuyons sur compiler et tester cela, si j'appuie sur Y et que vous pouvez voir que mon bras droit ne bouge plus avec notre animation de rechargement. Il s'agit simplement de rester là-bas. Maintenant, le bras, le haut du bras est toujours en mouvement parce que nous n' affectons que depuis le bas du bras. Mais vous pouvez voir qu'il ne s'anime plus comme il le devrait. C'est ainsi que vous pouvez exclure des parties du corps de la lecture d'une animation. Maintenant, ne vous inquiétez pas trop si vous ne comprenez pas parfaitement que lorsque vous commencez à animer, plupart du temps, votre profondeur osseuse sera juste de 0 et vous n'utiliserez pas vraiment cela moins une option très souvent non plus. Donc pour l'instant, nous allons simplement supprimer cela en cliquant sur la petite flèche vers le bas ici et en faisant Supprimer. Nous pouvons maintenant ajouter plusieurs poses de mélange d'entrée. Donc, si nous cliquons sur Ajouter une épingle, vous pouvez voir qu'elle est ajoutée en tant que nouvelles épingles de mélange. Et si nous allons dans les détails, vous pouvez voir que nous avons maintenant un nouvel index ici sur la configuration de la couche. Cela a juste les mêmes paramètres qui sont index 0 a juste que ces paramètres maintenant pour ce stylo. Donc, par exemple, vous vouliez que les animations de rechargement sur la moitié supérieure du corps, mais que vous vouliez jouer une deuxième animation sur le visage, par exemple, vous pourriez puis ajoutez-le ici, ajoutez un nouvel os au filtre sur les filtres de branche, puis faites jouer une animation différente à la tête. Ensuite, nous avons les poids du mélange. Il s'agit maintenant de la mesure dans laquelle la pose de fusion affectera réellement les poteaux de base. Ainsi, par exemple, actuellement n' est défini que sur un, ce qui signifie que si pour des os qui veulent jouer le blend pose une animation, il sera lu à 100% de cette animation. Si je devais régler ce paramètre à 0,5, nous supprimerons cette pose de mélange d'un stylo pour l'instant. Alors, qu'est-ce que vous faites un clic droit et supprimez la broche de fusion Ensuite, nous compilerons si nous appuyons sur play now et que je joue notre animation de rechargement en appuyant sur une, vous pouvez voir que l'animation n'est pas entièrement lue. Il s'agit essentiellement d'utiliser la moitié de l'effet sur notre pose de base. Maintenant, nous pouvons également l'utiliser pour désactiver un mélange, par exemple. Nous pouvons donc définir ce paramètre sur 0 et compiler. Et maintenant, si nous appuyons sur Play et que j'appuie sur un, vous pouvez voir qu'ils ne jouent plus un montage parce que nous avons réglé cet Alpha sur 0. Il s'agit simplement d'une entrée flottante normale. Nous pouvons donc faire glisser vers l'extérieur, utiliser une option distante pour flotter, et cela nous créera simplement une variable flottante que nous pouvons modifier et contrôler dans notre graphique d'événements. Maintenant, revenons au graphe Anim et sélectionnons le mélange de couches par nœud osseux. Ici, nous avons une option pour le mélange de rotation basé sur le maillage. Cela signifie essentiellement que la rotation de nos os ou utilise l'espace de maillage au lieu de l'espace local. Cette option peut être utile si vos animations sont un peu étranges lorsque vous les jouez. Le plus souvent, je trouve que c'est activé, mais cela dépendra de votre personnage et des animations que vous jouez. Cela fait la même chose, mais nous avons mis à l'échelle de sorte qu'il utilisera vos maillages, échelle des os au lieu de l'échelle locale. La plupart du temps, vous voudrez désactiver cette option. Il existe maintenant d'autres types de nœuds de fusion. Donc si nous supprimons celle-ci pour le moment et que nous supprimerons cette variable, n'est-ce pas ? Parce que je peux rechercher l'outil Blend et qu'il existe une pose de blend par booléen. Donc, si nous créons cela, vous pouvez voir que nous avons un vrai et un faux stylo. Il va donc brancher notre source, comme ça. Maintenant, cela nous permet de contrôler animations qui seront jouées en fonction d'une valeur booléenne. Donc, si cette valeur active ici est vraie, l'animation connectée à true s'exécutera. Et si c'est faux, l'animation est connectée jusqu'à ce que les gens s'exécutent. Et nous pouvons le voir dans l'aperçu ici. Vous pouvez donc voir que la valeur est fausse. Ainsi, seules les animations provenant de notre stylo personnel sont transmises à notre plate-forme de contrôle. Si je devais m'occuper de ça et compiler. Je vais maintenant dire que seule l' animation de notre vrai stylo est transmise à notre plate-forme de contrôle. Et puis nous avons quelques temps de mélange. Donc, si vous deviez modifier cette valeur pendant le jeu, plus ces valeurs sont élevées, plus il faudra de temps pour qu'elle se mélange harmonieusement des poses réelles aux poses des gens, puis de retour à partir de faux à vrai pour le faux temps. Ce nœud peut donc être très utile pour, par exemple, si vous avez un tas d'animations, donc ne jouez que lorsque vos personnages nagent et ensuite d'autres animations lorsque le personnage se promène sur le sol, vous pouvez avoir une variable appelée sa nage qui se connecte à quelque chose comme ça. Et puis cela peut facilement faire la transition entre les animations de marche au sol et les animations de nage chaque fois que ce booléen est réglé sur vrai ou faux. Un autre nœud similaire est le mélange. Donc, si nous recherchons Blend puis int, nous pouvons utiliser les poses de mélange par int. Cela fonctionne de la même manière, mais au lieu d'un booléen, c'est une valeur int. Nous pouvons donc ajouter plusieurs entrées pour le moment, il n'y en a que deux. Donc, si je devais définir ceci sur un, alors notre seul message serait utilisé. Nous pouvons donc les connecter comme ça. Cliquez sur Compiler et vous verrez que celui est utilisé. Mais si je change cela à 0 et que nous compilons à nouveau, vous verrez que maintenant les entrées 0 sont utilisées. Et ce qui est bien, c'est que nous pouvons avoir plus de deux entrées. Donc, si nous cliquons avec le bouton droit et faisons, ou si nous cliquons avec le bouton droit sur le nœud, désolé, et ajoutons le PIM blend Vous pouvez voir que cela ajoute une nouvelle option. Maintenant, si je devais simplement copier et coller ces nœuds, les coller, les connecter ici. Et maintenant, mettons-le à deux, va compiler. Vous voyez que maintenant les deux broches sont utilisées. Encore une fois, nous venons d'avoir ces temps passés et ils fonctionnent de la même manière que notre nœud booléen. Donc, quelle que soit la valeur que vous mettez ici c' est le temps qu'il faudra pour l'intégrer à cette pose. Maintenant, nous pouvons également utiliser un nœud de mélange à l'aide d'une énumération. Donc, si nous supprimons ceci et que nous pouvons le retirer, nous allons simplement le laisser comme ça pendant un moment. Nous allons créer une nouvelle énumération, donc nous allons cliquer avec le bouton droit de la souris et aller sur les plans, puis aller à énumération. Je vais juste appeler cela des types d'animation de soulignement E. Nous allons l'ouvrir et créer un nouvel anion. Et nous appellerons cela « nager ». Et nous en ajouterons un autre pour la marche et un autre pour la voiture, par exemple. Ce ne sont que des exemples pour vous montrer comment fonctionne le code, mais nous allons fermer ça pour le moment. Revenez à notre graphique d'animation, puis nous rechercherons l'animation de soulignement EA. Vous voyez en haut ici nous avons des poses de fusion E types d'animation de soulignement. C'est parce que c'est ce que nous avons appelé un syndicat. Nous allons donc créer cela. Vous voyez que nous obtenons ce nœud ici. Et si nous cliquons avec le bouton droit sur le nœud, vous pouvez voir que nous pouvons ajouter des épingles pour la natation, la marche et le coût. Nous allons donc le faire pour chacun d'entre eux comme ça. Nous avons maintenant un stylo anionique au lieu d'un booléen ou d'un entier. Nous allons donc connecter la sortie à notre récapitulatif de contrôle. Et nous les connecterons en toute sécurité pour natation, la marche et les capodastres. Actuellement, ce paramètre est défini sur 0. Donc si nous compilons, il choisira simplement le poteau de natation parce que c'est le premier. Mais nous pouvons également utiliser une variable pour contrôler cela. Nous pouvons donc créer un nouvel anion. Nous appellerons ce mode animation par exemple. Et nous allons le définir sur le type d'animation de soulignement E. C'est le syndicat que nous venons de créer. Nous allons compiler. Nous pouvons maintenant brancher cette variable dans notre nœud. Nous pouvons contrôler lequel sera utilisé à l'aide de cette variable. Nous pouvons donc dire, je veux en voiture, compiler et maintenant il utilise l'encre. Et nous pouvons modifier cela pendant jeu dans notre graphique d'événements ici pour contrôler les animations que nous voulons voir jouer sur notre graphique. Enfin, si nous supprimons ce nœud et que nous recherchons le terrain, nous pouvons simplement utiliser un mode de fusion. Maintenant, il s'agit d'un nœud simple qui prend simplement une entrée a et B et nous permet les fusionner en utilisant une valeur alpha. Donc, si c'est 0, la sortie de ce nœud sera juste 100 % de a. Et si c'est un, ce sera a. 100 % de B vaut 0,5, alors ce sera la moitié et la moitié de ces deux animations sorti. Pour l'instant, nous allons simplement supprimer ce nœud et nous sommes simplement assis sur notre fusion de couches par nœuds d'os. Nous allons donc rechercher du plomb et nous pouvons utiliser la marque de plomb par os pour le connecter ici à nouveau, ceci jusqu'à notre plate-forme de contrôle. Nous supprimerons ces nœuds car ils ne les utilisent plus. Ensuite, dans notre note ici, nous allons simplement définir la sauvegarde de la bordure du champ de branche pour la colonne vertébrale 1. Il va donc le mettre sur la colonne vertébrale, en souligner un. Et nous supprimerons également ces variables ici parce que nous ne les utilisons pas réellement et nous les compilons simplement. Donc maintenant, lorsque nous appuyons sur play et que nous courons partout, nous pouvons appuyer sur un et il nous jouera une animation de rechargement pendant que nos animations de mouvement fonctionneront toujours avec elles pour cette leçon, J'espère que vous comprenez maintenant un peu mieux comment mélanger des animations ensemble et comment nous pouvons réellement jouer deux animations en même temps sur un maillage de personnage. 48. Les plans d'animation (Notifies): Salut tout le monde. Dans cette leçon, nous allons examiner les notifications d'animation. Maintenant, l'animation notifie un outil très pratique car ils nous permettent d'exécuter du code à un moment précis dans une animation. Nous avons déjà examiné certaines notifications plus tôt dans le cours. Nous avons examiné le son et les effets de jeu, les notifications qui nous ont permis de jouer des sons ou des effets de particules à des points spécifiques de nos animations. Je reviendrai rapidement là-dessus dans cette leçon juste pour vous rafraîchir la mémoire. Pour commencer, nous devons passer soit à une séquence d'animation, soit à un montage d'animation. Nous pouvons ajouter des notifications aux deux. Je vais donc utiliser le montage de recharge que nous avons joué dans nos leçons précédentes. Nous allons donc passer aux animations des leçons. Et si vous n' avez pas ce dossier, j'ai expliqué comment l'ajouter dans les leçons de montage. Donc tu devrais peut-être y jeter un œil. Maintenant, nous allons faire défiler vers le bas et trouver notre montage de recharge, qui se trouve ici en bas. Nous allons simplement ouvrir ça. Maintenant. Ici, nous avons notre chronologie des notifications et c'est là que nous verrons toutes les notifications pour ce montage spécifique. Pour ajouter une nouvelle notification, il suffit de cliquer avec le bouton droit de la souris sur cette barre qui en indique une et nous pouvons ajouter une notification. Maintenant, le moteur possède déjà des notifications intégrées. C'est ainsi que nous pouvons jouer des sons ou particules ou des effets de particules Niagara. Il y a maintenant d'autres notifications, comme vous pouvez le voir ici pour Clothing Simulation et d'autres choses de ce genre. Je ne vais pas les aborder dans cette leçon parce qu'ils sont assez précis et un peu plus avancés et ce que nous allons couvrir. Mais nous allons simplement ajouter une notification de son de lecture. Maintenant que cela a été ajouté, nous pouvons le positionner à n'importe quel point de l'animation. Supposons que nous voulions jouer à ce moment précis. Nous pourrions ajouter notre notification à ce point. Ensuite, dans le panneau Détails, nous pouvons définir des modificateurs de son, de volume et de hauteur. Nous pouvons modifier la couleur de notification, et c'est juste pour l'organisation. Vous pouvez ainsi rapidement, en un coup d'œil voir ce qu' est une notification par sa couleur. Un autre paramètre utile ici est la chance de déclenchement. Maintenant, peut-être que vous vouliez que ces sons ne soient joués que lorsque cette animation est jouée aléatoirement. Ce que nous pourrions faire, c'est au lieu de l'envoyer à un seul, ce qui signifie que le son sera toujours joué lors de la lecture de l'animation. Nous pourrions définir ce paramètre à 0,1. Maintenant, ce son, nous ne jouons dix pour cent du temps que cette animation joue. Un exemple de la façon dont cela peut être pratique est peut-être que vous avez une animation inactive et que vous vouliez ajouter un son de toux à cette animation inactive. Maintenant, vous ne voulez probablement pas que ce son soit joué chaque fois que l'animation inactive est lue. Vous pouvez donc définir la chance de déclenchement de cette notification sonore sur 0,1, et ce son sera lu 10 % du temps pendant lequel l' animation est lue. Maintenant, nous pouvons faire la même chose avec les effets de particules. Je vais donc supprimer la notification sonore ici, cliquer avec le bouton droit de la souris et ajouter une notification. Maintenant, nous pouvons soit ajouter neuf à cinq pour Niagara, effets politiques se répercuteront en cascade. Je vais choisir Niagara simplement parce que c'est un système plus récent. Nous allons donc cliquer dessus et sélectionner cette notification. Ensuite, dans notre panneau Détails, nous pouvons définir les effets de particules Niagara que nous voulons choisir. Je n'ai aucun de mes projets actuellement, donc il y en a un à venir ici. Mais si c'était le cas, ils se montreraient ici. Ensuite, nous pouvons définir l' emplacement et la rotation. Maintenant, c'est le décalage par rapport à la racine. Donc, la racine de notre personnage est exactement là où se trouve ma souris. Donc, si nous devions ajouter, disons, 50, Hi, notre effet de particule augmenterait à peu près cette hauteur parce qu'il augmente la hauteur de l'effet de particule de 50 à partir de la racine. Maintenant, nous pouvons également dire si notre fait politique est lié ou non à quelque chose. Donc, actuellement, il est attaché et cela signifie qu'il va simplement s' attacher à la racine. Mais nous pouvons spécifier un nom de bot si nous le voulons. Nous voulions que les effets de particules soient attachés à la tête. Nous pourrions le faire en cherchant la tête. Et vous pouvez voir que cela nous donne notre os de tête ici. Donc maintenant, quand nous avons engendré cet effet de particule ou sera réellement attaché à l'os de la tête. Contrairement à avant, nous pouvons dire notifier la couleur. Et nous pouvons également changer si la notification sera exécutée ou non à chaque fois ou disons la moitié du temps si nous mettons 0,5, par exemple. Maintenant, en utilisant ce type d'effet Notifier de jouer, il suffit de dire à l'effet de jouer une fois, puis l'effet sera détruit. Mais peut-être que vous vouliez les effets que vous exécutez d' ici à ici dans l'animation. Eh bien, nous pouvons le faire. Nous allons donc sélectionner cette notification, la supprimer, cliquer avec le bouton droit de la souris et passer à l'état de notification et descendre à l' heure de l'effet Niagara. Ou si vous utilisez des cascades, effet Time to Particle. Il va donc sélectionner l'option Niagara ici. Et tu vois que nous avons maintenant un 12. Nous pouvons réellement le faire glisser vers la valeur ici en cliquant sur le petit point en bas et en le faisant glisser vers l'extérieur. Nous pouvons donc ajouter cela à 50. Donc maintenant, les effets de particules que nous définissons pour cette notification, je couple un de la valeur unique à la valeur vraie. Maintenant, quelque chose à garder à l'esprit avec ceci est que votre effet Niagara sera, devra être configuré pour être en boucle. S'il n'est configuré pour s'exécuter qu'une seule fois, les effets de particules ne s'exécuteront qu'une seule fois, puis il ne le fera plus. Vous aurez donc besoin de l'effet de particule Niagara qui est en fait configuré pour que cela fonctionne. Ensuite, nous avons les mêmes paramètres que notre type de notification précédent. Nous avons le modèle que nous voulons utiliser. C'est donc là que nous définissons l'effet que nous voulons. Nous pouvons choisir s'il s' attache ou non à un os ou à une alvéole. Nous pouvons définir sa position et ses décalages de rotation. Nous pouvons choisir s' il détruit ou non immédiatement. En gros, cela signifie que vos effecteurs bouclent pendant que nous jouons l'animation. Une fois arrivé, si détruire immédiatement est coché. Peu importe le stade où l'effet de particule est inséré à mi-course. Il sera détruit instantanément. Alors que si c'est coché, alors une fois que nous en arriverons là, si l' effet de particule est à mi-parcours, alors il le laissera finir. Alors peut-être que votre pot, un effet cool prend deux secondes de plus pour terminer, puis cela le permettra. C'est donc à vous de décider si vous avez cette tectonique ou non selon le type d' effets que vous utilisez. Maintenant, lorsque vous travaillez avec des notifications, vous pouvez vous retrouver avec une chronologie assez chargée si vous avez beaucoup de choses à faire dans une animation spécifique. Vous pouvez donc toujours ajouter de nouvelles pistes de notification. Nous pouvons donc cliquer sur ce petit menu déroulant ici pour ajouter une piste de notification. Et cela nous donne une deuxième piste que nous pouvons ajouter notifie deux, cela ne change pas leur façon de fonctionner ou quoi que ce soit de ce genre est purement pour l'organisation. Jusqu'à présent, nous avons utilisé les notifications par défaut intégrées au moteur, mais nous pouvons en fait créer les nôtres qui nous permettent de nous exécuter lors événements et d'exécuter du code lorsqu'une notification d'animation est exécutée. Ce que nous allons faire, c'est sélectionner cette notification et la supprimer. Maintenant, peut-être que je voulais un bout de code à exécuter quand mon personnage dit qu' attrape le chargeur ou pose le chargeur avec l'arme ici. Eh bien, nous pouvons le faire avec les notifications. Nous allons donc faire un clic droit et ajouter une notification. Ensuite, nous passerons à la nouvelle notification et cela nous permettra de nommer les notifications afin que nous puissions appeler ce magazine détaché comme ça. Vous pouvez voir que nous avons reçu une notification indiquant qu'il s'agit du magazine Touch. Nous pouvons le déplacer comme les précédents, mais je vais garder le mien ici. Maintenant, cette notification nous permettra d'appeler un événement dans notre plan d'animation chaque fois que cette animation joue ce point. Mais nous allons rencontrer un petit problème ici, et je vais vous montrer pourquoi si nous nous dirigeons vers notre plan d'animation, qui, si vous vous souvenez, est dans l'animation de personnages, de mannequins. Ensuite, nous ouvrirons de l'argent. Normalement, si je clique avec le bouton droit de la souris et que je cherche mon détaché, je devrais trouver un événement pour notre magazine détaché, mais ce n'est pas le cas. Et la raison pour laquelle cela se produit est, si vous vous souvenez, y a moins que des animations et que ce dossier a en fait son propre squelette. Et puis notre personnage a un squelette différent. C'est pourquoi notre notification. Il n'apparaît pas simplement dans notre plan d'animation. Nous pouvons facilement résoudre ce problème. Nous devons donc aller dans notre dossier Personnages, puis dans nos mannequins, puis dans deux mailles et ouvrir le mannequin SK. Et ici, nous allons accéder à l'onglet Notifications d'animation. Si vous ne l'avez pas ouvert, vous pouvez aller dans Window et trouver l'animation, ces FISA et l'exécuter. Et nous allons simplement cliquer avec le bouton droit de la souris et faire de nouveau. Je vais appeler ce magazine, oh désolé, détachez le magazine. Et il doit être orthographié exactement de la même manière que la notification dans notre montage. Et maintenant, nous avons ajouté cette nouvelle notification à notre squelette. Maintenant, lorsque nous accédons à notre plan d'animation, nous pouvons cliquer avec le bouton droit de la souris pour rechercher le toucher. Et vous pouvez voir que nous avons maintenant un anime alors notifié au magazine touch et nous pouvons l'ajouter. Maintenant, si vous deviez ajouter une notification à une animation qui utilise le même squelette, c'est votre personnage. Pour vous donner un exemple, nous allons aller dans le dossier Personnages, mannequins, animations. Ensuite, nous allons passer à l'argent et nous trouverons simplement l'animation va trouver le terrain par exemple, j'ouvre ça. Maintenant, si je fais un clic droit dans les notifications ici pour ajouter une notification, une nouvelle notification. Et je vais juste appeler ça « saut ». Et maintenant, si nous allons dans notre plan d'animation, je fais un clic droit et je cherche saut. Et tu verras que ça vient d'apparaître tout de suite. Et c'est parce que l'animation I'd jump land utilise en fait le même squelette que notre personnage. Maintenant, dans notre montage de rechargement, nous avons reçu notre notification de magazine détaché, puis nous avons également inclus cet événement ici dans notre plan d'animation. Maintenant, cet événement se déroulera chaque fois que ce montage est joué par notre personnage et l'animation arrive à ce point. Donc pour tester cela, nous pouvons simplement ajouter du code à cela. Je vais juste faire glisser et imprimer une chaîne. Et nous allons simplement laisser ce Hello chanté. Et nous allons compiler, appuyez sur Play. Et maintenant, lorsque j'appuie sur un, vous verrez que nous obtenons cette impression Hello lorsque notre animation de rechargement arrive à ce point précis. Et nous pouvons également vérifier que l'extrémité du saut fonctionne également. Nous pouvons donc cliquer avec le bouton droit de la souris sur la recherche de saut, ce qui nous crée un nouvel événement. Nous pouvons faire glisser à partir de cela et faire une chaîne d'impression pour cela. Et si nous compilons, nous sautons quand nous atterrissons, vous pouvez voir que Notify est également en cours d'exécution. Maintenant, revenons au squelette de notre personnage pendant une seconde. Nous passerons aux mannequins plutôt qu'aux maillages et ouvrirons le mannequin ici dans notre onglet de notifications d'animation. C'est ici que vous pouvez supprimer les notifications d'animation. Vous pouvez en créer de nouveaux afin que nous puissions cliquer avec le bouton droit de la souris et faire Nous pouvons également renommer. Nous pouvons donc cliquer avec le bouton droit et sélectionner Renommer pour modifier le nom d'une notification. Un autre outil utile est la recherche de références, et nous pouvons l'utiliser pour trouver toutes les animations qui contiennent cette notification. Donc, si nous cliquons dessus, vous pouvez voir qu'il nous donne l'animation exacte qui utilise le saut et la notification. Nous pouvons double-cliquer dessus et vous pouvez voir que c'est l'animation qui a été notifiée. Il se peut donc, par exemple, vous ayez une animation en cours d'exécution et que avertissiez que vous ne souhaitez pas le faire. Vous pouvez toujours accéder au squelette, cliquer avec le bouton droit de la souris sur Notifier et trouver l'animation qui joue cette notification. Si vous voulez vous débarrasser de la recherche ici, nous pouvons simplement cliquer avec le bouton droit de la souris sur Supprimer les filtres et vous pouvez voir que toutes nos animations s'affichent à nouveau. Maintenant, nous pouvons également créer nos propres notifications personnalisées du travail un peu comme le son de lecture ou l'effet de particules de lecture le notifie. Donc, si nous revenons au navigateur de contenu ici, je vais simplement aller dans le dossier Blueprints. plans à la troisième personne, nous cliquerons avec le bouton droit de la souris et cliquerons sur Ensuite, nous allons aller dans toutes les classes et rechercher Notify. Et nous voulons que l'animation soit notifiée ici. Donc, si nous cliquons dessus et que nous faisons Sélectionner, cela nous créera un nouveau plan. Je vais juste donner mon exemple. Prévenez comme ça. Et nous allons double-cliquer pour l'ouvrir. Je vais juste faire glisser le mien jusqu'à la barre supérieure ici comme ça. Nous avons maintenant une nouvelle disposition de l'éditeur. Vous pouvez voir que nous n'avons pas graphique d'événement où nous avons notre panneau Mon plan directeur , puis le panneau Détails ici. Nous avons maintenant certaines fonctions intégrées à ce plan que nous pouvons remplacer. Et ce sont les fonctions qui seront réellement exécutées lors de l'exécution de Notify here. Ce que nous allons faire, c'est d'abord passer à notre montage de rechargement. Si nous cliquons avec le bouton droit sur Notifier, mais que nous allons ajouter une notification Ici, vous pouvez voir que nous avons maintenant cet exemple de notifications. Donc, si nous cliquons dessus, vous pouvez voir que nous avons un nouveau type de notification. C'est le même nom que notre plan directeur et nous pouvons positionner là où nous voulons le dire ici, par exemple. Donc maintenant, lorsque notre animation arrivera à ce point, elle exécutera les événements dans notre exemple de notification ici. Ainsi, en utilisant cela, nous pouvons exécuter du code personnalisé dans cette notification. Chaque fois que cette notification reçoit une ROM, nous pouvons passer à écraser la réception de notification. Cette fonction s' exécutera chaque fois que je notifie à l'intérieur de notre animation. Il nous fournit également des informations utiles. Il nous fournit donc l' animation qui a réellement appelé le composant Notify et également le composant de maillage. Et ce qui est bien, c'est que nous pouvons accéder, disons, notre plan d'animation ou même au personnage qui a joué l'animation en utilisant ceci. Donc on peut traîner et on peut obtenir le propriétaire, comme ça. Désormais, le propriétaire du maillage de personnage sera toujours le plan de personnage. Donc, en utilisant cela, nous pourrions faire glisser et coûter au personnage, par exemple. Et maintenant, nous pouvons facilement accéder à notre plan de personnage. Nous pouvons également accéder à notre plan d'animation en le faisant simplement glisser depuis les composants du maillage, en effectuant une recherche, par exemple. Cela nous donnera une référence à notre plan d'animation. Donc, juste pour vous donner un exemple de la façon dont cela fonctionne réellement, nous allons le supprimer pour le moment. Je vais juste ajouter une chaîne d'impression ici. Et nous allons dire bonjour. Il s'agit d'un test. Nous allons le connecter à la valeur de retour comme cela va compiler. Et maintenant, quand nous appuyons sur play et que j'appuie sur un, vous verrez que bonjour et qu'il s'épuise aussi bonjour, c'est un test et c' parce qu'à l'intérieur je recharge l'animation, nous avons notre nouvel exemple de notification. Et à l'intérieur sur l'exemple notifier. La notification reçue s'exécute et exécute notre chaîne d'impression ici. Voici un exemple courant de ce que ces clients ou Pfizer ont utilisé pour nos pas. Maintenant, vous pensez peut-être que vous pouvez simplement utiliser le son de lecture pour avertir qui est intégré au moteur. Mais le problème, c'est que si vous avez différents types de sons pour différents types de sol, vous devez détecter type de sol sur lequel votre personnage marche, puis jouer le son approprié. À l'aide d'un client averti comme celui-ci, vous pouvez écrire le code qui fait peut-être une trace de ligne sous votre personnage pour détecter le sol, puis jouer le son correct pour ce type de sol. Mais ce n'est qu'un exemple. Vous pouvez les utiliser pour toutes sortes de choses dans vos projets. Nous pouvons également leur ajouter des paramètres de personnalisation. Donc, si nous ajoutons une nouvelle variable ici et que nous appelons cela sons, par exemple, nous allons descendre au type de variable, rechercher une base de sons et sélectionner une référence d'objet. Maintenant, nous allons compiler et nous allons simplement cliquer sur le petit œil ici. Ou vous pouvez prendre des instances modifiables ici , faire la même chose, compiler. Et maintenant, lorsque nous allons dans notre montage de recharge et que nous sélectionnons notre notification, vous pouvez voir ici dans les paramètres que nous avons maintenant cette variable de sons que nous venons de créer. Nous pouvons régler un son puis à l'intérieur sont reçus la fonction de notification. Nous pouvons utiliser n'importe quel son défini à l'intérieur du montage et le jouer. Pour ce faire, nous allons simplement faire glisser notre note de retour ici et nous allons faire de l'espace. Nous allons donc faire glisser vers l'extérieur et nous rechercherons le son de lecture. Nous utilisons le son de lecture sur place. Nous allons récupérer notre valeur sonore et connecter à la variable sounds. Et pour l'emplacement, vous obtiendrez l'emplacement du composant de maillage. Nous obtenons donc l'emplacement. Nous n'obtiendrons pas de localisation mondiale. Branchez-le à l'emplacement. Alors nous allons le compiler et vous remarquerez je vais laisser mon son ici comme aucun, et nous utiliserons le montage pour définir réellement ces sons. Nous allons donc sélectionner l'exemple notifier ici et choisir un son ici. Je vais donc choisir le son qui a échoué à la compilation. Et vous remarquerez que pendant que l'animation joue ici, elle joue un son pour elle. Nous allons arrêter cet avion parce que ça devient embêtant. Et nous allons tester cela. Nous allons donc appuyer sur play et le jeu et appuyer sur un pour jouer ce son, va jouer l'animation. Vous pouvez voir que notre notification est en cours d'exécution et qu'elle émet le son que nous nous sommes assis à l'intérieur de notre montage ici. Vous pouvez le faire avec toutes sortes de paramètres. Donc, si vous le souhaitez, vous pouvez ajouter un booléen, par exemple ici. Et tant que l' instance est modifiable, elle sera accessible depuis notre montage. Vous pouvez voir que nous avons maintenant cette nouvelle variable ici, et je peux y accéder si je sélectionne ma notification. Et nous pouvons également utiliser plusieurs de ces notifications d'animation. Je peux donc le déplacer ici, cliquer avec le bouton droit de la souris. Ajoutez suffisamment d'exemple. Maintenant, si je sélectionne ceci, nous pouvons choisir un autre son. Je pourrais donc choisir le succès du compilateur, par exemple. Maintenant, lorsque nous appuyons play et que j'appuie sur l'un d'eux pour lire l'animation, vous devriez entendre les deux sons. Enfin, je vous ai montré comment créer de nouvelles notifications d'animation, mais je ne vous ai pas montré comment les réutiliser. Donc, si nous sortons de l'éditeur d' avion ici, revenons à notre animation de rechargement. Vous pouvez voir que nous avons un magazine indépendant. Maintenant, peut-être que je veux que cet événement se déroule également ici, nous pouvons cliquer avec le bouton droit de la souris , ajouter, notifier, accéder aux notifications Skeleton. Et ici, vous pouvez voir que nous avons toutes nos notifications existantes et que nous sommes détachées. Le magazine est juste en bas ici. Nous pouvons donc créer cela. Maintenant, l'événement dans notre plan d'animation ici se déroulera deux fois pour cette animation, une fois ici et une fois ici. Et nous pouvons également utiliser ce magazine détaché notifié dans le fait que d'autres animations, il n'est pas verrouillé à cette animation. Donc, si nous le voulions, nous pouvons aller le dossier Animations sous les mannequins, puis aller à l'argent. Et nous pourrions l'ajouter à l'animation de terrain par exemple. Nous pouvons donc cliquer avec le bouton droit et notifier, le squelette notifie. Ensuite, nous pouvons aller au magasin indépendant ici. Et maintenant, cet événement se déroulera également lorsque nous jouerons à cette animation de saut. C'est donc tout pour cette leçon. J'espère que vous en comprenez un peu plus sur les notifications d'animation et sur la façon dont vous pouvez les utiliser dans vos futurs projets. 49. Les plans d'animation (États): Salut tout le monde. Dans cette leçon, nous allons examiner de plus près états de l'animation dans notre plan d'animation. Dans notre première leçon, nous avons fait un bref aperçu de ces états d'animation. Mais dans celui-ci, nous allons examiner de plus près leur fonctionnement et comment vous pouvez en ajouter de nouveaux. Pour commencer, ouvrez simplement votre plan d'animation et dirigez-vous vers le graphique Anim. Nous allons donc simplement ouvrir cela. Ensuite, nous allons commencer par aller à la machine d' état de locomotion ici. Et si vous vous souvenez de tout à l' heure, voici où nous avons notre état d'inactivité , puis je marcherai en état de course slash. Et c'est dans ces états que se situent nos animations. Donc, dans l'état inactif, nous avons l'animation inactive , puis la course de barre oblique. Nous avons notre walk slash run, London Space. Pour commencer, nous allons simplement ajouter un nouvel état à cette machine d'état de locomotion. Pour ce faire, il suffit de cliquer avec le bouton droit de la souris et de cliquer sur l'état. Et cela nous créera un nouvel état similaire à notre état inactif et à notre état de marche slash run. Je vais juste appeler le mien visé et nous allons créer un état d'objectif aujourd'hui. Alors pourquoi maintenant nous avons un nouvel État appelé aimed, mais il ne sera jamais réellement appelé pour le moment parce que nous n'avons aucune règle qui fera la transition vers lui. Donc, pour créer une nouvelle règle, nous devons faire glisser d'un état différent vers nos nouveaux stapes. Nous allons donc passer du ralenti au mode visé. Cela va nous donner une flèche qui pointe du ralenti au point de mire. Parce que cette règle détermine si nous sommes dans l'état inactif, si nous devons ou non passer à l'état visé. Nous devons maintenant ajouter du code à notre règle pour déterminer quand l'état inactif doit passer à l'état visé. Ce que nous pouvons faire, c'est double-cliquer sur ce petit bouton ici. Et cela nous permettra de respecter cette règle. Et selon que cette valeur de retour est vraie ou non , c'est si nous passerons ou non de l'état idol à l'état final. Nous allons donc commencer par créer une nouvelle variable. Je vais appeler le mien visé, ou désolé, nous ne pouvons pas l'appeler visé parce que nous avons un nom d'État, donc nous l'appellerons visé comme ça. Je vais changer le mien en un booléen comme ça et nous allons compiler. Maintenant, vous pouvez recevoir un avertissement ici. Tout ce que cela fait, c'est nous dire que notre règle ici ne contient aucun code. Et nous allons maintenant ajouter du code à cela. Nous allons donc double-cliquer dessus pour l'ouvrir. Et nous allons prendre notre objectif et le relier au résultat ici. Ensuite, nous pouvons compiler comme ça et nous devrions également nous débarrasser de cet avertissement maintenant. Ensuite, nous retournerons à la locomotion. Nous avons donc maintenant une règle qui nous permettra de passer de idol à aim à savoir si r est visé ou non variable est vrai. Nous pouvons réellement tester cela. Donc, si je prends cela en compte, vous pouvez voir que notre personnage T pose et qu'il fait parce que nous n'avons pas encore défini d'animation dans notre état. Nous allons maintenant ouvrir notre état visé et ajouter une animation pour qu'il puisse être lu. Nous allons donc faire glisser et rechercher des joueurs de jeu, et nous utiliserons le lecteur Sequence. Maintenant, cela nous permet simplement de définir une animation dont notre objectif est de se plaindre. Et nous pouvons le faire ici dans le panneau Détails pour définir la séquence sur le panneau Détails pour définir quelque chose comme l'ADS. Et nous devrions trouver le fusil au ralenti ADS. Si vous n'avez pas cette animation, nous avons expliqué comment les importer dans votre projet dans la leçon de montage. Vous pouvez donc y jeter un œil et cela vous montrera comment ajouter ces animations. Et maintenant que nous avons défini l' animation si nous compilons, parce que notre objectif ou est visé est défini sur true, vous pouvez voir qu' il joue maintenant animation pointée par un fusil. Mais le problème maintenant est que si nous revenons à notre machine d' état de locomotion, si je devais changer ou si nous visons à faux, notre animation ne repasse pas au ralenti. C'est parce que nous devons encore créer une règle qui va de notre objectif à notre inactif. Nous allons donc faire glisser de l'état visé à l'état inactif, et cela sera vérifié chaque fois que nous serons dans l'état visé. Nous devons maintenant ajouter du code à cette règle qui nous fait revenir de notre état en état à notre état inactif. Nous allons donc ouvrir ça. Nous allons récupérer la variable is aimed. Maintenant, nous voulons que cela retourne vrai si c'est faux. Nous allons donc faire glisser et rechercher rien, trouver le booléen NOT ici et le connecter aux résultats. Donc, si is aimed est vrai, cela le convertira en faux puis retournera une valeur fausse. Et maintenant, nous pouvons le tester. Je vais donc revenir à la vue des locomotions ici. Nous allons sélectionner est visé et nous l'enlèverons et le retirons. Tout d'abord, nous devons compiler. Donc maintenant, lorsque nous l' enlevons et que nous l'enlevons, vous pouvez voir qu'il passe d'un État à l'autre. À présent, nos métaux de transition ont d'autres paramètres. Je ne vais pas tous les passer en revue, mais je vais passer en revue certains des plus importants qui sont ici. Pour commencer, nous avons l'ordre de priorité. Maintenant, plus la valeur est élevée, plus la priorité de ce rôle est élevée. Par exemple, si vous avez plusieurs règles comme nous le faisons ici pour le ralenti, nous avons celle-ci et nous avons celle-ci. Supposons que les deux soient vrais en même temps, alors le moteur choisira celui qui a la priorité la plus élevée ici. Ce paramètre peut être utile si vous avez un système de locomotion beaucoup plus complexe avec de nombreuses règles allant d'un état, par exemple. Nous avons ensuite la durée de la transition. C'est maintenant le temps qu'il faut pour que l'animation inactive passe en douceur à l'animation visée. Parce que si vous remarquez, lorsque nous sélectionnons notre nom, il ne s'accroche pas instantanément. Nous obtenons cette transition en douceur entre eux. Donc, si nous augmentons cette durée ici, disons la règle de transition de l'objectif au ralenti, nous la changeons pour dire un. Maintenant, lorsque nous compilons et que nous sélectionnons comme visé, si nous le désactivons, vous pouvez voir que vous obtenez une transition beaucoup plus douce et plus lente de l'animation visée au ralenti. Nous pouvons également faire la même chose pour notre ensemble. Nous pouvons donc sélectionner cela, définir la durée sur un. Et maintenant, chaque fois que nous affronterons AMG nous obtiendrons cette transition en douceur après la compilation. Allons-y. Tout est donc combiné maintenant. Et vous pouvez voir que transition entre les deux animations est beaucoup plus lente. Ensuite, sélectionnez notre règle ici. Dans les réglages de fusion, nous avons un mode. Voici comment l'animation passera à la nouvelle animation. Il faudrait les essayer pour voir comment ils fonctionnent. Mais ceux-ci vous donnent des effets de transition différents entre les deux états. Ensuite, nous avons les notifications. Maintenant, cela nous permet d'exécuter des événements dans notre graphique d'événements chaque fois que cette règle fait quelque chose. Nous pouvons donc avoir une transition de démarrage et nous pouvons avoir un événement dans notre graphique d'événements qui s'exécutera chaque fois que cette transition commence ici. Ainsi, chaque fois que la règle devient vraie, cet événement que nous nommons ici s'exécutera. Nous avons mis fin à la transition. Ainsi, lorsque la transition sera terminée et que nous au nouvel état, cela fonctionnera. Et puis s'il est interrompu, cela fonctionnera. Donc, si, par exemple, nous passerons 1 seconde de ralenti à visé, et nous l'avons annulé. La règle est devenue fausse et nous sommes retournés au ralenti avant d'être interrompus, l'événement s'exécuterait. Donc, pour vous donner un exemple rapide, nous pouvons simplement écrire un test ici. Par exemple, compilez, allez dans le graphique d' événements et si je clique avec le bouton droit de la souris et recherche test, ou désolé, test d' événement trouvera ce nouveau test de soulignement de notification d'anime et cet événement s'exécutera chaque fois que notre règle commence sa transition d'idole à MD. Et si vous ne trouvez pas votre événement et son graphe, n' oubliez pas que vous devez compiler votre plan après avoir écrit un nom ici. Nous avons maintenant des paramètres similaires pour notre état. Donc, si je sélectionne mon état de visée ici, vous pouvez voir que nous avons les mêmes paramètres, donc nous avons un événement personnalisé que nous pouvons exécuter dans notre graphique d'événements lorsque notre objectif est entré et également lorsque cet état de visée est laissé. Encore une fois, comme avant, si j'ajoute un nouvel événement, je vais appeler cela commencé. Nous allons compiler, aller dans le graphique de l'événement et je vais chercher l'événement visé. Et vous pouvez voir que notre événement a également commencé ici. Nous avons maintenant ajouté un nouvel état, donc notre locomotion, et nous avons ajouté les règles de transition vers et depuis cet état, mais nous n'avons pas encore configuré code pour contrôler cette variable. Nous venons de le modifier manuellement ici. Je vais donc vous montrer quelques façons de contrôler les variables de notre plan d'animation à partir du plan de personnage. Pour commencer, nous pouvons aller au graphique d'événements. Il trouvera le plan, à jour l'animation, et cela exécutera chaque image et mettra à jour les variables que nous y connectons. Nous pouvons donc ajouter une nouvelle branche ici. Ensuite, nous obtiendrons notre personnage parce que nous voulons obtenir des informations de notre personnage qui traînera et nous pouvons faire des coûts pour la personne, connectez-vous à la séquence. Maintenant, nous devons ajouter un système de nommage à notre personnage. Nous allons donc le compiler et aller à notre plan de personnage, qui se trouve dans les plans à la troisième personne que le personnage à la troisième personne. Maintenant, ne vous inquiétez pas trop si vous n'avez pas ce code. Ceci est tiré de notre leçon de montages. Nous allons donc simplement faire défiler vers le haut ici. Je vais cliquer avec le bouton droit de la souris et rechercher gauche de la souris. Et nous allons utiliser le bouton gauche de la souris. Et nous allons créer une nouvelle variable appelée is aimed. Comme ça. Nous voulons en sortir cette traînée et faire f. Et si notre objectif est actuellement vrai, nous voulons le définir sur false. Et s'il est actuellement faux et que nous voulons le définir sur vrai. Je vais donc simplement copier et coller ça et me connecter aux gens et le prendre ici comme ça. Et nous allons compiler, revenons à notre plan d'animation. Et maintenant, nous pouvons simplement obtenir r est visé à partir de notre plan de personnage. Utilisez-le pour définir R est visé dans notre plan ici. Ensuite, nous allons compiler, et maintenant nous pouvons le tester pour qu' il apparaisse sur Play. Si je laisse le bouton de la souris, vous pouvez voir que nous passons cette animation et que nous avons toujours ce temps de transition d'une seconde. Ça va donc un peu lentement. Nous allons donc retourner à notre locomotion. C'est comme la règle. Modifiez la durée, disons 0 pour faire de même pour l'autre règle. Donc 0,2 ici aussi. Ensuite, nous allons le compiler, et maintenant nous pouvons le tester à nouveau. Et je vais appuyer sur le bouton gauche de la souris. Vous pouvez voir que nous sommes en train de passer à cette animation. Cela fonctionne, mais vous avez peut-être beaucoup de code en cours dans votre plan d'animation. Et vous n'avez pas besoin que ce code soit exécuté à chaque image. Ce que nous pouvons faire, c'est que si nous supprimons ceci, nous pouvons définir le code à partir de notre ThirdPersonCharacter. À la place. Nous allons passer au personnage ThirdPerson. Nous allons récupérer notre composant de maillage, le faire glisser et obtenir une instance M. Si vous vous souvenez, cela nous donne une référence à notre plan d'animation, mais nous devons quand même coûter de l'argent à notre soulignement ABP parce que c'est notre plan d'animation. Et nous allons faire en sorte que ces deux nœuds exécutent ce code. Peu importe si nous visons ou non. Ensuite, nous voulons traîner et nous voulons ne pas le faire. Nous permet maintenant de définir notre variable cible. C'est le plan d'animation. Et nous voulons juste obtenir r est visé à partir de ce plan et l'utiliser pour le définir. Maintenant, nous pouvons tester cela si je peux tirer, appuyer sur play, et quand je clique avec le bouton gauche de la souris et que je vois que cela fonctionne toujours en utilisant le nouveau code que nous venons d'écrire. Vous remarquerez peut-être que si nous laissons le bouton de la souris et que nous commençons à nous déplacer, nous n'obtenons plus d' animations de mouvement. C'est parce que nous n'avons pas réellement mis en place règles pour passer de notre objectif. Si nous revenons à la locomotion de notre objectif à notre marche slash run. Donc, il va rester coincé dans notre objectif jusqu'à ce que nous nous débarrassons du clic gauche de la souris et qu'il passe au ralenti. Et si nous nous déplaçons, il passera alors à la marche. Nous pourrions donc ajouter de nouvelles règles ici qui font la transition de la cible à la marche slash croupe. Donc, nous allons sortir de la visée et aller marcher slash run comme ça. Et nous allons utiliser le même code que celui que nous utilisons depuis notre idole ici où il est dit « devrait bouger ». Nous allons donc ouvrir cette règle. Nous obtiendrons la variable should move. Cela sera vrai. Si notre personnage bouge, nous retournerons à la locomotion et compilerons. Et maintenant, lorsque nous appuyons sur Play, si je laisse le bouton de la souris, vous pouvez voir nous visons et que si je commence à bouger, nous sommes revenus à nos animations de marche slash run. Et vous le voyez, si je quitte le walk slash running, nous revenons à nos objectifs et nous pouvons annuler le nom, comme nous l'avons fait auparavant. Enfin, je voulais juste couvrir les pseudonymes de séjour. Donc, si nous quittons l'éditeur de plan ici et revenons à notre plan d'animation, les alias de séjour sont vraiment pratiques pour un peu les états de votre animation. Nous allons donc en créer un exemple rapide. Nous allons cliquer avec le bouton droit de la souris et utiliser un alias d'état et nous allons simplement appeler cela des vérifications ciblées. Par exemple, notre vérification d' objectif est sélectionnée ici. Nous allons nous connecter à notre objectif. Et nous allons utiliser cette nouvelle règle pour déterminer si nous devons ou non entrer dans l'état visé. Nous allons donc viser et connecter ça comme ça. Ensuite, nous allons supprimer ces règles qui se rattachent à notre inactivité, à nos objectifs. Nous allons également supprimer la règle qui le relie à la course de ceinture de marche. Ces deux blocs ne sont donc plus connectés. Mais si nous sélectionnons nos vérifications d' objectif ici, nous pouvons choisir les États pour lesquels nous voulons qu'il soit candidat. Donc nous pouvions prendre le ralenti et nous pouvions rentrer à la maison en marchant slash run. Cela signifie que si nous sommes dans notre état inactif ou notre barre oblique exécute cet alias, nous exécuterons cette vérification. Nous n'avons donc pas besoin de connexions directes depuis l'un ou l'autre de ces états. Deux sont visés parce que nous utilisons maintenant cet alias avec ces deux états tectoniques. Ainsi, lorsque nous serons dans ces états, toutes les règles qui y sont liées seront exécutées. Nous devons maintenant mettre en place un moyen de passer de nos animations ciblées à notre ralenti ou à notre marche. Nous allons donc cliquer avec le bouton droit sur Ajouter un nouvel alias d'état. Nous appellerons ça des contrôles de mouvement. En utilisant cela, nous allons créer une règle pour notre inactivité. Et ce sera, vise, doit être faux. Donc on va traîner hors de ses buts et on ne le fera pas. Et nous allons faire défiler vers le haut et ne pas être membre et nous connecter ici. Et puis notre mouvement traînera et nous nous connecterons à notre marche slash run. Et nous ferons la même chose que nous voulons. Est visé, c'est en fait que nous allons utiliser devrait bouger. Parce que lorsque nous commençons à bouger, nous voulons simplement utiliser nos animations de mouvement pour vouloir passer à vrai. Maintenant, une chose que nous devons ajouter à notre règle, entrer notre objectif car nous devons également ajouter que nous ne voulons pas qu'elle s'exécute si nous déménageons. Je vais donc ouvrir notre ici. Nous allons juste ajouter une fin. Nous allons donc le faire et nous allons connecter la sortie à nos résultats. Donc nous voulons et devons bouger, devons être vrais ou ne pas être vrais. Nous voulons que ce soit un booléen NON, PAS comme ça. Donc notre règle ici ne sera vraie que si elle est visée, est vraie et si elle doit bouger est fausse. Donc, juste pour vous donner un résumé très rapide de ce que cela fait lorsque nous sommes dans notre état inactif ou que nos états de course par barre oblique marchée visent à vérifier la course. Et il le fera parce que nous avons ces deux états cochés ici. Et il exécutera toutes les règles qui y sont liées. Il va donc exécuter cette vérification. Il vérifiera est destiné à vrai et devrait se déplacer faux. Et si c'est le cas, nous lancerons nos animations ciblées. Et pendant que nous visons des animations en cours d'exécution, ces contrôles de mouvement s' exécuteront parce que nous avons, oh, j'ai oublié de prendre ça en charge. Nous allons le sélectionner et cocher sont nommés. Donc, parce que nous avons coché notre objectif chaque fois que nous sommes dans cet état, des vérifications de mouvement seront exécutées et vérifieront que ces deux rôles ici pour voir FEV1 sont vrais. Nous allons donc maintenant tester cela. Nous allons compiler, appuyer sur Play, et maintenant nous pouvons viser. Et si je vise et que je commence à bouger, vous pouvez voir que nous commençons à exécuter ces animations de mouvement à la place. Si nous nous arrêtons, nous passons à nouveau dans les animations visées. Ce n'est qu'un bref aperçu des alias. Cela n'a pas vraiment de sens quand nous avons une petite machine à états de locomotion comme celle-ci. Mais si vous avez quelque chose de plus en plus compliqué, vous avez peut-être beaucoup de règles partout. Vous pouvez les utiliser pour mettre de l'ordre dans vos plans d'animation. C'est donc tout pour cette leçon. J'espère que vous en comprenez un peu plus sur les états et les règles de l'animation. 50. Les plans d'animation (mélange des espaces): Salut tout le monde. Dans cette leçon, nous allons examiner de plus près les espaces de mélange d'animation. Maintenant, si vous vous souvenez de notre leçon de présentation du plan d'animation, mélangez les espaces que je devais passer en douceur d'une animation à une autre. Et nous pouvons jeter un coup d' œil à un exemple de cela en entrant dans notre plan d'animation monétaire. Ensuite, nous allons passer au graphe Anim, puis à la locomotion, puis à la marche, à la barre oblique. Ensuite, nous avons un blend space par nœud. Maintenant, ce nœud prend une valeur telle que notre vitesse sol ici et l'utilise pour déterminer quelle animation il doit lire à partir de notre blend space. Si nous sélectionnons ce nœud et que nous allons dans le panneau Détails, nous pouvons trouver l'espace de mélange qu'il est configuré pour utiliser ici dans l'option Espace de mélange. Si vous survolez, enregistrez le nom du blend space. nôtre est donc le MMwalk run. Nous pouvons également cliquer sur ce bouton ici pour accéder à cet espace de mélange. Nous allons donc le faire et ensuite l'ouvrir. Comme vous pouvez le voir, nous avons cette vue graphique ici, et c'est là que nous définissons nos animations pour les différentes vitesses. Donc ici, vous pouvez voir que la vitesse est de 0, et ici la vitesse est de 500 pour 0. Si nous survolons ce point, vous pouvez voir que l'animation actuelle est l'animation sans rendez-vous. Ensuite, à la valeur 230, nous avons une animation différente et c'est notre animation avancée. Enfin, à la fin, vitesse 500, nous jouons ou exécutons de l'animation. Si je maintiens Ctrl enfoncé et que je déplace ma souris le long de la chronologie, vous pouvez voir que l'animation change à mesure que la valeur augmente. Ainsi, à mesure que nous approchons de notre animation de course, vous pouvez voir qu'elle se rapproche de cette animation. C'est donc ce qui nous permet de faire transition en douceur entre, disons, une animation de marche et je lance une animation et il utilise cette valeur de vitesse, que notre plan d'animation fournit ici, et c'est notre valeur de vitesse sol. Maintenant, je vais courir à pied. L'espace de mélange est un blend space 1D, ce qui signifie qu'il ne possède qu'une seule variable qui contrôle l' animation en cours de lecture. C'est notre valeur de vitesse ici. Mais nous pouvons également avoir des espaces de mélange qui utilisent deux variables. Nous pouvons avoir une direction et une vitesse qui contrôlent l'animation à jouer. Pour cette leçon, nous allons configurer un blend space 2D. Pour ce faire, nous allons nous diriger vers le navigateur de contenu. Je vais juste aller dans le dossier Animations. Dans le dossier des mannequins, nous allons cliquer avec le bouton droit de la souris, accéder à l'animation. Ensuite, vous voulez trouver l'option blend space. Vous pouvez voir qu'il y a l'option 1D ici, ou l'espace de fusion ici, qui est le 2D. Nous allons donc sélectionner celui-là. Ensuite, nous allons choisir un squelette. Je vais utiliser le squelette fourni avec le modèle à la troisième personne. Donc c'est ce haut ici, vous pouvez voir que le chemin est composé de quatre personnages, mannequins et puis des maillages. Nous allons donc sélectionner cela et cela ne portera pas de nom à l"espace de mélange de marche ciblé. Et nous allons ouvrir ça. Maintenant, ici, vous pouvez voir que nous avons un graphique similaire à celui de notre 1D. Mais au lieu d'avoir uniquement la valeur horizontale, nous avons également une valeur verticale qui nous permet de définir des animations n'importe où sur ce graphique. Ensuite, nous serons en mesure de les contrôler à la fois avec une variable de direction et une variable de vitesse. Pour commencer, nous devons renommer et configurer ces axes. Nous allons donc commencer par l'axe horizontal ici. Vous pouvez cliquer sur le menu déroulant s'il n'est pas ouvert pour vous, nous allons nommer le nôtre par direction, car cet axe contrôlera la direction que les animations que nous voulons jouer utilisent. Ensuite, nous voulons que la valeur minimale de l' axe soit un ou moins un AT et que la valeur maximale soit 180. Cela signifie que nous pouvons définir une animation pour chaque direction que prend notre personnage. Ensuite, nous devons définir l'axe vertical que vous puissiez simplement l'ouvrir ici. Et nous allons mettre celui-ci en vitesse. Maintenant, la valeur maximale que je vais définir est 600, et nous allons laisser la valeur minimale à 0. Ainsi, toutes les animations que nous placerons en bas du graphique seront utilisées lorsque notre personnage est inactif ou ne bouge pas. Ensuite, au fur et à mesure que nous avançons, les animations seront utilisées pour des vitesses de déplacement plus rapides ici. Maintenant, quelque chose que j'aime faire est d'activer l'option d'accrochage à la grille sur l'axe horizontal , puis sur l'axe vertical. Et ce que cela fera, c'est que lorsque nous faisons glisser nos animations, elles s'alignent sur ces points de la grille. Maintenant, c'est une préférence personnelle, mais je recommande de les activer. Cela facilite grandement la configuration de vos animations. Nous sommes maintenant prêts à définir des animations dans notre blend space. Nous allons commencer par l'animation qui est utilisée lorsque nous sommes à la vitesse 0. Pour cela, je vais rechercher idle dans notre navigateur d'actifs ici. Et je vais utiliser le fusil au ralenti ADS. Maintenant, si vous n'avez pas ces animations, vous pouvez regarder le début de la leçon de montage et je vais vous montrer comment ajouter ces animations à votre projet. Mais si vous le faites, nous pouvons simplement le faire glisser et nous voulons qu' il soit au centre en bas, donc je vais simplement le déposer ici. Nous allons également l' ajouter en bas à gauche et en bas à droite ainsi. La raison pour laquelle nous faisons cela est parce que c'est lorsque notre vitesse est égale à 0, donc notre personnage ne bouge pas, donc notre valeur de direction n'a pas d'importance. Tout ce que nous avons à faire est de lancer notre animation inactive. Ensuite, nous avons besoin d'une animation avancée, sera qui sera jouée lorsque notre direction est égale à 0. Il sera donc au sommet ici. Pour cela, je vais chercher FWD et le navigateur de ressources, et nous allons utiliser l'animation Fusil Walk Forward. Faites-le glisser et déposez-le en haut ici. Maintenant, si nous maintenons le contrôle, nous pouvons faire glisser et nous pouvons réellement voir notre animation de marche fonctionner alors que nous faisons glisser notre valeur vers l'animation de marche avant. Ensuite, nous avons besoin de notre animation vers l'arrière. Donc pour cela, nous allons rechercher sera DEO. Et nous allons utiliser le fusil pour reculer. Et nous allons le brancher sur le point le plus à gauche ici. Et aussi à l'extrême droite ici. Maintenant, la raison pour laquelle nous faisons cela est parce que partout où nos personnages 180 directions ou moins un AT les deux vont reculer. Donc, l'un ou l'autre, nous voulons lire cette animation à l'envers. Ensuite, nous voulons notre animation de gauche. Donc, dans notre navigateur d'actifs, nous allons rechercher la gauche et nous voulons que le fusil marche vers la gauche. Je vais donc le faire glisser dans ce point de hanche. Ensuite, nous voulons la bonne animation. Nous allons donc rechercher le bon. Et nous voulons que le fusil marche, non ? Et ça va monter ici comme ça. Maintenant, lorsque nous maintenons le contrôle, nous pouvons contrôler l'animation qui va être lue en fonction de notre direction et de notre vitesse également. Nous allons maintenant utiliser ce nouveau blend space dans notre plan d'animation. Pour ce faire, nous allons passer à notre plan financier. Nous allons maintenant ajouter un nouvel état qui sera utilisé quand, où nous visons et pendant que nous nous déplaçons. ce faire, nous allons cliquer avec le bouton droit de la souris et ajouter un nouvel état. Je vais appeler ce mouvement ciblé comme ça. Nous allons maintenant avoir besoin d' une règle qui va de notre mouvement visé à notre mouvement visé. Et à l'intérieur de cette ligne, nous allons vérifier que c'est vrai. Et nous allons également vérifier si nous déménageons ? Nous allons donc faire un booléen AND et nous voulons obtenir should move. Donc, si les deux sont vrais, nous retournons le résultat. Et cela nous permettra de passer d' ciblé à notre mouvement visé. Nous voulons maintenant revenir au mouvement visé à partir de notre mouvement visé. Nous avons arrêté de bouger. Nous allons donc ouvrir cette règle qui vise. Et nous voulons vérifier si le déplacement doit être faux. Donc, il va se déplacer. Nous voulons utiliser un nœud booléen NOT. Donc PAS booléen. Et puis de retour dans la locomotion, nous devons ajouter une ligne partant de notre objectif pour vérifier que deux sont ciblés parce que si nous sommes déjà en mouvement et que nous commençons à viser, nous voulons passer au mouvement visé État. Nous allons donc faire glisser le contrôle ciblé vers le mouvement ciblé. Et nous allons ouvrir notre Rohit. Et encore une fois, nous allons atteindre son objectif. Et nous voulons également vérifier que cela devrait également être vrai. Donc nous allons devoir bouger comme ça. Ensuite, nous retournerons à la locomotion. Donc, jusqu'à présent, nous avons une configuration qui permet ce que nous visons lorsque des vérifications ciblées sont en cours d'exécution vérifier tout ce que nous visons lorsque des vérifications ciblées sont en cours d'exécution. Et si c'est le cas, nous passerons à l'état de notre objectif. Et si nous visons et que nous bougeons à la place, nous irons vers notre mouvement visé. Maintenant, si nous sommes en visée et que nous commençons à bouger, elle passera de visée à visée en mouvement. Et si nous sommes en mouvement ciblé et que nous arrêtons de bouger, nous passerons à l'état visé. Il y a maintenant quelques autres changements que nous devons apporter. Nous devons sélectionner nos contrôles de mouvement, rester un alias. Nous devons prendre en charge le mouvement ciblé de la hanche et c'est ce que nous faisons. Nous vérifions donc si nous visons et si ce n'est pas le cas, nous voulons revenir à nos animations normales de ralenti ou de course normale à partir de nos états de visée. Maintenant, nous devons changer l'une de nos règles liées à notre vérification de mouvement ici, et c'est celle-ci ici. Donc, si nous l'ouvrons actuellement, il s'agit simplement de vérifier si nous déménageons. Nous voulons changer cela parce que nous avons maintenant un état de mouvement. Nous ne voulons pas passer au walk slash run si nous ne faisons que bouger. Nous devons donc ajouter une vérification pour nous assurer que l'objectif est faux. Nous voulons donc un booléen connu pour cela. Nous allons faire glisser à nouveau vers l'extérieur et renvoyer cette valeur ici. Donc maintenant, si nous revenons à la locomotion, si nous sommes dans le mouvement d'Ames et que nous arrêtons de viser, cela reviendra à notre marche slash run parce que nous avons cette vérification ici que les contrôles visent faux et cela devrait être vrai. Et si c'est le cas, cela nous fera passer du mouvement ciblé ou de la marche slash run. Ensuite, nous devons réellement configurer notre espace de mélange et viser le mouvement. Nous allons donc ouvrir ça. Nous allons sortir du résultat et je vais chercher Blend Space Player. Et nous utiliserons le blend space. Joue une note. Ensuite, nous le sélectionnerons et nous ferons défiler vers le bas jusqu'à l' option blend space en bas ici. Nous devons régler cela sur notre nouvel espace de mélange. C'est donc l'espace de mélange de marche visé ici. Vous voyez qu'il a en fait mis à jour nos entrées pour notre direction et nos variables de vitesse. Donc, pour la vitesse, il suffit de traîner et d'obtenir vitesse au sol comme ça. Maintenant, pour la direction, nous avons besoin d'une nouvelle variable. Pour ce faire, nous allons nous rendre sur le graphique de l'événement. Ici, nous allons créer une nouvelle variable. Nous allons donc le faire maintenant et nous allons appeler cette direction. Et nous voulons que ce soit un flotteur. Nous allons donc définir cela sur un flottant et compiler. Maintenant nous en avons besoin pour mettre à jour chaque image, nous allons donc l'ajouter au code ci-dessous. Nous allons donc ajouter un nouveau stylo à la séquence, créer un nœud défini. Et nous allons connecter cela à notre séquence. Je vais juste double-cliquer sur la ligne pour créer un réacheminement. Maintenant, juste pour que tout soit bien rangé. Pour nous orienter, nous avons besoin de notre vitesse. Nous allons donc cliquer avec le bouton droit et rechercher la vélocité. Et si nous faisons défiler vers le bas, nous devrions trouver l'option vélocité. Ensuite, nous avons besoin de notre rotation actuelle. Alors faisons-le. Nous allons cliquer avec le bouton droit de la souris et utiliser le caractère d'écart et utiliser la variable de caractère d'écart. Faites glisser à partir de là et faites pivoter. Et nous utiliserons la rotation « gets active ». Ensuite, nous allons cliquer avec le bouton droit de la souris et rechercher calculer la direction. Et c'est une fonction intégrée tous les plans d'animation, ce qui est très pratique. Cela nous permet simplement de brancher notre vélocité. Rotation et cela nous donne notre direction que nous pouvons simplement brancher directement à notre note de set ici. Nous pouvons maintenant revenir à notre graphique Anim, puis à la locomotion. Et puis deux sont dirigés vers le mouvement. Et nous pouvons récupérer cette variable de direction, la brancher à notre nœud ici. Maintenant, nous pouvons compiler et essayer. Nous allons donc appuyer sur Play. Si je laisse la souris, vous pouvez voir que nous visons correctement et si je commence à bouger, nous jouons sur de nouvelles animations de marche ciblée. Si je clique avec le bouton gauche de la souris pendant le déplacement, nous revenons à nos animations de course normales. Maintenant, si le vôtre ne fonctionne pas, vous pouvez revenir à la machine d' état de locomotion et vous assurer que toutes les règles que vous avez définies sont correctes. Ils ressemblent donc aux miens en ce moment. Celui d'en bas. Et assurez-vous que dans les contrôles de mouvement le mouvement ciblé est coché. Actuellement, notre personnage n'utilise pas nos animations à gauche, à droite ou en arrière. Et cela est dû à un paramètre que nous avons activé dans le plan de personnage. Nous allons donc aller dans le dossier de la troisième personne, plans, puis ThirdPersonCharacter, et hériter. Nous allons sélectionner le composant de mouvement du personnage. Ensuite, nous allons faire défiler vers le bas jusqu'aux paramètres de rotation et nous allons décocher Orienter la rotation sur le mouvement. Et cela empêche notre personnage faire face à la direction dans laquelle nous nous dirigeons. Maintenant, nous pouvons tester nos animations, compiler et cliquer sur Play. Et maintenant, lorsque je me suis déplacé vers la droite, vous pouvez voir que nous labourons des animations de droite , de gauche ou de gauche, puis des animations en arrière ou en arrière. Maintenant, vous pouvez remarquer que si vous cliquez avec le bouton gauche de la souris et que nous commençons à nous déplacer sur le côté, notre personnage ne se déplace plus sur le côté. Il va juste de l'avant. La raison pour laquelle cela se produit se trouve dans notre plan d'animation. L'état de course de la barre oblique marche utilise uniquement un espace de mélange 1D, il n'a donc pas d'entrée de direction. Tout ce qu'il possède c'est une entrée de vitesse. Et c'est pourquoi le personnage à la troisième personne a activé par défaut, la rotation Oriente vers le mouvement. Maintenant, il y a quelques paramètres supplémentaires dans l'espace de mélange d'animation que je voulais vous montrer. Nous avons maintenant les divisions de la grille, contrôlent le nombre d' espaces que nous avons sur notre grille. Donc, si je l'augmente pour dire huit à huit ici également sur notre axe vertical, vous voyez que nous avons maintenant plus de blocs sur notre grille. Cela est utile si vous utilisez l'option d' accrochage à la grille activée. Et cela vous donne simplement plus de points sur la grille à accrocher pour dire que si vous voulez une animation à un endroit spécifique, vous pouvez augmenter ces valeurs pour obtenir un point d'accrochage. Ensuite, nous avons le temps de lissage. s'agit maintenant du temps nécessaire pour une animation passe à une autre animation. Si nous devions le régler très haut, disons cinq secondes, par exemple. Maintenant, lorsque nous cliquons sur lecture et que je me suis déplacé vers la droite, vous verrez qu'il me faut cinq secondes pour passer à notre animation de déplacement vers la droite. Vous devriez donc généralement utiliser des valeurs plus petites pour cela. Supposons, par exemple, 0,250.25 ici également, juste pour donner un peu de temps de transition entre les déplacements entre les animations. Mais par défaut, ils sont définis sur 0, sorte que l'animation passe instantanément l'une à l'autre. Nous pouvons donc simplement les définir sur 0 pour le moment. Il existe également certains paramètres dans notre plan d'animation. Donc si nous avions cela, nous passerons à la locomotion, au mouvement ciblé. Et si nous sélectionnons ce nœud et que nous faisons défiler vers le bas, vous pouvez voir qu'il y a quelques paramètres supplémentaires ici. Nous avons la pièce viol. Voici donc à quelle vitesse les animations de notre blend space seront jouées. L'un est la vitesse normale, deux serait le double de la vitesse normale. Ensuite, c'est la boucle. En général, vous voulez laisser cette option activée pour les espaces de mélange, mais si vous souhaitez désactiver cette option, vous pouvez la désactiver ici. Nous avons également la position de départ. Donc, si vous souhaitez que les animations commencent à un moment différent de 0, vous pouvez le modifier ici. Enfin, nous avons notre espace de mélange. C'est ainsi que nous changeons l'espace des boutons que nous utilisons réellement sur ce nœud. C'est tout pour cette leçon, mais nous utiliserons des espaces de mélange dans nos prochaines leçons. 51. Les plans d'animation (objectifs des offs): Salut tout le monde. Dans cette leçon, nous allons examiner les décalages de visée. Maintenant, l'objectif des ensembles nous permet de faire en sorte que notre personnage regarde dans une direction spécifique. Cela peut être utile si vous avez une arme et que vous voulez vraiment que le personnage regarde dans la direction pointée par votre caméra. Maintenant, l'objectif des ensembles fonctionne en fait manière très similaire aux blend spaces. Nous avons un graphique dans lequel nous pouvons placer des animations, puis nous utilisons deux variables pour contrôler puis nous utilisons deux variables pour contrôler les animations que nous voulons jouer. Maintenant, faisons-le. Nous allons avoir besoin d'une animation, donc je vais arrêter de jouer à NetTutor ici, je vais utiliser des animations incluses dans le dossier Animations de la leçon. Si vous ne l'avez pas dans vos projets, je montre comment les ajouter au début de la leçon de montage. Donc, si vous y jetez un œil, cela expliquera comment intégrer ces animations à votre projet. Maintenant, si nous faisons défiler vers le bas, nous trouverons les animations EO. Cela signifie « décalage AIM », et vous pouvez voir que nous en avons un bon nombre. Et ce sont des animations pour chaque direction dans laquelle le personnage peut se trouver. Si nous ouvrons cette animation orientée vers le bas ici, par exemple, vous pouvez voir qu'il s'agit d'une animation d'une seule image, ce qui signifie qu'elle n' anime pas réellement le personnage, c'est juste une seule image de notre personnage en regardant en bas. Ensuite, si nous fermons ceci et que nous passons à un autre, dites notre animation ici. Il s'agit d'une animation d' une seule image, mais notre personnage regarde à gauche. Maintenant, en utilisant notre décalage de visée, nous allons recombiner toutes ces animations, puis contrôler celle que nous voulons jouer en fonction des deux entrées variables. Et ces entrées seront la rotation de notre caméra. Et cela nous permettra de contrôler la direction dans laquelle nos personnages sont tournés à l'aide de notre caméra. Pour commencer, nous allons fermer cela et créer un nouveau décalage AME. Je vais le faire à l'intérieur des mannequins, puis des animations. Nous allons donc cliquer sur le bouton Ajouter ici, puis passer à l' animation et vous voulez trouver un décalage plus important, similaire aux blend spaces, c' est-à-dire une option 1D qui vous permet de contrôler l'objectif de ensembles avec une seule variable, mais nous allons utiliser uniquement le décalage de visée normal, donc cela créera l'un d'entre eux. Et maintenant, nous devons sélectionner notre squelette. Je vais sélectionner le squelette fourni avec le modèle à la troisième personne. C'est donc celui-ci ici dans les maillages de mannequins de chemin CSS. Nous savons donc que c'est la bonne. Cela va créer un nouveau A-Master. Je vais donc simplement appeler cela A0. Nous savons donc qu'il s'agit du décalage d'animation visé. Ensuite, nous allons ouvrir ça. Je vais juste faire glisser le mien jusqu'à la barre supérieure. Nous sommes maintenant à l'intérieur de notre déport de visée. Vous pouvez voir qu'il ressemble beaucoup à un blend space. Nous avons notre graphique en bas. Nous avons les mêmes paramètres d'axe horizontal et vertical ici, et nous obtenons notre aperçu en haut ici. Pour commencer, nous devons configurer notre graphique en nommant nos variables ici. Donc notre meilleur pour l' horizontale, nous voulons York. Nous allons fixer le minimum de cinq, U2 moins 90, et la valeur maximale à 90 positif. Cela donnera à notre personnage la possibilité de jouer une animation lorsque nous regardons à droite et à gauche. Ensuite, nous faisons de même pour le pitch. Nous allons donc nommer notre pas d'axe vertical. Et la valeur minimale sera de moins 90 et la valeur maximale sera positive de 90. Cela signifie que nous serons en mesure de définir une animation pour tout le haut et vers le bas. Diapositive suivante, notre espace de fusion est, j'aimerais activer l' option d'accrochage à la grille ici et aussi ici, juste pour que lorsque nous faisons glisser nos animations et que nous sachions qu'elles s' alignent sur option d'accrochage à la grille ici et aussi ici, juste pour que lorsque nous faisons glisser nos animations et que nous sachions des valeurs exactes. Avant de commencer à ajouter des animations à notre décalage de visée, je voulais juste expliquer un peu ce que cela fait réellement. Désormais, l'objectif des sets utilise des animations supplémentaires, ce qui signifie que les animations que nous jouons en utilisant notre décalage de visée ne remplacent pas l'animation actuelle jouée sur le personnage. Ils s'ajoutent à ces animations. Cela signifie que nous pouvons avoir notre objectif décalé en jouant avec notre personnage, en regardant dans une direction tout en jouant, disons, une animation inactive pour le personnage qui respire. Mais pour cela, nous devons modifier l'animation. Nous allons donc utiliser un décalage dans des animations supplémentaires. Maintenant, nous devons le faire toute façon, car nous ne serons pas en mesure de placer ces animations ici tant qu'elles ne seront pas configurées comme additifs. Et je peux vous montrer que si nous faisons défiler vers le bas, nous devrions trouver nos animations A0 en bas. Si j'essaie d'en faire glisser un, vous verrez qu'il ne me le permettra pas et qu'il indique un type d'animation additif non valide. C'est parce qu'actuellement, toutes nos animations A0 ne sont pas encore additives. Nous devons les étudier et les modifier pour utiliser des paramètres additifs. Il existe donc deux façons de procéder. Je vais vous montrer comment modifier ces paramètres dans une animation. Ensuite, nous allons utiliser l'éditeur de matrice pour les modifier tous avec les mêmes paramètres. Cela va commencer par le haut ici. Il s'agit de l'A0, C, C. C'est donc notre animation centrale. Je vais juste double-cliquer dessus pour l'ouvrir. Maintenant, dans les détails de nos actifs, nous allons faire défiler vers le bas jusqu'à ce que nous trouvions les paramètres supplémentaires ici. Et actuellement, vous pouvez voir qu'il n'est pas défini comme additif, ce qui signifie qu'il s'agit simplement d' une animation normale, pas encore configurée en tant qu'animation additive. Maintenant, pour les décalages AIM, nous devons modifier l'espace de maillage, ce qui signifie que cette animation calculera les modifications. Cela devrait donc être fait pour le caractère et l'espace de maillage au lieu de l'espace local pour les décalages AIM, vous devez toujours utiliser l'espace MSS car c'est le seul qu'il prend en charge. Ensuite, nous allons changer le type de pose de base pour l'animation sélectionnée mise à l' échelle ici comme ça. Cela nous permet maintenant de définir une animation que nous considérons comme le point de départ par défaut de cette animation supplémentaire. Donc, pour cette animation, nous sommes au centre, et c'est celle que nous voulons utiliser comme référence. Nous allons donc définir cela sur l' animation dans laquelle nous sommes en ce moment. Nous rechercherons CC et nous utiliserons le fusil MM idle hip, FAI, AOC. Vous voyez, ce n'est que notre animation d'image unique au centre. Maintenant, c'est l'animation que nous allons utiliser pour toutes nos animations de décalage de visée ici, parce que c'est le point central et c'est là que nous voulons que nos animations supplémentaires s'ajoutent. Nous avons maintenant configuré cette animation en tant qu' additif et nous allons pouvoir ajouter à notre décalage de visée maintenant, mais nous devons toujours le faire pour toutes ces animations ici. Nous pouvons maintenant passer en revue chacun à fois et configurer ces paramètres de la même manière, mais il existe un moyen plus rapide de le faire. Nous allons donc enregistrer et aller dans dossier de l' animation de la leçon. Nous allons faire défiler vers le bas, et nous allons simplement sélectionner toutes nos animations de décalage de visée à l'exception de celle du centre car nous l'avons déjà configurée pour que nous gardions le contrôle et sélectionnez toutes ces options ici et continuez jusqu'à ce que nous les ayons toutes. Ensuite, nous cliquerons avec le bouton droit et nous voulons accéder aux actions sur les actifs, puis à la modification en bloc via la matrice de propriétés. Et cela ouvrira cette fenêtre ici. Maintenant, si vous n'avez jamais utilisé cet outil auparavant, il vous permet de sélectionner plusieurs ressources dans le navigateur de contenu et de modifier tous leurs paramètres en même temps. Pour ce faire, je vais simplement cliquer sur les actifs et faire Control a, et cela sélectionnera tous nos actifs ici. Ensuite, dans l'éditeur de propriétés, vous pouvez voir que nous avons les mêmes paramètres lorsque nous étions dans l'animation. Nous allons simplement faire défiler vers le bas ici. Nous voulons trouver les paramètres additifs. Nous allons donc passer de l'absence d'additif à l'espace de maillage comme nous l'avons fait auparavant. Ensuite, nous allons changer cela pour l'animation sélectionnée mise à l'échelle. Ensuite, nous voulons sélectionner l' animation et le week-end. Nous voulons régler cela sur l'animation CC pour notre décalage de visée, nous allons donc le sélectionner. Et maintenant, nous pouvons fermer cela et toutes nos animations utiliseront désormais ces paramètres. Donc si nous en choisissons un au hasard comme notre gauche en bas, vous pouvez voir si je fais défiler vers le bas, nous trouvons les paramètres additifs. Vous pouvez voir qu' elles sont maintenant configurées pour nous. Désormais, toutes nos animations de décalage de visée sont configurées de manière additive. Nous pouvons revenir à notre décalage d'objectif. Je vais donc simplement fermer ces deux animations pour l'instant. Et nous allons aller dans les mannequins puis dans le dossier Animations et ouvrir notre objectif. Je vais juste refaire glisser ça vers le haut. La dernière chose que nous devons faire avant de commencer à ajouter des animations à notre décalage de visée est de définir une animation de prévisualisation. Cela nous donne juste une animation qui prévisualisera notre décalage de visée afin que nous puissions voir à quoi cela ressemble. Il va donc défiler vers le bas ici. Maintenant, pour la pose de base de prévisualisation, nous ne voulons pas utiliser d'animation additive, sinon nous ne verrons tout simplement pas d'aperçu. Nous allons donc rechercher « inactif ». Et nous allons trouver le, je vais utiliser le FAI de la hanche au ralenti ici parce que nos décalages de visée sont en fait pour la hanche rapide, donc nous allons le sélectionner. Alors. Je vais juste enregistrer, puis fermer et rouvrir notre décalage de visée comme ça. Nous sommes maintenant prêts à ajouter des animations à notre graphique ci-dessous. Dans la barre de recherche, je vais rechercher l'animation centrale car c'est l'animation que nous voulons utiliser. Quand est-ce que ton pitch est 0, parce que ce sera le point central. Je vais chercher CC et nous allons le faire glisser au centre comme ça. Vous pouvez maintenant rencontrer ce problème où l'aperçu disparaît. Il semble y avoir un bogue si vous faites défiler la page vers le bas et que nous réinitialisons simplement la valeur de notre aperçu, puis que nous sélectionnons, disons, une animation différente. Nous allons simplement rechercher à nouveau inactif. Je vais sélectionner MFA inactif, puis je rechercherai à nouveau inactif. Nous allons sélectionner notre fusil, notre hanche inactive, notre FAI, comme nous le faisions auparavant et vous pouvez voir maintenant qu'il fonctionne. Je ne sais pas pourquoi ça arrive. Je pense que c'est un bogue moteur, donc j'espère qu'il sera bientôt corrigé. Ensuite, nous devons ajouter d'autres animations. Donc ici, dans la barre de recherche, je vais chercher CU, et cela signifie Center up. Nous allons donc ajouter cette animation ici parce que nous voulons que pour nos personnages centrés sur vos fesses, ce soit 90 dans le terrain. Je vais donc l'ajouter ici. Vous pouvez voir nos avant-premières cassées à nouveau, c'est très bien. Nous le corrigerons une fois que nous aurons fini d'ajouter des animations. Nous allons donc faire une autre recherche et nous allons rechercher C, D. et cela signifie Centre en bas. Nous allons donc l'ajouter au centre en bas ici. Et encore une fois, c'est pour quand R vaut 0 et nos hauteurs moins 90. Ensuite, nous allons faire le côté gauche. Je vais donc chercher L, C, qui signifie centre gauche. Nous allons donc l'ajouter ici. Ce sera pour notre pitch, ou désolé, si vous avez moins 90 ans et notre pitch 0. Ensuite, nous voulons gauche en haut, donc LU, et nous allons ajouter ceci en haut ici, puis Aldi et l'ajouter en bas. Ensuite, nous allons faire le côté droit. Donc nous allons faire LC, RC, c'est le bon centre que nous voulons. Juste en haut. Et c'est ce coup vers le bas qui s'ajoute au coin supérieur droit. Ensuite, nous voulons notre D, qui est juste en bas, et nous l'ajouterons dans le coin inférieur droit comme ça. Et maintenant on peut sauver ça. Ensuite, nous pouvons corriger notre aperçu, afin de faire ce que nous faisions auparavant, qui réinitialise la valeur. Ensuite, nous rechercherons Idle. Je vais régler cela sur notre animation inactive, puis nous rechercherons à nouveau inactif. Et nous utiliserons l'idéal du feu de hanche comme ça. Maintenant, ce bug n'affectera pas fonctionnement de notre décalage de visée dans le jeu. Il ne s'agit que d'un problème d'aperçu, alors ne vous inquiétez pas trop à ce sujet. Mais maintenant, nous pouvons réellement tester cela. Nous maintenons le contrôle et déplaçons notre souris et vous pouvez voir nos personnages utiliser les décalages de visée que nous venons de configurer. Vous pouvez également voir que notre animation inactive est toujours en cours de lecture, même si nous ajoutons en plus de cette animation notre décalage de visée. Et c'est ainsi que fonctionnent les animations supplémentaires. Ils ajoutent les informations supplémentaires à l'animation en cours de lecture. Nous sommes maintenant prêts à le configurer dans Art Animation Blueprint. Donc, ce que nous allons faire, c'est enregistrer ceci et sortir de là. Il s' ouvrira donc avec l'argent Animation Blueprint et nous voulons aller au graphique de l'événement. Donc, si vous n'y êtes pas, vous pouvez simplement double-cliquer dessus et entrer dans le graphe d'événements. Nous allons avoir besoin de deux nouvelles variables. Nous allons donc avoir besoin d'une variable pour notre tangage et notre lacet. Nous allons donc ajouter une nouvelle variable, je vais l'appeler pitch. Et nous voulons que ce soit un flotteur. Nous allons donc le changer en type flottant. Et nous ferons de même pour votre super numéro. Et il est déjà réglé sur un flotteur pour nous. Nous pouvons donc simplement compiler. Ensuite, nous avons besoin de code pour définir réellement ces variables. Donc ça va descendre ici et nous allons commencer par le personnage. Alors, prenez du caractère. Et nous voulons qu'ils obtiennent une variable de type caractère. Et nous avons besoin de la rotation des commandes. Alors, contrôlez la rotation. Et c'est la rotation de notre caméra. Ensuite, nous voulons une rotation de nos personnages, alors optez pour une rotation d'acteurs comme ça. Ensuite, à partir de notre rotation de contrôle faites glisser et nous allons rechercher Delta. Nous voulons que le Delta fasse pivoter une note, et nous voulons insérer b dans notre rotation d'axe comme ça. Maintenant, le nœud delta obtient simplement la différence entre notre rotation de contrôle et notre rotation d'axe. Et c'est dans cette direction que nous voulons que notre personnage fasse réellement face. Maintenant, à partir de la valeur de retour, nous allons rechercher notre point d'interception. Et nous voulons notre interp2. Et nous voulons que ce soit la cible parce que c'est la direction que nous voulons que notre personnage regarde. Et puis pour le moment, nous allons utiliser notre argumentaire sur vos valeurs. Maintenant, nous pouvons cliquer avec le bouton droit de la souris et faire un stylo frappé comme ça. Nous pouvons saisir les valeurs de manière indirecte. Ou si vous les recombinez, nous pouvons les faire glisser et faire et utiliser un nœud make rotator comme celui-ci. Nous pouvons également les brancher ici. Donc je vais prendre le vôtre, brancher sur votre entrée, puis le pitch, brancher dans le pitch et le mettre comme ça. Ensuite, pour le temps delta, nous voulons utiliser le temps delta du monde. Nous allons donc simplement traîner et chercher le monde. Et nous voulons obtenir les paramètres de World Delta. Et puis pour la vitesse Internet, c'est la rapidité valeur renvoyée passera de la valeur actuelle à la cible. Donc plus c' est haut, plus vite a ou B, je vais mettre le mien à 20. Nous pouvons revenir et ajuster cela si nous le voulons. Ensuite, nous devons serrer les angles de tangage et de lacet. Donc pour ce faire, nous allons traîner et faire une pause. Le rotateur de notre hauteur traînera et recherchera la pince. Nous voulons un angle de serrage. La raison pour laquelle nous faisons cela est que, si vous vous souvenez que dans notre décalage de visée, nous avons une valeur minimale de moins 90 et une valeur positive de 90. Nous ne voulons pas de notre pitch ou vous allez au-dessus ou en dessous de ces valeurs. Donc pour eux, nous allons définir moins 90 pour le maximum que nous voulons 90. Ensuite, nous allons copier et coller ceci et insérer les degrés d'angle dans le Z ou la sortie ici comme ça. Nous allons maintenant les utiliser pour définir nos variables. Donc pour le top, pour le pitch, nous voulons définir le pitch. Et quand nous utilisons notre nœud set pitch, puis pour le nœud du bas, nous voulons que set your utilise le nœud set your comme ça. Connectez-les ensemble. Ensuite, nous allons les relier à nos séquences. Ajoutez donc un nouveau stylo, faites-le glisser et connectez-le à notre pitch. Il suffit de double-cliquer dessus pour ajouter un nœud racine. Et nous allons juste le traîner ici juste pour garder les choses bien rangées comme ça. Nous sommes maintenant prêts à ajouter notre décalage de visée à notre graphique Anim. Nous allons donc y aller maintenant. Nous voulons que notre décalage de visée affecte uniquement la moitié supérieure de notre corps, pas la moitié inférieure à cause des effets de la moitié inférieure, cela gâchera nos animations de mouvements. Maintenant, si vous vous souvenez de notre leçon sur les nœuds de mélange, nous avons configuré ici un blend par note d'os qui séparera bas et le haut du corps et nous permettra avoir des animations uniquement sur la moitié supérieure. Et c'est ce que nous faisons ici avec notre emplacement de montage. Nous allons donc ajouter notre objectif, le décalage à ce code ici parce que ce sera le code qui sera joué pour la première moitié. Nous allons donc faire glisser cela juste pour gagner un peu plus d'espace. Maintenant, je vais faire jouer mon décalage de visée avant mon emplacement de montage. La raison pour laquelle nous faisons cela est que si nous jouons un montage, je ne le veux pas, ou je ne veux pas que notre décalage de visée affecte le montage. Donc, si nous le faisons avant, lorsque nous jouons un montage, cela écrasera notre décalage de visée par rapport à notre caisse principale. Nous allons faire glisser et rechercher le décalage AIM. Et nous voulons le plan de décalage de visée. Nous allons donc simplement créer ça comme ça. Nous devons maintenant définir le décalage de visée que nous voulons réellement utiliser. Et c'est la même chose que de définir des blend spaces. Donc, dans le panneau Détails avec les notes sélectionnées, nous allons faire défiler vers le bas. Vous pouvez voir que c'est écrit blend space, mais cela signifie « offset ». Mais nous pouvons cliquer dessus et vous pouvez voir que A0 est là. Nous allons donc sélectionner cela. Juste en guise de remarque, cela pourrait indiquer un décalage pour vous si Epic corrige ce problème. Donc pour moi, il est écrit «  blend space » pour toi. Cela peut indiquer un décalage, mais vous pouvez tout simplement définir votre décalage de visée ici de toute façon. Vous pouvez alors voir notre notice mise à jour. Nous avons nos propres entrées de hauteur, nous allons donc récupérer ces variables et les insérer dans notre nœud de décalage de visée. Nous allons donc saisir votre pitch et le brancher dans le pitch comme ça. Et maintenant, nous pouvons compiler et tester cela. Nous allons donc passer à notre niveau, appuyez sur Play. Vous pouvez voir que maintenant, lorsque je suis et que je regarde autour de moi, notre personnage regarde dans la direction dans laquelle ma caméra est tournée. Si nous commençons à nous déplacer, vous pouvez voir que notre espace de mélange fonctionne toujours avec les animations de mouvement de notre personnage, tandis que nos décalages de visée fonctionnent également. Et si vous regardez de près ou animation inactive est toujours en cours de lecture, même si nous visons dans une direction différente avec notre objectif SAP. Mais maintenant, si je quitte ma vue de visée par un simple clic gauche, vous pouvez voir que mon animation normale pour ne pas tenir d'arme est un peu bizarre. Et c'est parce que nous jouons ce décalage ciblé. Même lorsque nous ne visons pas, nous pouvons le modifier assez facilement dans notre plan d'animation , nous allons donc nous y rendre. Ici, vous pouvez voir que notre décalage de visée a une valeur Alpha. Maintenant, l'un signifie que le décalage de visée est activé et 0 signifie qu'il est désactivé. Donc, si c'est 0,5, cela prendra la moitié de l'influence de notre décalage de visée. Maintenant, nous pouvons le remplacer un booléen pour simplement l' activer ou le désactiver. Nous allons donc sélectionner notre note it, passer à la valeur Alpha dans la valeur Alpha C, désolé, le type d'entrée alpha est actuellement défini sur valeur flottante. Mais si je change cela en valeur booléenne et que je vois que ce total est maintenant activé, cochez la case. Et maintenant, nous pouvons juste attraper la barre est huit. Branchez-le sur l'option activée ici. Et maintenant, quand nous compilons et que nous cliquons sur Play, vous pouvez voir que je ne suis pas visé. Vous verrez que l'animation inactive se comporte correctement. Mais quand je commence à viser, vous pouvez voir que notre décalage de visée recommence à fonctionner. Il existe maintenant un autre moyen d' activer et de désactiver notre décalage de visée. Donc, si nous sortons d'ici et revenons à notre plan d'animation, au lieu de simplement activer ou désactiver ce nœud en particulier, nous pourrions avoir une section entière de code exécutée uniquement lorsque est visé comme true . Donc pour ce faire, nous pouvons rechercher l'outil Blend, et nous pouvons utiliser la Bible des poses de mélange. Et nous l'utilisons dans notre leçon sur les nœuds de mélange. Donc, si vous vous souvenez, nous pouvons prendre ceci, brancher dans notre emplacement par défaut ici, puis nous allons prendre le cœur de déconnexion est visé. Branchez-le sur la valeur active. Donc, si c'est vrai, le vrai code ici s'exécutera. Et si c'est faux, alors le code des gens s'exécutera. Alors quand ce n'est pas le cas, nous voulons que nos codes pointés s'écoulent. Nous allons donc connecter cela à true. Je vais cliquer sur Activer les tests. Il est donc toujours activé. Si nous ne sommes pas visés, nous pouvons simplement copier-coller l'argent de nos états principaux. Branchez-le ici. Cela fonctionnera exactement de la même manière qu'auparavant. Nous pouvons donc compiler Play. Vous verrez que lorsque je vise nos personnages faisant notre objectif ou un nom de fichier séparé, vous pouvez voir que notre animation fonctionne correctement. Comme vous pouvez le voir, les deux méthodes fonctionnent. Lequel tu utilises, c'est à toi de décider. Cette méthode peut être un peu plus facile si vous avez, par exemple, d'autres nœuds que vous voulez qu' il exécute quand il est censé être vrai, parce que vous pouvez simplement les connecter ici et les faire fonctionner. Quand est-ce que c'est vrai ? C'est donc tout pour cette leçon. J'espère que vous comprenez maintenant comment configurer un décalage de nom et comment vous pouvez l' utiliser dans vos projets. 52. Les plans d'animation (courbes et métadonnées): Salut tout le monde. Dans cette leçon, nous allons examiner les courbes d' animation et les métadonnées. Désormais, les courbes et les métadonnées nous permettent d'ajouter des informations supplémentaires à nos animations que nous pouvons ensuite lire dans notre plan d'animation lorsqu'elles sont lues. Pour commencer, je vais vous montrer comment créer une nouvelle courbe. Nous allons donc passer à une animation. Je vais choisir l'animation «  run forward ». Donc pour nous, ce sera dans le dossier Quinn puis sous la R14. Et la raison pour laquelle il se trouve dans le dossier Quinn et non dans l'argent, c'est que, si vous vous souvenez, notre plan de personnage utilise en fait le plan d'animation Quinn. Et en cela, nous avons le jeu d'animation Run 4D. Nous allons ouvrir ça. Et ici, vous pouvez voir que nous avons une chronologie des courbes. Maintenant, pour ajouter une nouvelle courbe, vous pouvez simplement cliquer sur le menu déroulant ici et nous pouvons passer à Courbe AD. Comme vous pouvez le voir, le modèle à la troisième personne est livré avec un tas de courbes intégrées. Celles-ci ne font rien par défaut tant que nous ne les utilisons pas et ne les configurons pas réellement. Mais pour l'instant, nous allons simplement créer nos propres courbes. Nous allons donc monter jusqu'à Créer une courbe, et nous allons lui donner un nom. Je vais appeler mon exemple de courbe comme ça. Et vous voyez que notre exemple de courbe est maintenant ajouté à notre animation. Cette courbe permet maintenant à notre animation de générer une valeur en fonction de l'heure de l'animation à laquelle nous nous trouvons. Donc, actuellement, vous pouvez voir qu'il est simplement réglé sur 0. Donc, lorsque nous jouons cette animation, notre courbe ne fera que générer une valeur 0. Mais nous pouvons modifier cette courbe pour générer une valeur différente en fonction du point de l'animation en cours de lecture. Pour ce faire, nous allons accéder à la liste déroulante de la courbe d'exemple, puis sélectionner Modifier la courbe. Et si vous vous souvenez de notre leçon sur les chronologies, cela fonctionne en fait de manière très similaire à cela. Actuellement, cette valeur sera juste 0 pendant toute la durée de lecture des animations, mais nous pouvons ajouter de nouveaux points. Donc, si je clique avec le bouton du milieu de la souris, cela ajoute un nouveau point pour nous. Et puis, en haut, nous avons l'heure à laquelle ce point est actuellement atteint et sa valeur. Donc, si je règle cela sur 0 ou 0 est actuellement à 0 heure et a une valeur 0. Maintenant, si j'ajoute un autre point, disons une seconde. Donc, à peu près ici, nous allons cliquer au milieu de la souris. Maintenant que cela est sélectionné, vous pouvez voir que l'heure est un et nous pouvons définir la valeur sur quelque chose d'autre comme dix, par exemple, vous pouvez voir que mon point a disparu du graphique, mais si nous cliquons sur ce petit ici, cela ramènera en fait tous nos points de vue. Maintenant, lorsque cette animation est lue à 0 fois, la valeur sera 0. Mais au fur et à mesure que le temps passe, la valeur augmentera le long de cette ligne jusqu'à ce que nous arrivions à 1 seconde et ce sera dix. Ensuite, au fur et à mesure que le temps augmente, la valeur restera dix car nous n'avons pas obtenu de points supplémentaires. Nous pouvons maintenant lire cette valeur dans notre plan d'animation en accédant à la carte à la troisième personne ici. Ensuite, nous voulons accéder à notre plan d'animation. Donc, les animations vont ensuite à l' argent Animation Blueprint. Et dans le graphe d'événements, nous allons ajouter un nouveau nœud. Nous allons cliquer avec le bouton droit de la souris et rechercher une courbe. Nous allons utiliser Get Curved Valley. Vous pouvez voir que nous pouvons mettre un nom de courbe. Il doit donc s'agir du nom exact que nous utilisons pour nos courbes. Voici donc un exemple de courbe orthographié exactement de la même manière avec les majuscules également. Maintenant, si une animation qui utilise la courbe que nous avons configurée est lue, la valeur actuelle sera générée. Nous allons donc ajouter un nouveau stylo et simplement ajouter une chaîne d'impression par exemple. Et nous allons insérer la valeur de retour dans notre chaîne d'impression. Et nous allons compiler. Et nous pouvons le tester. Nous allons donc appuyer sur Play. Et vous pouvez voir qu'aucune animation utilisant cette courbe n'est en cours d'exécution. Notre valeur n'est donc que de 0. Mais si je commence à courir vers l'avant, vous pouvez voir notre valeur augmenter à dix. Il revient maintenant à 0 chaque fois que l' animation est en boucle. Parce que si vous vous souvenez qu' au début de notre animation, c'est 0, puis ça passe à dix. Et puis une fois qu'il arrive à la fin de notre animation , nous allons faire une boucle. Il recommencera à zéro et la valeur r sera 0. Encore une fois, comme dans notre chronologie, nous pouvons souligner ces points ici. Nous pouvons changer la façon dont ils évoluent les uns par rapport aux autres. Donc, ici, nous pouvons choisir quels types de chute seront pour le point. Par exemple, nous pouvons sélectionner l'option automatique et vous voyez maintenant que nous obtenons un effet plus courbe à notre augmentation de valeur. Et nous pouvons utiliser ces petites poignées pour ajuster la façon dont notre ligne change. Nous pouvons également déplacer nos points simplement en les sélectionnant et en les faisant glisser. Maintenant, j'ai sélectionné les deux, donc ça les déplace tous les deux. Mais si je souligne juste un point ici, vous pouvez voir que je peux déplacer ce point pour changer notre valeur à ce moment précis dans le temps. Si jamais vous voulez voir cette valeur, vous pouvez la survoler avec la souris ou la trouver ici. Ensuite, la valeur du temps est ici. Nous sommes actuellement dans l'éditeur de courbes, comme vous pouvez le voir ici. Mais si vous voulez revenir à la vue normale, vous pouvez simplement cliquer sur cet onglet et cela nous ramène à l'onglet que nous voyons normalement. Maintenant, si vous voulez revenir à l'éditeur de courbe, exemple si vous l'avez fermé par accident, vous pouvez cliquer sur courbe et modifier la courbe. Cela nous ramènera ici. Si vous voulez supprimer une courbe, vous pouvez simplement cliquer dessus et cliquer sur Supprimer la courbe et cela éliminera notre courbe pour nous. Vous pouvez désormais avoir plusieurs courbes et une animation. Vous pouvez simplement toucher la courbe et une autre courbe, vous pouvez créer ou réutiliser l'une des courbes qui se trouvent ici. Nous pouvons maintenant ajouter cette même courbe à une autre animation. Donc, si nous partons et que nous allons voir l'argent et ouvrir, disons l'animation de saut. Nous pourrions avoir la même courbe jusqu'ici également. Nous pouvons passer à la courbe AD. Et au lieu de créer une nouvelle courbe, nous pouvons simplement rechercher le nom. Nous allons donc rechercher par exemple. Et vous pouvez voir que notre exemple de courbe est déjà là parce que nous l'avons créé, il existe déjà. Nous pouvons donc le réutiliser, nous allons le créer. Et vous pouvez voir qu'il commence avec les valeurs par défaut de 0. Maintenant, peut-être que dans cette animation, nous voulons qu'une courbe sombre ait des valeurs totalement différentes. Par exemple, nous pouvons cliquer avec le bouton du milieu de la souris et définir cette valeur sur 0. Nous pourrions définir la valeur de départ à moins 100. Et nous allons cliquer sur la petite case juste pour la ramener dans notre vue. Ensuite, nous pouvons cliquer avec le bouton du milieu de la souris à, disons, 2,5 et faire passer cette valeur à 500. Et nous allons récupérer la boîte à nouveau juste pour faire ressortir les deux dans notre vue. Et maintenant, lorsque cette animation joue ou produit des valeurs totalement différentes de notre courbe. Donc, en testant ceci, appuyez sur play et voyez si je cours en avant qui joue toujours notre courbe à partir de cette animation. Mais si je saute, tu verras qu'il augmente de deux valeurs complètement différentes. Ensuite, nous avons les métadonnées, qui sont essentiellement une courbe qui n'a qu'une valeur. Cela vous montre ce que je veux dire que nous pouvons ajouter au saut ici et nous reviendrons à l'onglet ci-dessus. Nous pouvons maintenant supprimer cet exemple de courbe pour le moment. Nous allons donc simplement supprimer la courbe, monter dans les courbes et vous pouvez voir que nous avons des métadonnées. Maintenant, vous pouvez voir, encore une fois, qu'il y a beaucoup de modèles par défaut fournis avec le modèle à la troisième personne. Mais si nous recherchons à nouveau, par exemple , curve, vous verrez que c'est là aussi. Même s'il s'agit d'une courbe, il ne s'agit également que de métadonnées. Nous pouvons donc rechercher une courbe et ajouter notre exemple de courbe comme ça. Comme vous pouvez le voir, sa valeur par défaut est un. Et si nous allons dans le menu déroulant de la courbe, il n'y a pas d'option pour le modifier. C'est parce que les métadonnées agissent comme si vous ajoutiez un booléen à votre animation. S'il est ajouté à l' animation , le booléen est équivalent à vrai. Et si ce n'est pas dans l' animation, c'est faux. Dans notre plan d'animation, cette valeur de retour sera égale à un ou à 0, selon que l'animation possède ces métadonnées portant ce nom. Maintenant, lorsque nous cliquons sur Jouer, vous verrez que lorsque je saute augmente à un, puis diminue à 0. Désormais, les courbes d'animation sont utilisées pour toutes sortes de choses, comme contrôle des animations faciales ou des propriétés à l'intérieur des matériaux. Nous n'allons pas aborder cela dans cette leçon uniquement parce que c'est un peu plus avancé. Mais ce que nous pouvons également faire avec les courbes d'animation c'est de les lire dans notre plan d' animation, comme nous l'avons fait avec nos courbes sur les métadonnées. Un exemple de ce que vous pourriez faire avec les courbes à l'avenir est peut-être que vous avez un projet qui inclut des prises de vue, mais que vous ne voulez pas que le joueur puisse filmer certaines animations . Eh bien, tu pourrais créer une courbe de tir en bloc. Il s'agit des animations dans lesquelles vous souhaitez bloquer la prise de vue. Ensuite, à l'intérieur de votre plan d' animation, vous pouvez lire cette courbe. Et si la valeur est supérieure à 0, vous savez que vous devez bloquer la prise de vue dans votre code. Maintenant, une chose à garder à l'esprit est revenir à notre animation de saut, car nous avons ajouté notre exemple de courbe ici sous forme de métadonnées. Nous ne pouvons pas ensuite ajouter un exemple de courbe sous forme de courbe également. Si nous devions ajouter une courbe, nous avons cherché par exemple, en C, elle n'apparaîtra pas tant que nous n'aurons pas supprimé cet exemple de courbe. Nous allons donc supprimer cela, puis passer à Ajouter une recherche de courbe par exemple. Maintenant, vous pouvez voir qu'il apparaît et nous pouvons l' ajouter sous forme de courbe. Maintenant, si vous voulez savoir où toutes ces courbes sont réellement définies et vous pouvez les gérer, les renommer ou les supprimer. Nous allons accéder au navigateur de contenu. Ensuite, nous allons aller dans le dossier des mannequins, puis dans les mailles et nous allons ouvrir SK mannequin. Voici le squelette de notre personnage. Et ici, vous pouvez trouver les courbes de l'anime. Si le vôtre n'est pas ouvert, vous pouvez aller dans la fenêtre et sélectionner les courbes d' anime ici. Maintenant, dans les courbes d' anime également, nous pouvons supprimer des courbes afin que vous puissiez cliquer avec le bouton droit de la souris sur la colonne, appuyer sur Supprimer. Vous pouvez les renommer ou ajouter de nouvelles courbes simplement en sélectionnant Ajouter une nouvelle courbe et en saisissant un nom. Enfin, si nous essayons d' ajouter notre exemple de courbe aux animations de leçon ici et au dossier des animations de leçon. Nous ne serons pas en mesure de trouver nos exemples de courbes. Donc si nous ouvrons, disons le fusil, marchons en avant, je vais dans les virages et je vais la courbe AD et j'ai cherché par exemple, pour voir qu'il n' apparaît pas réellement. Maintenant, si vous vous souvenez de ces animations dans notre dossier Animations de leçon ou en utilisant un squelette différent, elles proviennent de notre personnage. Nous devons donc ajouter manuellement notre courbe à ce squelette pour que ces animations le trouvent. Pour ce faire, nous allons simplement passer au mannequin à deux mailles puis au mannequin SK. Et ici, nous allons aller aux courbes d'anime, qui va faire un clic droit pour ajouter une courbe. Je vais appeler cet exemple de courbe exactement de la même manière que le nom que nous avons donné à notre courbe auparavant. Nous allons appuyer sur Entrée, et maintenant nous avons ajouté cette courbe à notre squelette. Maintenant, nous pouvons fermer ça et retourner à notre fusil, avancer, puis faire deux virages. Nous pouvons ajouter une courbe ou des métadonnées, effectuer une recherche, par exemple, et trouver notre courbe maintenant. Je vais donc simplement ajouter notre exemple de courbe. Je vais le modifier pour ajouter quelques valeurs. Cliquez avec le bouton du milieu de la souris sur un mot et une valeur à 0 pour dix. Ensuite, nous allons recentrer le graphique. Je n'ai pas de valeur, disons un pour 500, comme ça. Nous allons le recentrer juste pour assurer que tout est correct. Maintenant, nous pouvons le tester. Je vais appuyer sur le jeu, viser et avancer. Et vous voyez que notre valeur augmente de cette façon. Maintenant, si le vôtre ne le fait pas et qu'il continue à lire 0 lorsque vous avancez, essayez simplement de tout sauvegarder du redémarrage du moteur. Il s'agit d'un bogue pour le moment avec les squelettes compatibles. Si vous vous souvenez, c'est pourquoi notre personnage peut jouer les animations de nos leçons. Nous avons vu un squelette compatible payant dans la leçon sur les montages, mais il est un peu bogué car il s'agit d'une nouvelle fonctionnalité. Parfois, il suffit de sauvegarder et de rouvrir le projet pour qu'il fonctionne correctement, alors c'est tout pour cette leçon. J'espère que vous comprenez maintenant comment ajouter des métadonnées et des courbes aux animations, puis lire ces valeurs dans Animation Blueprint. 53. Systèmes de jeu (Interaction): Salut tout le monde. Dans cette section du cours, nous allons utiliser tout ce que nous avons appris dans leçons précédentes pour créer des mécanismes de jeu courants. Dans cette leçon, nous allons maintenant créer un système d' interaction de base. Cela nous permettra d' exécuter du code à l'intérieur d' autres objets lorsque notre joueur interagit avec eux. Maintenant, pour ceux d'entre vous qui ont suivi les leçons précédentes, j'ai créé un nouveau modèle à la troisième personne afin de prendre un nouveau départ pour cette section du cours. Donc pour commencer, nous allons aller dans le plan ThirdPersonCharacter, qui se trouve juste dans le dossier de la troisième personne, puis dans les plans. Cela va donc ouvrir ça. Et inspirez, nous allons créer une nouvelle fonction et nous allons appeler ce look que l'acteur va compiler. Il s'agit d'une fonction qui va détecter l' acteur que nous examinons actuellement. Et pour ce faire, nous allons utiliser un tracé linéaire, donc il va glisser vers l'extérieur et nous rechercherons le tracé linéaire. Et nous voulons un traçage de ligne par canal. Si vous vous souvenez de notre leçon sur les tracés linéaires, un traçage linéaire nous permet de détecter des objets entre les emplacements de début et de fin. Cela le rend idéal pour des choses comme un système d'interaction, car nous pouvons détecter si un système d'interaction, car nous pouvons détecter le joueur regarde actuellement un objet. Pour ce faire, nous allons avoir besoin d'un peu de calcul pour déterminer où notre bac de lignes doit commencer et se terminer. Nous allons donc cliquer avec le bouton droit de la souris et contrôler la rotation. Cela nous donne la rotation actuelle caméra de nos joueurs. À partir de là, nous voulons aller de l'avant. Nous voulons donc rechercher get rotation x vector. Ensuite, nous voulons faire glisser à partir de cela et faire un nœud fois ou multiplier. Et nous allons changer l'entrée ici en une valeur flottante. Nous allons donc simplement cliquer avec le bouton droit de la souris pour convertir le stylo, puis sélectionner le flux et nous voulons une double précision. C'est ce que nous allons faire. Ça va les faire reculer un peu. Maintenant, la valeur que nous définissons ici est la distance à laquelle notre personnage peut interagir depuis le lieu de départ. Alors disons que je voulais que les interactions et distance soient de quatre mètres. Je vais mettre 400 ici et nous pourrons le changer plus tard, mais pour l'instant, nous allons simplement laisser ce chiffre à 400. Nous avons maintenant besoin d'un emplacement de départ pour notre traçage de ligne. Maintenant, nous pouvons simplement utiliser l'emplacement de l'acteur du personnage, mais si nous allons dans Viewport, personnages ou l'emplacement seront au centre. Et je préférerais que le tracé de ma ligne vienne de la tête. Donc nous allons retourner voir l'acteur et nous allons avoir l'emplacement de nos os crâniens. Pour ce faire, nous pouvons récupérer le composant de maillage dans le panneau Composants, faire glisser et rechercher pour obtenir l'emplacement du socket. Nous pouvons utiliser ce nœud avec les noms de socket et noms d' os et il nous donnera l'emplacement de cette socket ou de cet os. Je vais mettre le nom de l'os de la tête juste comme ça. Et je vais juste reculer un peu. Ensuite, nous allons intégrer la valeur de retour dans l'action parce que c'est là que j'habite. Trace va commencer à partir de. Ensuite, nous allons avoir besoin d'un nœud étrange. Nous allons donc faire glisser la valeur de retour, est-ce que j'ajoute un nœud ? Et nous allons ajouter la valeur de sortie de r fois notez-le au nœud Add Node à partir du nœud 2 de l'application et l' entrée sur notre trace de ligne. Donc juste pour expliquer, notre tracé linéaire va commencer à l'emplacement de l'os de la tête , puis la fin de notre tracé sera nouveau à l'emplacement du casque, mais nous ajoutons quatre mètres dans la direction dans laquelle notre caméra est tournée. Maintenant, nous pouvons le tester. Nous allons définir le Type de débogage de dessin deux pour une image, sorte que le tracé de la ligne soit visible pour une image. Ensuite, nous devons exécuter cette fonction. Nous allons donc simplement nous diriger vers le graphique d'événements, cliquer avec le bouton droit de la souris et rechercher une technologie. Et nous allons ajouter une technologie d'événement, qui va le faire temporairement pour tester que tout fonctionne. Ensuite, nous allons récupérer l'acteur Lookout et le connecter ici et compiler. Maintenant, nous pouvons tester cela pour lancer le jeu. Et c'est un peu difficile de voir la trace de la ligne parce que nous avons la tête sur le chemin. Si nous appuyons sur F8 pour rejeter notre souris et que nous nous déplaçons, vous pouvez voir que la trace de la ligne commence notre tête et qu'il avance de quatre mètres dans la direction pointée par notre caméra. Ensuite, nous voulons stocker ce que la trace de ligne atteint réellement. Nous allons donc sortir des planètes vers ici, revenir à notre ThirdPersonCharacter, puis à notre fonction d'acteur de recherche. Et nous allons avancer jusqu'au bout. Maintenant, nous voulons ajouter une nouvelle variable qui stocke le résultat obtenu à partir de notre trace de ligne. Nous allons donc simplement faire glisser à partir ici et faire une promotion en variable. Et nous allons le nommer, regarder le résultat de l'impact comme ça. Maintenant, nous pouvons utiliser cette variable plus tard pour détecter ce que notre personnage regarde actuellement. Maintenant, je vais également créer une variable pour cette valeur 400 ici. Nous allons donc faire glisser et faire à nouveau favorise la variable. Et cela ne fera que créer un flotteur pour nous. Et je vais appeler cela distance d'interaction. Maintenant, nous allons le faire afin de pouvoir facilement modifier notre distance d'interaction pour notre trace linéaire. Vous pouvez donc voir qu'il est simplement réglé sur 400. Et si nous le voulions plus tard, nous pourrions ajuster cela dans les paramètres de la classe ici. Donc au lieu de devoir entrer en fonction pour changer la distance, nous pouvons simplement aller ici et la changer facilement. Et pour garder les choses organisées, nous pouvons également lui attribuer une catégorie, donc je vais la sélectionner et nous allons changer le nom de la catégorie en interaction comme ça. Vous voyez maintenant qu'il y a une petite catégorie d'interaction dans laquelle nous pouvons conserver toutes ces variables. Et si nous passons aux valeurs par défaut des classes, nous devrions avoir une catégorie d'interaction, si nous pouvons pomper, compiler d'abord, puis passer aux valeurs par défaut de classe et vous verrez que nous avons maintenant une catégorie d'interaction et nos variables de distance d'interaction. Ensuite, nous allons changer notre acteur de surveillance pour qu' fonctionne avec une minuterie au lieu de le faire sur la technologie. Et si vous vous souvenez, on tech exécutera chaque image. Donc, si vous obtenez, disons, 200 images par seconde, cela sera exécuté 200 fois. Ce qui est un peu excessif pour notre acteur de casiers. Au lieu de cela, nous allons utiliser un minuteur. Donc je vais juste récupérer la planète Begin. À partir de là, nous allons faire glisser et faire fonction func par minuterie. Nous voulons régler la minuterie par nom de fonction. Nous pouvons maintenant supprimer notre acteur local ici. Cela nous permet d' exécuter une fonction à un moment donné. Nous allons donc définir le nom de cette fonction pour qu'elle regarde AXA. Maintenant, le nom doit être orthographié exactement de la même manière avec des majuscules, sinon cela ne fonctionnera pas. Ensuite, nous allons nous attaquer au looping. Ensuite, nous allons régler le temps à 0,03. Cela signifie que notre fonction d'acteur de surveillance s' exécutera 30 fois par seconde. Cela peut sembler beaucoup, mais pour une seule trace, ce n'est pas grave. Cela signifie que lorsque nous regardons autour de nous avec notre appareil photo, nous obtenons les informations les plus récentes. Maintenant, une autre chose que nous pouvons faire est de stocker cette valeur de retour et c'est notre compteur de minuterie, juste au cas où nous voudrions arrêter ce minuteur, peut-être pour que notre personnage meure. Nous ne voulons plus que l'acte de surveillance trace l'exécution, nous pouvons donc utiliser le gestionnaire de minuterie pour l'arrêter. Nous allons donc simplement faire glisser pour promouvoir la variable, et nous allons simplement appeler ce look actor timer comme ça. Donc maintenant, si jamais nous voulions l'arrêter, nous pouvons utiliser cette variable pour le faire. Nous avons maintenant notre regard sur la configuration fonctionnelle active. Nous devons maintenant ajouter une nouvelle interface dans laquelle nous pouvons ajouter deux autres plans pour exécuter des événements et du code lorsqu'ils interagissent avec eux. Nous allons donc simplement compiler et enregistrer cela et aller dans le navigateur de contenu. Nous cliquerons avec le bouton droit de la souris et nous allons ajouter une nouvelle interface de plan directeur. Nous allons donc passer aux plans et ensuite nous voulons l'interface du Blueprint ici, et nous allons nommer ceci, je vais appeler mon interaction de soulignement BP , une interface comme ça. Et nous allons l'ouvrir. Et je vais juste ajouter le mien dans la barre du haut ici. Maintenant, si vous vous souvenez d'après notre vidéo d'interface, nous ne faisons aucun codage ici. Tout ce que nous faisons est d'ajouter de nouvelles fonctions et de leur donner des entrées et des sorties. Nous avons déjà une nouvelle fonction qui commence par l'interface. Nous allons donc simplement cliquer avec le bouton droit et le renommer. Je vais appeler le mien «  Interact » comme ça. Nous allons compiler et ajouter de nouvelles entrées maintenant. Et ce sont des informations que nous allons envoyer depuis le plan de notre personnage joueur vers n'importe quel plan avec lequel nous interagissons. Ce que j'aime faire, c'est ajouter une référence de caractère juste pour que nous puissions accéder aux informations du personnage qui a interagi avec le plan que nous exécutons ce code. Nous allons donc rechercher un caractère, utiliserons la référence de l'objet de type de caractère. Je vais juste donner un nom à ce personnage. Maintenant, bien sûr, dans le futur, si vous vouliez leur envoyer des informations du personnage vers le plan avec lequel il interagit. Vous pouvez ajouter de nouvelles entrées ici. Nous avons maintenant notre fonction qui s'exécutera chaque fois que notre joueur interagit avec un plan, mais nous pouvons également ajouter des fonctions supplémentaires. Je vais donc en ajouter un. Et nous allons appeler cela autoriser l'interaction. Et nous allons ajouter une sortie pour celui-ci. Nous allons donc ajouter une nouvelle sortie. Et nous allons définir cela comme une valeur booléenne, et nous allons simplement nommer cette valeur de retour comme ça. Cela nous donne maintenant une nouvelle fonction que nous pouvons vérifier avant d'exécuter la fonction Interact, juste pour nous assurer que l'interaction est activée sur le plan avec lequel nous interagissons . Nous allons maintenant ajouter une fonction supplémentaire. Nous allons donc ajouter une fonction, puis nous allons appeler ce nom d'interaction. Ensuite, nous ajouterons une nouvelle sortie. Et ça va s' appeler « nom ». Et nous allons définir le type de variable deux textes comme ça, puis nous allons compiler. Cela nous permet maintenant de définir un nom personnalisé dans n'importe quel plan que nous ajoutons à notre tube d'interface d' interaction. Ensuite, nous allons ajouter quelques textes à notre écran afin que lorsque le joueur regarde un objet, il affiche le nom que nous fournissons à l'aide de cette fonction. Maintenant, tout cela s'est ajouté. Nous pouvons le compiler et l'enregistrer. Maintenant, pour revenir au personnage à la troisième personne, nous avons besoin de certains événements d' entrée pour exécuter notre code interactif. nous suffit maintenant de cliquer avec le bouton droit de la souris et de rechercher les événements d'entrée temporaires que nous avons utilisés auparavant. Mais au lieu de cela, nous allons aller dans les paramètres de notre projet et ajouter correctement une entrée. Nous allons donc accéder à Modifier les paramètres du projet. Et ici, nous voulons aller dans la catégorie Input. Et maintenant, nous voulons ajouter un mappage d'actions. Nous allons donc passer à Action Mappings. Nous allons cliquer sur le bouton Ajouter un mappage d'actions. Et nous allons appeler cela interagir comme ça. Ensuite, nous cliquerons sur le clavier et vous pourrez choisir n'importe quelle touche, je vais appuyer sur E, de sorte que ce soit E. Maintenant que c'est configuré, nous allons revenir à notre personnage avec le bouton droit de la souris et rechercher interagir. Et nous voulons que l' interaction sous les événements d'action ici ajoute notre contribution. Nous allons maintenant ajouter le code qui indique à l'objet que nous examinons d'exécuter son interface d'interaction. Donc pour ce faire, nous montons à l'affût, appuyons sur Résolu, et nous allons sortir de là et nous allons le casser. Et nous allons cliquer sur la petite flèche vers le bas ici pour obtenir toutes les variables ou faire glisser vers l' extérieur de Hit Actor. Et nous allons rechercher Interact. Et nous voulons que le message Interact soit affiché ici. Maintenant, je vais cliquer à nouveau sur cette flèche juste pour la réduire. Et on peut régler ça un peu. Maintenant, avant de lancer ceci, nous allons d'abord vouloir vérifier que c'est l'acte de violet. Nous allons donc le faire est valide. Nous allons connecter cela à pressé. Et nous voulons également vérifier si autoriser l'interaction est vraie. Nous allons donc faire glisser à nouveau et rechercher Autoriser. Et nous pouvons utiliser la paire Autoriser l'interaction. Branchez-le dans est valide. Ensuite, nous voulons exécuter un nœud de branche. Nous allons donc faire glisser la valeur de retour et faire IF. Et à partir de là, si notre valeur de retour est vraie et que allow interaction est true, nous voulons exécuter notre Interact afin de pouvoir le brancher comme ça. Ensuite, pour notre saisie de personnage, parce que nous sommes à l'intérieur de notre ThirdPersonCharacter, nous pouvons simplement le faire glisser et faire soi-même. Et cela transmettra une référence à ce personnage via la fonction Interact. Maintenant, gardons les choses bien rangées. Nous pouvons en fait mettre tous ces éléments en évidence. Remarquez-le, pas l'événement d'entrée, juste le code que nous avons surligné avec le bouton droit de la souris et nous pouvons faire une fonction réduite. Et je vais juste appeler ça interagir comme ça. Nous pouvons simplement déplacer ça ici. Maintenant, tout ce code se trouve juste à l'intérieur de notre nouvelle fonction d' interaction. Donc, si nous double-cliquons dessus, vous pouvez le voir ici. On peut juste déplacer ça ici, donc c'est un peu rangé. Nous devons maintenant mettre en place un acteur avec lequel notre personnage peut réellement interagir. Il va donc compiler et aller dans le navigateur de contenu, juste pour créer une nouvelle classe de plan directeur. Nous allons le régler sur un acteur. Je vais juste appeler cet exemple d'interaction avec le soulignement BP . Comme ça. Nous allons l'ouvrir et ajouter un nouveau composant. Je vais simplement ajouter un composant cube. Comme ça. Il nous donne juste quelque chose que la trace de la ligne peut atteindre. Mais vous pouvez utiliser un maillage squelettique ou un composant de maillage statique et avoir une mesure personnalisée si vous le souhaitez. Maintenant, une chose à garder à l'esprit est que si vous utilisez un maillage statique ou un maillage squelettique, il doit y avoir une collision car s' il ne s'aligne pas, le tracé ne le touchera pas. Donc, pour vérifier si votre maillage statique est en collision, vous pouvez simplement accéder à son maillage de pile dans le navigateur de contenu. Par exemple, qu'est-ce que Coupa ? Nous pouvons simplement cliquer sur le navigateur Parcourir et contenu pour y accéder. On peut ouvrir ça. Maintenant, ici, vous pouvez aller voir et ensuite descendre à l'endroit où il est dit collision simple. Et ensuite, si quand vous le prenez, vous obtenez ce contour vert clair ici, cela signifie que tout va bien. Il y a collision. Si ce n'est pas le cas, vous pouvez accéder à la liste déroulante des collisions ici, et vous pouvez essayer ces différentes options pour ajouter des collisions à votre objet. Nous utilisons donc ce cube pour savoir qu'il y a une simple collision, donc tout va bien. Nous pouvons ajouter à notre exemple de plan d' interaction. Nous devons maintenant ajouter notre interface d'interaction. Nous allons donc aller dans Paramètres de classe pour implémenter les interfaces informatiques, et nous en ajouterons une nouvelle. Nous allons rechercher une interaction. Et nous voulons l'interface d'interaction BP. Ensuite, nous allons compiler. Maintenant, si nous allons dans notre panneau Mon plan directeur, cliquez sur le menu déroulant pour les interfaces, vous pouvez voir que nous avons toutes nos nouvelles fonctions d' interface que nous ajoutons dans notre interface d'interaction. Maintenant, vous remarquerez peut-être que celui-ci est jaune, mais ceux-ci sont géniaux. C'est parce que, si vous vous en souvenez, notre Interact n'a pas de valeur de retour. Si je clique dessus, cela créera simplement un événement sur notre graphique d'événements. Mais si je clique sur ou autorise l'interaction, par exemple, si vous vous souvenez qu'il y avait une valeur de retour. Cela ouvre donc cela dans un éditeur de fonctions. C'est donc la principale différence ou interaction n'a pas réellement de valeur de retour. Si vous vous souvenez de l'intérieur de l'interface, si nous sélectionnons notre Interact, vous verrez qu'elle n'a pas de sortie, mais que nos deux autres ont des sorties. Et c'est pourquoi ils sont de couleurs différentes. Et si nous cliquons sur Interagir, cela crée un événement. Et si nous cliquons sur Autoriser l'interaction, une fonction apparaît. Pour commencer, nous voulons simplement activer, autoriser l'interaction. Nous allons donc simplement nous occuper de cela. Mais dans vos futurs projets ou fonctions de ce type, c'est pratique car vous pouvez avoir un objet que vous souhaitez interagir de temps en temps et parfois vous voulez le désactiver. Vous pouvez donc simplement renvoyer une valeur différente lorsque vous souhaitez désactiver son interaction. Ensuite, nous avons le nom de l' interaction, nous allons donc simplement double-cliquer dessus pour l'ouvrir. Maintenant, nous pouvons simplement entrer manuellement un nom ici si nous le voulons, mais je vais le faire glisser et le promouvoir en variable. Nous allons donc promouvoir une variable. Je vais appeler mon nom et laisser ça sous forme de textos. Nous allons donc compiler et je vais simplement ajouter une valeur par défaut, telle que default. Nom. Je ne pourrai pas changer ça plus tard. Nous allons donc simplement composant. Nous pouvons donc maintenant ajouter code à notre interaction d'événement. Nous allons donc revenir à notre graphique des événements. Et maintenant que nous avons double-cliqué sur Interagir, cela vient d'être ajouté à notre graphique d'événements. Mais si ce n'était pas le cas, nous pouvions également cliquer avec le bouton droit de la souris sur la recherche d'événement Et nous pourrions également créer cela de cette façon. C'est l'événement qui se déroulera lorsque notre personnage regardera cet objet et appuiera sur a-z soap. Pour l'instant, nous allons simplement faire glisser et imprimer une chaîne. Nous pouvons imprimer une chaîne de caractères avec la valeur du nom par exemple, et simplement la brancher comme ça. Ce qui est bien avec cet événement, c'est que nous avons accès à notre plan de personnage. Peut-être que vous aviez un composant sur votre plan de personnage qui était un inventaire ou un système de santé. Vous pouvez simplement sortir du personnage ici. Nous pourrions utiliser get composant par classe. Et nous pourrions l'utiliser pour vérifier si notre personnage possède un composant spécifique ? Si c'est le cas, nous pouvons utiliser la valeur de retour pour accéder à l'une des variables de ces composants. Ou nous pourrions simplement coûter cher à notre personnage. Nous pourrions donc coûter à ThirdPersonCharacter. Ensuite, en utilisant cela, nous pouvions obtenir des variables ou des fonctions à partir de notre personnage. Nous pourrions donc obtenir, disons, la distance d'interaction si nous le voulions pour une raison quelconque ou si vous ajoutez des variables de santé, sont. Quoi qu'il en soit, vous pouvez l'utiliser pour y accéder. Mais pour l'instant, nous allons simplement lancer notre chaîne d'impression. Je vais donc les supprimer et connecter cette sauvegarde à la chaîne d'impression comme ça. Maintenant, l'une des choses que nous voulons faire est avec notre variable name. Nous voulons juste prendre une instance modifiable. Et si vous êtes membre, cela signifie simplement que lorsque nous ferons glisser notre cube dans notre niveau, serons en mesure de changer ce nom pour chaque cube que nous faisons glisser. Donc maintenant, notre système d'interaction est en fait assez bien configuré. Mais je voulais ajouter un HUD qui indiquerait nom de l'interaction de l'acteur chaque fois que le joueur regarde cet acteur. Pour ce faire, nous allons simplement revenir au dossier de la troisième personne ici, puis aux plans et nous allons créer un nouveau widget HUD. Nous allons donc cliquer avec le bouton droit, accéder à l'interface utilisateur. Nous allons créer un plan de widget. Je vais sélectionner Utiliser un widget. Et nous appellerons ce HUD de soulignement BP, comme ça. Et nous allons l'ouvrir. Maintenant parce que c'est notre HUD principal. Nous allons ajouter des panneaux de toile. Il suffit donc de rechercher Canvas et nous l' ajouterons à notre hiérarchie ici. Ensuite, je vais vouloir que du texte affiche réellement le nom de l' interaction. Nous allons donc également rechercher du texte ici. Et nous l'ajouterons à notre panneau de toile. Et nous allons l'avoir pour qu'il soit au centre. Je vais donc changer l'ancre du texte pour qu'il soit centré comme ça. Et vous pouvez voir que notre position est en désordre. Ce que nous allons faire, c'est sélectionner ceci sur 000 comme ça. Vous pouvez donc maintenant voir où est centré. Je veux que le centre du texte soit au centre du texte. Donc ce que nous allons faire c'est faire un alignement, faire 0,50,5 comme ça. Vous pouvez donc voir que le texte est désormais centré. Maintenant, je veux que mon texte soit un peu plus haut, donc je vais maintenir la touche Maj enfoncée et faire glisser le curseur vers le haut. Cela me permettra de déplacer nos textes et une direction et de les verrouiller dans cette direction afin que vous puissiez voir que je peux les déplacer vers le haut. Dis ici. Maintenant, je vais changer la police juste pour la réduire un peu. Donc on va dire 20. Et nous allons compiler. Maintenant, vous pouvez passer autant de temps que vous le souhaitez pour que le texte soit beau. Je fais ça rapidement pour qu'on puisse le faire fonctionner. Nous devons donc d'abord masquer nos textes lorsque nous ne regardons pas réellement un objet. Ce que nous allons faire, c'est utiliser la visibilité ici. Nous allons créer de nouvelles liaisons. Nous allons donc faire ou cliquer sur lier et créer une liaison. Avec cette option ouverte, nous devons déterminer quand nous devons rendre ce texte visible puis masqué. Pour ce faire, nous allons avoir besoin de certaines variables de notre ThirdPersonCharacter. Nous allons donc avoir besoin d' une référence à cela. Nous allons donc commencer par accéder au graphique d'événements. Nous allons supprimer ce nœud et ce nœud ici. Nous allons récupérer le personnage du joueur. Et à partir de là, nous voulons vérifier s'il est valide ? Donc, c'est valide. Et nous allons connecter cela pour construire. Ensuite, nous allons faire glisser à nouveau et faire Cast to ThirdPersonCharacter. Nous pouvons donc utiliser la sortie de ceci pour stocker en tant que variable. Nous allons donc faire des promotions variables. Je vais juste appeler mon personnage comme ça. Ensuite, je vais mettre en évidence ces nœuds. Et nous allons cliquer avec le bouton droit de la souris et simplement réduire pour fonctionner. Et nous appellerons cela des références de configuration comme ça et nous garderons les choses bien rangées. Et nous pouvons également le réutiliser plus tard. Nous sommes maintenant prêts à revenir à notre fonction d'obtention de visibilité. Et nous voulons retrouver notre caractère. Et nous voulons simplement nous assurer que c'est valide avant d'exécuter du code. Il va connecter ça jusqu'ici. Et s'il n'est pas valide, nous pouvons exécuter nos références de configuration comme ça. Et nous allons utiliser ce nœud de retour, branchez-le ici. Nous allons simplement régler ce paramètre sur Masqué. Donc, si notre caractère n'est pas valide lors de son exécution, il essaiera de définir à nouveau la variable caractère. Maintenant, si la variable caractère est valide, nous voulons la récupérer à nouveau. Ensuite, nous voulons faire glisser et regarder le résultat du coup. On traînait et on faisait une pause. Nous allons étendre ce nœud et nous voulons Hit Actor. Ce que nous faisons est valide. Et s'il est valide, cela le réduira à nouveau. Nous avons donc un peu plus d'espace, ce qui permet de ranger tout ça comme ça. Donc, si c'est valide, nous voulons alors vérifier s'il est interactif ? Nous allons donc faire glisser et autoriser ce genre d'interaction. Et si c'est le cas, nous voulons définir notre visibilité sur visible. Nous allons donc le copier et le coller ici. C'est donc trop visible. On va le brancher comme ça. Une fois que tu auras fini, ça devrait ressembler un peu à ça. Il y a maintenant quelques nœuds dont nous avons besoin. Nous allons donc copier notre valeur de retour, la coller ici et la définir sur masquée. Maintenant, si Autoriser l'interaction est faux, nous voulons masquer nos textes, donc nous allons le faire. Et aussi si l' acteur à succès n'est pas valide, nous voulons également cacher nos textes, donc nous allons le brancher comme ça. Cela couvre donc la définition de la visibilité de nos textes, mais nous voulons également modifier le nom de l'interaction. Ce que nous allons faire, c'est copier ce code parce qu' il y aura le même. Nous pouvons donc copier tout cela et cela également. Ainsi, il s'assure que tous les nœuds sont mis en surbrillance ici font Control C. Ensuite, nous allons aller dans le concepteur, sélectionner notre texte ici. Et nous voulons aller au texte et lier, puis créer une liaison. Et ici, nous allons coller ces notes. Et je vais faire en sorte que le nœud de début se connecte jusqu'à r soit valide comme ça. Maintenant, il faut qu'on fasse l'amour. Donc celui-ci se brancherait simplement ici. Et nous ne voulons pas renvoyer de textos pour cela, donc nous allons simplement laisser ce champ vide. Nous allons le copier et le coller ici. Maintenant, une fois que nous savons que l'option Autoriser l'interaction est vraie, nous voulons obtenir le nom de l'interaction. Nous allons donc sortir du réacteur pour faire le nom de l'interaction. Et nous allons connecter cela à vrai. Maintenant, si l' interaction est fausse, nous voulons simplement renvoyer une valeur vide. Faisons ça. Ensuite, nous allons le copier et le coller à nouveau, le coller ici, et connecter name jusqu'à la valeur de retour comme ça. Ensuite, nous pouvons compiler. Et une fois que c'est fait, ça devrait ressembler un peu à ça. Maintenant, la dernière chose que vous devez faire est ajouter notre écran difficile à lire. Pour ce faire, nous allons aller au ThirdPersonCharacter Blueprint, ce graphe d'événements. Nous allons l'ajouter à notre page Commencer le jeu. Nous allons cliquer avec le bouton droit et créer un widget. Raccordez-le à nos notes. Et en possédant Player, nous allons simplement faire Control, obtenir un contrôleur de joueur. Comme ça. Nous devons définir la classe sur le hub que nous venons de créer. Donc BP HUD. Maintenant, c'est toujours une bonne idée de stocker cette valeur de retour lorsque vous créez votre HUD principal. Nous allons donc faire glisser vers l'extérieur et nous allons probablement cela vers une variable, que nous appellerons ce HUD. Et c'est juste cela si nous voulons l'utiliser plus tard. Et puis à partir de la sortie de ce nœud d'ensemble, ou recherchez simplement Add to Viewport comme ça. Et cela ajoutera notre widget à l'écran de nos joueurs. Nous sommes donc prêts à tester cela. Nous allons compiler et nous diriger vers notre carte. Nous voulons ajouter certains de nos exemples d'interaction au niveau. Je vais donc en ajouter un ici et un autre ici. Et si vous vous souvenez, comme nous avons défini notre nom sur instance modifiable dans notre exemple interactif, nous avons cette valeur ici. Donc pour celui-ci, je vais régler ça pour dire épée. Pour celui-ci. Réglez-le pour qu'il soit quelque chose comme un tuyau comme ça. Maintenant, nous pouvons appuyer sur Play. Et si nous courons sur ce cube , vous pouvez voir qu'il imprime l'épée. Et si j'appuie sur C, vous pouvez voir qu'il affiche le nom de notre exemple d' interaction avec l'épée, et il fera de même avec l'exemple var pi ici. Maintenant, nous pourrions passer un peu plus de temps à ranger nos textes HOD x, c'est un peu difficile à voir. Donc, si nous sortons et ouvrons notre capot, nous pouvons sélectionner nos textes dans la hiérarchie ici. Et d'abord, nous pouvions le centrer pour que notre texte bien centré et nous pourrions également ajouter un arrière-plan. Donc ce que je vais faire c'est faire du rap avec le bouton droit de la souris, et nous ferons du rap avec une bordure. Ensuite, pour notre bordure, nous allons la sélectionner et nous allons définir la taille du contenu, afin qu'il soit redimensionné à la taille de notre texte. Nous pouvons changer la couleur, donc je vais changer la couleur du pinceau en gris. C'est donc un peu plus facile à voir comme ça. Et nous pourrions également ajouter un peu de rembourrage. Nous allons donc sélectionner notre texte et définir le remplissage , disons huit. Cela nous donne donc un peu de rembourrage sur les bords. Et maintenant, nous avons ajouté un nouveau widget. Nous devons également définir sa visibilité. Nous pouvons également réutiliser la fonction de visibilité que nous utilisons pour nos textes. Nous allons donc faire défiler vers le bas, aller à l' option de visibilité ici. Nous allons simplement cliquer sur lier et vous pouvez voir que notre fonction de visibilité antérieure est que nous pouvons la définir. Et maintenant, notre bordure de texte change sa visibilité chaque fois que nous regardons un objet avec lequel nous pouvons interagir. Nous pouvons donc tester cela. Nous allons compiler, revenir en arrière et appuyer sur play. Et maintenant nous pouvons voir notre texte est centré et c'est un peu plus facile à voir parce que nous avons notre boîte grise lorsque nous ne regardons pas quelque chose, vous pouvez voir que nos cases sont cachées avec notre texte. Maintenant, ce que nous faisons lorsque nous pressons et sélectionnons l'un de nos exemples d'interaction est d'imprimer un nom. Mais bien sûr, ce n' est qu'un exemple. Tu peux le changer comme tu veux. Nous pouvons donc passer à notre interaction dans l'exemple ici et demander à l'acteur de dire « détruire » lorsque nous interagissons avec lui. Nous pourrions donc ajouter Destroy Actor. Maintenant, quand nous le compilons et que nous cliquons sur Play, si j' interagis avec les cubes maintenant, vous pouvez voir qu'ils sont tous les deux détruits. C'est donc tout pour cette leçon. J'espère que vous comprenez maintenant comment nous pouvons utiliser les interfaces de Blueprint pour exécuter du code dans d'autres plans, par exemple lorsque nous avons besoin d'un système d'interaction. Dans nos prochaines leçons, nous allons ajouter d'autres fonctionnalités de jeu à ce projet. 54. Systèmes de jeu (dommages): Salut tout le monde. Dans cette leçon, nous allons mettre en place un système de santé et nous allons également utiliser le système de dégâts intégré à Unreal Engine. Pour commencer, nous pourrions simplement ajouter nos variables et fonctions de santé directement à notre personnage à la troisième personne. Mais au lieu de cela, nous allons créer un composant santé. Et la raison pour laquelle nous allons le faire est parce que nous pouvons le réutiliser ainsi que d'autres plans si nous le voulons plus tard . Commençons donc. Nous allons cliquer sur le bouton Ajouter dans notre navigateur de contenu, accéder à la classe Blueprint et nous allons sélectionner un acteur. Nous choisissons le composant act plutôt que le composant voyant parce que notre composante santé n'a pas besoin d'exister dans le monde. Il a juste besoin de code, nous utiliserons donc le composant actif. Je vais nommer mon composant santé de soulignement BP comme ça. Maintenant, nous allons ouvrir ceci et je vais faire glisser le mien vers la barre du haut comme ça. Nous allons donc commencer par créer quelques variables de santé. Je vais donc ajouter une nouvelle variable. Je vais appeler ça la santé actuelle comme ça. Et je vais définir le mien sur un entier. Tu pourrais utiliser un flotteur si tu le souhaites. Personnellement, je préfère utiliser des nombres entiers pour la santé parce que c'est un nombre entier. Nous allons donc commencer par la santé actuelle et ce sera un entier. Ensuite, nous allons en créer un autre. C'est ce que l' on appellera la santé de départ. Et nous en voulons un autre, s'appellera santé maximale. Enfin, nous voulons une autre variable appelée et subir des dégâts. Et nous allons changer ça pour un brillant parce que c'est vrai ou faux. Ensuite, pour ces trois variables, nous allons prendre une instance modifiable. Nous allons donc simplement le faire maintenant. Cela signifie simplement que lorsque nous ajoutons notre composant de santé à un autre Blueprint, lorsque nous sélectionnons le composant de santé dans son panneau de composants, nous serons en mesure de modifier ces valeurs. Nous allons maintenant compiler et définir une valeur de départ. Donc, pour commencer la santé, je vais régler ce paramètre sur 100. Pour un maximum de santé, réglez-le également sur 100 et vous pouvez subir des dégâts et vous pouvez subir des dégâts, puis compilez. Ensuite, nous allons créer certaines fonctions qui vont réellement changer notre variable de santé. Nous allons donc ajouter une nouvelle fonction que nous appellerons augmenter la santé. Comme ça. Nous allons ajouter une nouvelle entrée et nous appellerons ce montant d'augmentation. Et nous allons définir ce nombre sur un entier comme celui-ci. Ensuite, nous allons compiler. La première chose que nous voulons faire est de nous assurer que notre santé actuelle ne sera pas supérieure à r max. Nous obtenons donc notre état de santé actuel et nous vérifions si c'est inférieur à r max self ? Nous allons donc obtenir des cartes, de la santé. Et nous voulons exécuter ce code uniquement si c'est le cas, si c'est vrai. Il va donc déplacer cela vers le bas et ajouter à notre nœud d'entrée comme ça. Ensuite, nous voulons vérifier si l'ajout du montant, le montant de l'augmentation à notre santé actuelle lui fera dépasser r max santé. Donc, pour ce faire, nous allons obtenir la santé actuelle, ajouter notre montagne accrue maintenant nous pouvons simplement sortir d'ici et le brancher comme ça. Ou nous pouvons sortir d'ici et obtenir une augmentation du montant. Et vous pouvez voir que nous pouvons obtenir cette valeur à partir de notre nœud d'entrée sans avoir à créer de variable. Cela nous permet simplement de l'utiliser ici. Et si cela n'apparaît pas, assurez-vous simplement que vous pouvez extraire l'entrée divisée et vous devriez être capable de la trouver. Ensuite, nous voulons vérifier si cette valeur est inférieure ou égale à max out. Ainsi, il obtiendra une santé maximale. Et si c'est le cas, nous pouvons définir ce montant en fonction de notre état de santé actuel. Nous allons donc le faire et ensuite nous pouvons copier et coller ces pasties de nœuds ici. Nous allons définir la santé actuelle. Ça. Ensuite, si faux, cela signifie que l'augmentation et les valeurs de santé actuelles seront supérieures à r max. Combien de fois voulons-nous simplement copier et coller ceci et dire, je vais aider à maximiser comme ça. Nous pourrions ajouter une note de réacheminement ici, juste pour garder les choses en ordre. Donc une fois que tu auras fini, devrait ressembler à ça. Ensuite, nous voulons une fonction de santé diminuée. Je vais donc le chercher, ou je vais créer une nouvelle fonction et l'appeler la graisse, comme ça. Et encore une fois, nous allons ajouter une entrée à cela, donc je vais agrandir ma fenêtre ici. Pourquoi la nouvelle entrée, et nous appellerons ce montant de diminution. Et nous allons également définir ce nombre sur un entier. Ensuite, nous allons compiler. Maintenant, nous voulons vérifier si notre santé actuelle est supérieure à 0 ? Donc, la santé actuelle est supérieure à 0. Et si c'est le cas, cela permettra ou diminuera la santé de fonctionner comme ça. Ensuite, nous voulons vérifier si notre santé actuelle moins montant de diminution supérieur à 0. Nous allons donc obtenir la santé actuelle et nous voulons faire moins ou soustraire. Nous voulons soustraire notre diminution. Encore une fois, nous pouvons brancher ça comme ça ou nous pouvons faire glisser le montant de la diminution sexuelle et nous pouvons l'ajouter ici. Ensuite, nous voulons vérifier si c' est supérieur à 0 ? Si c'est le cas, nous pouvons permettre que ce montant soit réduit par rapport à notre santé actuelle. Nous allons donc le faire. Nous allons le copier, le coller ici. Nous allons définir la santé actuelle. Et si le montant est inférieur à 0, nous voulons simplement définir notre santé actuelle à 0 parce que nous ne voulons pas que notre santé soit inférieure à 0. Donc, il va juste ajouter une note ici, juste ranger ça, et une fois que vous aurez terminé, cela devrait ressembler à ceci. Maintenant, une chose que j'ai oublié d'ajouter est que nous voulons vérifier si nous pouvons subir des dégâts avant d'augmenter la santé. Nous allons donc traîner cela plus loin, ce qui va attraper notre peut subir des dégâts. Et si c'est vrai, alors nous autoriserons cette fonction Trump. Donc, il va simplement le brancher ici et le vrai ici. Maintenant, nous allons également ajouter des répartiteurs d' événements, ce qui peut être utile car si nous ajoutons notre composant de santé à différents plans, nous pouvons vouloir que quelque chose de différent se produise dans un seul. plan plus qu'un autre lorsque notre santé augmente ou diminue lorsque la santé atteint 0. Nous allons donc commencer par créer un répartiteur d'événements. Et je vais simplement parler d' augmentation de la santé. Comme ça. Nous allons en créer un autre appelé à la diminution de la santé. Ensuite, nous voulons sur la santé 0. Comme ça. Nous pourrions ajouter certains intrants à notre propre augmentation et diminution de notre propre santé. Nous allons donc aller dans le panneau Détails ici et ajouter une nouvelle entrée. Je vais appeler cela « montant de l'augmentation ». Et nous allons le définir sur un entier. Et nous ferons la même chose pour une diminution malsaine. Nous allons donc ajouter une nouvelle entrée et nous appellerons cela le pli. Épelez correctement, diminuez le montant. Allons-y. Et nous allons également définir cela sur un entier. Donc, à l'intérieur ou diminuez la façon dont nous pouvons gérer notre propre santé, diminuez ici. Alors on va faire cool. Branchez-le ici, puis nous voulons obtenir un montant réduit. Je vais donc simplement copier et coller ceci et le brancher ici. Ensuite, pour la santé 0, nous voulons le 0 non santé. Nous allons donc appeler ça, branchez-le ici. Et nous n'avons pas ajouté d'entrée pour cela, nous n'avons donc pas besoin de brancher quoi que ce soit d'autre. Ensuite, nous passerons à notre santé accrue. Et ici, nous voulons une augmentation malsaine. On va le brancher ici. Et nous obtiendrons le montant de l'augmentation comme ça. Nous allons également le brancher ici parce que lorsque nous définirons notre santé maximale, nous l'augmenterons également. Et cela créera une fonction supplémentaire. Et je vais juste appeler cela appliquer la santé de départ. Ensuite, ce que nous allons faire, c'est notre santé actuelle et la régler sur notre santé de départ. Ensuite, nous lancerons cette fonction dans notre graphique d'événements sur Begin Play. Nous allons donc saisir ce qui s'applique au démarrage la santé et le brancher ici comme ça. Ensuite, nous allons compiler et enregistrer cela. Nous pouvons maintenant ajouter notre composante santé à notre personnage. Nous allons donc passer au plan de personnage de troisième personne. Ensuite, je vais agrandir cette fenêtre un peu plus. Et nous allons ajouter un nouveau composant ou rechercher la santé. Nous ajouterons le composant Santé BP, puis nous compilerons. Et avec nos composants de santé sélectionnés dans le panneau Détails, vous pouvez voir que nous pouvons définir notre santé de départ ou notre santé maximale et si le composant de santé peut ou non subir des dégâts. Comme vous pouvez le voir, notre santé actuelle est réglée sur 0, mais ne vous inquiétez pas, elle sera réglée 100 ou à n'importe quel point de départ. La valeur de santé correspond au moment où le jeu commence. Et nous pouvons facilement accéder à ces variables ainsi qu' nos fonctions simplement en les faisant glisser ou en faisant glisser les composants vers l'extérieur, nous pouvons faire la mise , par exemple, cela nous donne accès à variable que nous pouvons appeler notre fonction afin d'augmenter la santé qui exécutera nos fonctions. Et nous pouvons également, si nous voulons lier des événements à ces répartiteurs d'événements. Nous avons donc créé, donc nous pouvions faire un signe, nous pouvions attribuer une augmentation de la santé par exemple. Et cela nous donne un événement et un événement d'achat pour cela. Et cela fonctionnera chaque fois que notre santé augmentera. Et cela nous donne également le montant de l' augmentation ici si nous organisons notre événement Bind en haut. Mais pour l'instant, nous allons les supprimer. Prochaine. Nous devons configurer notre événement de dégâts dans notre personnage à la troisième personne. ce faire, nous allons cliquer avec le bouton droit de la souris et rechercher les dégâts. Utilisera l'événement et les dégâts. Et nous allons récupérer notre composante santé et nous voulons réduire notre santé du montant des dégâts chaque fois que cet événement se déroule. Nous allons donc traîner et rechercher une diminution de la santé. Et nous connecterons ça aux dégâts éventuels. Ensuite, nous voulons des dégâts et les branchons pour réduire le montant. Et vous verrez qu'il nous donne ce nœud qui convertit le flottant en entier. Cela arrondira la valeur à la baisse. Donc, par exemple, si les dégâts étaient de 1,5, cela l'arrondirait à un. Mais nous pouvons faire glisser et faire un tour et utiliser un nœud rond. Et cela l'arrondira à l'entier le plus proche. Donc, si c'est 1,5, je crois qu'il l' arrondira à deux. Si c'était 1,2, cela l' arrondirait à un. Nous allons donc utiliser around node pour cela simplement parce que c'est un peu plus intuitif. Désormais, chaque fois qu' un autre plan appelle l'événement infliger des dégâts à notre personnage, cet événement se lance et diminue notre santé et notre composante santé. Nous allons maintenant créer une zone endommagée dans notre niveau qui, lorsque notre personnage y pénètre, perdra de la santé. Il va donc compiler ça. Mais d'abord, nous allons simplement ajouter une chaîne d'impression ici parce que nous n'avons pas de barre de santé actuellement . Il suffit donc d'ajouter une chaîne d'impression. Et chaque fois que nous subissons des dégâts, nous voulons simplement retrouver notre état de santé actuel. Nous obtenons donc la santé actuelle, imprimons la valeur de santé actuelle afin que lorsque nous subissons des dégâts, nous sachions exactement combien de santé nous avons. Je vais faire en sorte que le texte reste un peu plus longtemps. Je vais donc simplement régler la durée à cinq comme ça. Ensuite, nous allons compiler. Nous allons maintenant passer au navigateur de contenu. Nous allons ajouter un nouveau plan, l'acteur de classe Blueprint. Et je vais faire défiler vers le bas et nous allons juste appeler cette zone de dommage de soulignement BP. Comme ça. Nous allons le faire glisser dans le niveau et l'ouvrir. Pour cela, nous allons simplement ajouter une collision de boîte afin de savoir quand quelque chose se chevauche. Nous allons donc ajouter une collision de boîtes. Je vais le traîner un peu pour qu' il soit au même niveau que le sol. Ensuite, nous allons dans le graphique de l'événement et nous allons supprimer le jeu de début et la technologie. Et nous allons utiliser l' événement que l'acteur a commencé à se chevaucher. Et nous allons nous éloigner de l'autre acteur, ce qui va appeler « Appliquer des dégâts ». C'est l'événement qui va réellement appeler les dégâts à l'intérieur de notre personnage à la troisième personne, nous pouvons définir le montant des dégâts. Je vais donc lui dire comme ça. Nous pouvons maintenant fournir un instigateur d'événement, et il s'agit d'un contrôleur de joueur. Nous ne l'utiliserons pas pour les zones endommagées uniquement parce qu'aucun joueur ne cause ces dégâts. C'est juste un effet environnemental. Ensuite, nous avons été endommagés plus grossièrement. Et pour cela, nous allons traîner et faire nous-mêmes. Et cela nous permet simplement de savoir quel acteur applique réellement les dégâts à notre personnage ou aucun dommage que vous pouvez voir causer des dégâts. Nous avons également cela à l'instigation de la plume. Ensuite, nous avons la classe de dégâts. Maintenant, c'est un peu plus avancé. Je ne vais pas le traiter dans cette leçon, mais en gros, vous pouvez créer nouveaux types de dégâts et y ajouter des variables. Ainsi, par exemple, vous pouvez avoir une classe de dégâts de feu sur une classe de dégâts de glace, puis vous pouvez définir cette classe ici, puis sur l'extrémité réceptrice. Donc, sur vos dégâts d'événement, vous pouvez sortir du type de dégâts et vous pouvez réellement obtenir ces variables, par exemple, les dommages causés par la glace ou les dommages causés par le feu par exemple. Mais pour l'instant, nous allons juste laisser ça en tant que classe d'ambulancier. Mais pour l'instant, une dernière chose que nous ferons avant qu'il ne dise, c'est sélectionner les composants de la boîte, rechercher caché. Et nous voulons décocher Endgame caché juste pour qu'il puisse voir ou zone endommagée. Nous sommes donc prêts à tester cela. Nous allons compiler notre carte à la troisième personne. Je vais juste agrandir la zone endommagée et la déplacer ici. Et maintenant, lorsque nous touchons le jeu, nous pouvons tomber sur la boîte de dégâts et vous pouvez voir que la santé diminue de dix à chaque fois que nous entrons dans cette boîte. C'est donc essentiellement comme ça que nous pouvons mettre en place un système de santé et que nous pouvons également utiliser cette liste de maison un système de santé et que nous pouvons également utiliser cette liste de maison dans d'autres plans. Je voulais maintenant vous donner un exemple rapide de la façon dont nous pouvons configurer ces événements de liaison dans notre personnage. Supposons, par exemple, chaque fois que votre personnage subissait des dégâts, vous vouliez jouer un son amplifié. Vous pouvez le faire facilement et facilement avec les événements bind. Nous allons donc aller au ThirdPersonCharacter, trouver le début, les jouer. À la fin, nous pouvons ajouter un nouveau code. Donc, pour que nos événements de liaison puissent s'exécuter, nous devons les lier. Nous allons donc le faire sur Begin Play. Et nous allons récupérer notre composant de santé qui traînera et recherchera le lien sur la diminution de la santé. Et nous voulons un succès. Comme ça va connecter ça à notre fenêtre d'affichage. Et maintenant, nous avons besoin d'un événement qui se refroidira lorsque ma santé diminuera. Nous allons donc faire glisser et faire de la personnalisation. Et nous voulons ajouter un client. Ensuite, nous appellerons cela le pli, comme ça. Maintenant, cet événement se déroulera chaque fois que ma santé diminuera et nous pouvons simplement ajouter un son pour pouvoir lire l'emplacement du son. Je vais le faire à l'endroit où se trouve mon personnage, donc il reviendra au lieu de tournage. Et nous pouvons régler cela sur un son que je n' ai pas comme un son adulte ou inconnu, donc nous allons simplement choisir compilé échoué par exemple. Nous allons simplement compiler. Maintenant, quand on appuie sur play, on tombe sur une boîte endommagée. Nous obtenons réellement ce son. Et il jouera chaque fois que nous subissons des dégâts. Maintenant, jouer un son n' est qu'un exemple. Vous pourriez avoir des effets de particules. Vous pouvez exécuter un code totalement différent selon vous. C'est exactement comme ça que vous pouvez exécuter du code dans votre personnage ou dans tout autre plan que vous utilisez le composant de santé. Lorsque la santé diminue, nous pouvons faire exactement la même chose avec augmentation de la santé et avec la santé 0 également. Nous allons maintenant ajouter un composant de santé à notre cube ou à notre exemple d'interaction que nous avons créé dans notre dernière leçon. Nous allons donc aller sur ce plan, l'ouvrir. Je vais ajouter la composante santé ici. Et comme nous l'avons fait auparavant dans notre plan de personnage, nous allons ajouter l'application ou désolé, ce serait n'importe quel dommage, l'événement n'importe quel nœud de dégâts. Nous allons récupérer notre composante santé. À partir de là. Nous voulons réduire la santé. Nous allons sortir de DynaMesh et simplement rechercher autour de nous. Et nous utiliserons le nœud rond. Branchez-le pour réduire la quantité et connectez-le ici. Juste comme ça. Maintenant, notre cube peut subir des dégâts, tout comme notre personnage. Et ce que nous allons faire, c'est retrouver notre santé actuelle comme nous l'avons fait dans le personnage. Et nous allons ajouter une chaîne d'impression. Je vais juste ajouter un ajout ici. Nous allons donc ajouter et nous allons mettre un cube. La santé c'est comme ça. Ensuite, nous allons y intégrer notre santé juste pour connaître la différence entre la santé de notre personnage et celle de notre cube lorsqu'elle s' affiche à l'écran. Juste comme ça, r cubed a maintenant de la santé. Nous pouvons utiliser ces événements bind si nous voulons comme nous venons de le faire dans notre personnage. Nous pouvons donc lier, la santé diminue et nous pouvons avoir quelque chose de totalement différent dans notre cube lorsque sa santé diminue. C'est donc la puissance des composants. Vous pouvez les ajouter à d'autres plans. Et en supposant que vous les ayez configurés de manière modulaire, vous pouvez simplement les ajouter et les faire fonctionner très rapidement. Au lieu d'avoir à créer nouvelles variables d' intégrité sur chaque Blueprint dont vous souhaitez avoir une santé , puis de nouvelles fonctions pour affecter ces variables. Nous pouvons simplement ajouter un composant et nous pouvons tout de suite faire tout cela. Ensuite, nous allons installer un projectile que notre personnage va tirer dans la direction que nous regardons lorsque projet va toucher quelque chose qui a ce nœud de dégâts. Nous allons infliger des dégâts à cet objet. Pour ce faire, nous allons nous diriger vers le navigateur de contenu. Nous allons cliquer sur Ajouter et créer une nouvelle classe de Blueprint. Je vais sélectionner Actor. Et nous allons faire défiler vers le bas et nous appellerons ce projectile de soulignement BP comme ça. Et nous allons l'ouvrir. Maintenant, la première chose que nous allons ajouter est une collision de sphère, et c'est ce qui détectera réellement le réglage de notre projectile. Donc, il ajoutera, recherchera une sphère, et nous utiliserons ces collisions équitables. Je vais le sélectionner et le faire glisser en haut du D pour l'itinéraire vu par défaut. Et cela nous fera craindre la racine de notre plan. Maintenant, nous voulons ajouter un nouveau composant. Je vais ajouter une sphère et j'ai parlé correctement. Allons-y, sphère. Et c'est exactement ce que les joueurs verront pendant le jeu. Il s'agit de notre représentation visuelle de notre projectile. Vous pouvez utiliser un composant de maillage statique. Si vous le vouliez, disons que vous avez une balle ou une roquette, vous pouvez l'utiliser à la place. Je vais juste utiliser la sphère ici, donc nous allons le faire. Et je vais réduire un peu la mienne. Je vais donc le réduire un peu comme ça. Je vais également réduire un peu ma sphère. Je vais donc sélectionner le composant sphère et nous allons modifier le rayon de la sphère, il suffit de le faire glisser un peu vers le bas comme ça. Et maintenant, étant donné que notre sphère va traiter avec la sphère de collision, le maillage statique n'a pas besoin de collision et nous ne voulons pas qu'il en soit ainsi. Nous allons donc sélectionner la mesure de la pile de sphères, faire défiler vers le bas et trouver les préréglages de collision. Nous allons régler ce paramètre sur Aucune collision et nous allons désactiver collision et nous allons désactiver l'activation du personnage pour savoir et nous allons générer des événements de chevauchement. Donc maintenant, notre maillage statique de sphère n' a aucune collision. Et toutes les collisions seront gérées par la collision de sphères que nous avons ajoutée au début. Juste pour rendre les choses un peu moins confuses, je vais sélectionner ces peurs Static Mesh, et je vais juste renommer cela en mesh comme ça. Ensuite, nous allons renommer notre composant de collision de sphères en collision comme ça. Nous connaissons donc maintenant la différence entre les deux composants. Maintenant, nous devons également configurer certains paramètres de collision pour notre projectile. Donc, ce que nous allons faire, c'est aller à la collision, sélectionner, cela ira dans Préréglages de collision. Donc, pour la collision de nos projectiles, nous allons le personnaliser. Ensuite, nous allons nous assurer que Collision Enabled est défini sur Requête uniquement. Ensuite, pour le type d'objet, nous n'avons pas de type d'objet projectile, nous allons donc en ajouter un dans les paramètres de notre projet. Alors faisons-le. Nous allons accéder à Modifier les paramètres du projet, et nous voulons accéder à la catégorie de collision ici. Ensuite, dans les canaux d'objets, nous allons ajouter un nouveau canal d'objet. Je vais appeler ce projet « titre ». Comme ça. Nous voulons que la réponse par défaut soit bloquée parce que la plupart des objets dans le monde vont bloquer notre projectile. Nous voulons donc commencer à bloquer, puis nous allons cliquer sur Accepter. La raison pour laquelle nous faisons cela est parce que nous voulons que certaines choses ignorent notre projectile. Ainsi, dans notre personnage, par exemple, si nous allons dans la fenêtre d'affichage, nous ne voulons pas que notre capsule bloque les projectiles parce qu' elle est en fait plus grande que notre personnage ne l'est. Nous voulons que notre maillage de personnage bloque celui du projectile. Nous ajoutons donc un nouveau canal d' objet projectile , car nous pouvons alors indiquer à notre composant Capsule de l'ignorer. Ensuite, nous voulons que notre maillage bloque cela. Pour en revenir à notre projet, notre plan, nous allons sélectionner notre composant de collision. Par ici. Nous voulons sélectionner le type d'objet et le modifier pour le protéger. Tu peux voir que le mien n'apparaît pas. Nous pouvons essayer de compiler et voir s'il apparaît ici. C'est le cas. Si ce n'est toujours pas le cas, vous pouvez simplement tout sauvegarder et redémarrer le moteur. Parfois, il leur faut un peu de temps pour se montrer. Donc tu peux essayer ça si ce n'est pas le tien, mais le mien l'est. Nous allons donc le sélectionner , puis nous allons compiler à nouveau. Ensuite, nous voulons régler ce paramètre pour tout bloquer. Nous allons donc prendre l' option Bloquer en haut. Et puis nous voulons que cela ignore réellement ****. Nous allons donc ignorer le point. Et la raison pour laquelle nous faisons cela est dans notre personnage, cette capsule est considérée comme le type d'objet ****. Nous voulons que notre projectile ignore complètement la capsule et ne touche que le maillage. C'est pourquoi nous prenons ignore pour ****. Maintenant, la dernière collision disant que nous voulons régler pour ignorer sa caméra, nous le faisons juste parce que nous ne voulons pas notre projectile affecte notre boom de caméra. Parce que si un projectile passait à travers la perche de la caméra, cela pourrait faire zoomer vos caméras très rapidement, puis dézoomer et cela ne serait pas très beau. Veillez donc à ce que ce paramètre soit ignoré pour l'appareil photo. Nous voulons également activer le pas de personnage possible, sachez que nous empêcherons notre personnage d'essayer de se tenir debout sur cet objet s' il se rapproche trop de notre personnage. Nous sommes maintenant prêts à écrire du code pour notre projectile. Nous allons donc nous diriger vers le graphique d'événements. Si vous n'avez pas cet onglet, vous pouvez simplement l'ouvrir ici. Maintenant inhérent, nous allons cliquer avec le bouton droit de la souris et rechercher l'accès à l'événement. Maintenant, cet événement se déroulera chaque fois que nos objets notre projectile ici ou toucheront un autre objet. Et cela nous donne quelques résultats. Ainsi, lorsque nous touchons quelque chose, cela nous donne une référence au composant de notre plan qui a réellement touché les autres objets. Donc pour nous, il s'agira la composante collision, car c'est la seule à avoir une collision. Ensuite, nous en avons un autre, et cela vous donne une référence à l'autre acteur que nous avons touché et nous l'utiliserons pour infliger des dégâts. Ensuite, nous avons un autre composant. Cela nous donne une référence au composant de l' autre acteur que nous avons touché. Et nous avons atteint l'emplacement. Cela nous donne juste l' endroit où nous avons frappé. Nous avons atteint Normal, c'est-à-dire la direction dans laquelle la surface que nous toucherons, nous ne l'utiliserons pas. C'est un peu plus avancé. Et puis nous avons obtenu ici des résultats branchés. Donc, si nous faisons glisser et que nous faisons un break hit result en C, c'est en fait le même résultat d'indice que nous obtenons pour les traceurs. Nous pouvons donc accéder à toutes ces informations sur l'objet que nous avons touché avec notre projectile. Encore une fois, c'est un peu plus avancé. Nous allons simplement utiliser l'autre stylo ici pour infliger des dégâts à l'acte que nous allons faire sortir de l'événement ici, nous allons le rechercher, appliquer, dégâts utiliseront ce nœud. Nous voulons que l'acteur endommagé soit l'autre épingle ici. Nous disons donc que nous voulons appliquer une dimension à l' acteur que nous avons entendu. Nous pouvons définir le montant des dégâts. Je vais donc juste définir dix causes de dégâts. Comme je l'ai déjà dit, ce sera l'acteur qui fera le mal. Donc nous sommes dans le projectile, c'est nous-mêmes, donc nous allons traîner et faire de nous-mêmes. Et puis l'instigateur de l'événement. Nous allons le brancher parce qu' un personnage va armer notre projectile. Ce que nous pouvons faire, c'est obtenir un instigateur. Nous n'aurons pas de contrôleur d'instigateur. Et nous pouvons l'intégrer à un instigateur d' événement comme celui-ci. Et la façon dont cela fonctionne est quand nous produisons réellement notre projectile aura une option pour fournir un instigateur, et nous le ferons et ce sera le personnage. Et maintenant, lorsque nous infligeons des dégâts à un autre objet, nous obtenons la valeur d' instigateur que nous avons définie lorsque nous faisons apparaître notre projectile. Nous fournissons cela aux autres plans qui ont été dommageables juste au cas où ils voudraient accéder à la personne qui les a réellement endommagés. Maintenant, nous allons ajouter la chaîne d'impression ici juste pour avoir un peu plus d' informations sur qui nous avons touché. Nous allons donc ajouter la chaîne d'impression et nous allons la faire glisser à partir de cette chaîne. Et nous allons juste mettre au sommet du projectile touché. Ensuite, à la deuxième ligne, nous allons brancher notre cabinet. Donc on va se remettre de l'acteur et on branche ça ici. Je vais juste ajouter un espace à la fin d'un hit. Il s'agit donc de deux mots distincts comme ça. La prochaine chose que nous devons faire est de ne pas vouloir que notre projectile touche le personnage qui a généré le projectile. Pour ce faire, nous allons créer une note de début de jeu comme celle-ci. Hum, nous allons récupérer notre composante collision , en sortir et ignorer l'acteur pendant le déplacement. Maintenant, cela nous indique simplement le composant de collision, un acteur que nous voulons ignorer lorsque le composant se déplace. Nous allons donc le brancher. Nous voulons proposer un acteur. Nous allons utiliser get owner. Et nous allons le brancher ici. Et nous allons prendre en charge devrait ignorer. Maintenant, get owner est une autre variable que nous définissons lorsque nous faisons apparaître un projectile. Ensuite, nous y accédons et nous indiquons à la collision : « Hé, nous voulons que vous ignoriez de frapper le propriétaire. Nous allons ensuite ajouter un nouveau composant. Nous allons donc aller dans Ajouter, et nous allons rechercher un projecteur. Et nous allons ajouter le composant de mouvement du projectile. s'agit d'un composant intégré au moteur et qui Il s'agit d'un composant intégré au moteur et qui va faire tous les calculs pour nous permettre notre projectile BP de se déplacer comme un projectile. Pour commencer, nous allons régler la vitesse initiale à 3 000. Il s'agit de la vitesse de départ d'un objet. Ensuite, nous allons également définir la vitesse maximale sur cette même valeur. Bien entendu, si vous souhaitez que l'objet se déplace plus lentement ou plus vite, vous pouvez augmenter ou diminuer ces valeurs. Vous voudrez probablement les garder identiques. Et puis ici, nous avons aussi la vélocité. Je vais également définir la première valeur ici pour libérer mille. Donc si vous deviez changer les vitesses ici, vous voudriez vous assurer de faire de même pour elle aussi. ce moment, si nous devions générer notre projet, En ce moment, si nous devions générer notre projet, comment il ne se détruirait pas lui-même une fois qu'il touchera quelque chose. Nous allons donc ajouter une destruction à la fin de notre code ici. Donc je vais juste détruire l'acteur. Et cela signifierait simplement que lorsque notre projectile touchera quelque chose, il se trouvera là où il sera détruit. Maintenant, nous pouvons compiler et enregistrer cela, et nous avons configuré notre projectile, et maintenant nous devons réellement apparaître. Pour ce faire, nous allons aller dans ThirdPersonCharacter, puis revenir au graphique d'événement, ajouter un nouvel événement d'entrée. Pour ce faire, je vais aller dans Modifier les paramètres du projet. Ensuite, nous passerons à la catégorie des entrées et nous ajouterons un nouveau mappage d'action. Nous allons donc simplement ajouter une nouvelle option. Et je vais appeler le mien « feu ». Et puis nous reviendrons à la ThirdPersonCharacter qui ferait le feu de l'événement. Et nous trouverons cela sous l' action, des événements comme celui-ci. Maintenant, nous devons engendrer des acteurs. Je vais donc déplacer ça ici pour qu'ils aient plus d'espace. Nous allons sortir de Pressed. Nous allons faire spawn actor. Nous voulons que les numéros de spawn viennent de la classe. Nous définirons la classe du projectile de notre projectile dans le protecteur CPP. Maintenant, la transformation de spawn que nous allons faire glisser et faire, faire transformer. Maintenant le lieu, je vais juste utiliser la position de mes acteurs. Mais plus tard, si vous fabriquez une arme, vous voudrez probablement l'utiliser comme sa douille de bouche par exemple. Mais pour l'instant, nous allons juste utiliser l'emplacement de l'acteur du personnage. Donc, il obtient, il est mappé à l'emplacement. Et nous allons le brancher sur l'emplacement. Ensuite, pour la rotation, nous allons utiliser la rotation actuelle de la caméra. Donc, contrôlez la rotation. protégeons donc la distance qui se trouve dans la direction que nous recherchons actuellement pour la gestion des collisions. Nous voulons définir ce paramètre pour toujours générer des collisions ignorées. Et puis, si vous vous souvenez, nous utilisons à la fois le propriétaire et instigateur à l'intérieur de notre projecteur pour. Ce nœud ici et également pour ce nœud ici. Nous devons donc les définir. Et nous allons simplement utiliser une référence à notre propre personnage. Nous allons donc simplement utiliser soi-même. Et nous voulons intégrer cela dans les deux ici et ici, comme cela. Nous sommes maintenant prêts à tester cela. Et il y a une chose que j'ai oublié de faire dans les paramètres de notre projet. Donc, si nous y retournons, j'ai créé un nouveau mappage d'action, mais je n'ai pas vraiment défini de clé. Nous devons donc nous assurer de le faire. Je vais juste cliquer sur le bouton du clavier ici, puis sur le bouton gauche de la souris, et cela va l'affecter à cela. Maintenant, nous pouvons tester cela, donc nous allons appuyer sur play et nous allons cliquer sur le bouton gauche de la souris. Vous pouvez voir que notre projectile est se reproduire et qu'il s' écoule , ainsi que la direction dans laquelle nous regardons. Et si nous tirons notre cube dessus, vous pouvez voir que la santé de notre cube baisse. Maintenant, assurez-vous de toucher le cube et non le sol, par exemple. Donc, il devrait dire que le projectile a frappé exemple d'interaction BP comme le mien. Pareil avec R1. Ici, vous pouvez voir qu'il a une valeur de santé différente de celle-ci et qu'il diminue également lorsque nous l'atteignons. Maintenant, d'autres événements de dégâts sont intégrés au moteur. Donc, si nous nous dirigeons vers le ThirdPersonCharacter, je vais juste les expliquer. Si nous cliquons avec le bouton droit de la souris et que nous pouvons rechercher des points de dégâts, vous pouvez trouver les points de dégâts d' événement Maintenant, cela fonctionne de la même manière que nos dégâts. Si nous le déplaçons ici, vous pouvez voir que nous avons des entrées supplémentaires. Maintenant, la raison en est que si nous appelons les dégâts des points d'application, vous pouvez voir que cela fonctionne un peu comme le nœud de dégâts appliqués, mais cela nous donne quelques entrées supplémentaires. Nous avons donc une entrée pour la direction et aussi pour les informations sur les hanches. Donc, cela va ensuite lancer cet événement et il nous fournira des informations sur le hit. Il nous fournira un nom d'os intégré info du hit et à des éléments tels que la direction du hit. Ce nœud est donc un peu plus avancé que les dégâts appliqués et les dégâts MD, simplement parce qu' il nous fournit un peu plus d' informations que nous pouvons recevoir sur l'acteur qui arrive ici. Ensuite, nous fournissons ces informations à l'aide du nœud Appliquer des dégâts ponctuels et nous pouvons entrer ces valeurs ici. Il y a maintenant d'autres nœuds de dégâts, donc il les supprimera si nous cliquons avec le bouton droit de la souris et que nous recherchons dégâts radiaux dans Trouver les dégâts radiaux Maintenant, cela fonctionnera chaque fois que notre personnage reçoit un type de dégâts radiaux. Et si nous cliquons avec le bouton droit et que nous recherchons la radio Appliquer, vous pouvez voir qu'il y a deux options ici. Nous allons commencer par le premier. Nous devons donc appliquer des dommages radiaux. Maintenant, c'est un nœud vraiment cool parce qu' il fait tout le travail pour nous, pour des choses comme des explosions. Ce que nous faisons, c'est fournir une origine et c' est un peu comme le centre des explosions. Nous pouvons définir des dégâts de base et définir la taille de la zone de dégâts. Ainsi, tous les objets situés dans, disons, 300 centimètres de l'origine subiront les dégâts de base. Et nous pouvons fournir des acteurs à ignorer comme une trace de ligne par exemple. Donc, si nous faisons juste re, nous pouvons brancher des acteurs que nous voulons ignorer après avoir subi des dommages radiaux. Nous pouvons également prendre en charge les dégâts complets. Cela signifie simplement que peu importe où les objets qui se trouvent dans nos plages endommagées subiront dans nos plages endommagées subiront la valeur totale des dégâts de base. Ensuite, nous avons les canaux de prévention des dommages. se peut donc qu'une explosion se déclenche et qu'il y un mur entre vous et l'origine de l'explosion, vous voudriez probablement bloquer les dégâts. est donc ici que nous définissons quel canal de collision bloque réellement les dommages causés par nos dégâts radiaux. Mais par exemple, il y avait peut-être une fenêtre entre vous et l'explosion. Vous ne voudriez pas que le verre bloque tous les dégâts. Vous auriez votre verre, ignorez le canal Visibilité et les dégâts d'explosion passeraient et toucheraient votre personnage. Ensuite, nous avons un autre type de dommages radio, nous pouvons donc rechercher des 55. Systèmes de jeu (barre de santé): Salut tout le monde. Dans cette leçon, nous allons ajouter un widget de barre de santé qui utilisera les valeurs que nous avons définies dans notre composant d'intégrité. Ensuite, nous allons ajouter notre barre de santé au HUD BP que nous avons créé dans la leçon d'interaction. Pour commencer, nous allons créer un nouveau widget. Nous allons donc aller dans Ajouter puis dans l'interface utilisateur, et nous allons sélectionner Plan de widget. Sélectionnez ensuite le widget habituel. Et nous allons faire défiler vers le bas et je vais juste appeler la mienne BP souligner la santé, comme ça. Nous allons l'ouvrir. Je vais juste faire monter le mien en haut de la liste. Pour notre barre de santé. Je vais créer des textes qui ne parlent que de santé. Ensuite, en dessous, nous allons avoir une barre de progression qui affichera l'aide dont nous disposons. Nous allons également ajouter du texte à cela, qui parlera de notre état de santé actuel et également sur Mac lui-même. Maintenant, pour commencer, nous n'allons pas utiliser de panneau de canevas, car n' oubliez pas que nous allons ajouter notre barre de santé à notre HUD. Nous allons donc l'utiliser pour choisir la position de notre barre de santé sur l'écran. Donc, ici, nous avons juste besoin d' ajouter nos widgets de la barre de santé. Nous allons donc commencer par une boîte verticale. Je vais donc aller dans le panneau, puis nous allons saisir la boîte verticale et l' ajouter simplement à la hiérarchie. Nous allons récupérer quelques textos, donc je cherche juste du texte. Nous allons le mettre dans la case verticale. Ensuite, je vais obtenir une superposition. Nous allons donc rechercher la superposition et l'ajouter également à la boîte verticale. Et la raison pour laquelle j' utilise une superposition est que je souhaite avoir une barre de progression , puis je veux superposer du texte au-dessus de cette barre de progression. Nous allons donc utiliser la superposition pour cela. Maintenant, nous allons récupérer notre barre de progression, donc je vais simplement rechercher la progression et l'ajouter à notre superposition. Et puis je vais également obtenir un peu plus de texte et l'ajouter à la superposition également. Nous allons donc commencer par sélectionner notre texte principal ici. Et je vais juste changer ça pour dire santé comme ça. Nous pouvons modifier les paramètres. Donc, si tu veux, je vais réduire la mienne un peu , peut-être 20. Ensuite, je veux définir la taille de ma barre de progression, mais nous n'avons pas de boîte de taille. ce faire, nous allons sélectionner notre superposition avec le bouton droit de la souris sur Envelopper avec. Ensuite, nous voulons trouver la boîte de taille ici. Cela vient donc d'être ajouté dans une boîte de taille pour nous. Nous pouvons maintenant choisir la taille notre barre de progression. Je vais donc activer la largeur de remplacement et la hauteur de remplacement. Et je vais régler la hauteur pour économiser 30. Ensuite, nous allons définir la largeur sur trois cinquièmes. Pour l'instant. Maintenant, nous allons sélectionner notre barre de progression et lui dire d'utiliser tout l' espace disponible afin de la remplir horizontalement et verticalement. Nous sommes actuellement en train de prévisualiser un écran de taille 1280 par 720. Nous allons donc changer cela à partir de l'écran Phil pour simplement ajouter la taille souhaitée à l'écran comme ça. Juste pour que nous puissions avoir une meilleure idée de sa taille ou de sa taille actuelle. Ensuite, nous allons sélectionner notre manuel qui se trouve au-dessus de notre barre de progression. Et je vais changer ça juste pour dire 50 barres obliques 100 afin que nous puissions voir à quoi cela ressemblera. Je vais changer la taille pour qu'elle soit beaucoup plus petite. Nous allons donc commencer par, disons, de 14 à 16 ans. Et nous allons l'aligner sur le côté droit. Et nous voulons également nous aligner au centre de cette façon. Nous allons donc maintenant modifier ce texte à l'aide de code. Pour ce faire, nous allons avoir besoin que ce soit une variable. Je vais donc prendre en charge sa variable et je vais changer le nom en texte de santé. Comme ça. Nous allons également modifier notre barre de progression. Je vais donc simplement le renommer. Vous pouvez voir qu'il est déjà coché car c'est variable. Je vais donc appeler cette barre de santé comme ça. Maintenant, je vais également ajouter un peu de remplissage sur le côté droit parce que je ne veux pas que le texte soit juste au bord de cette barre de progression, ouvrira le remplissage et définira le droit de dire cinq pixels. Oh, désolé, nous devons sélectionner nos textes ici, alors assurez-vous que vous avez sélectionné du texte. Ensuite, nous définirons le côté droit sur environ cinq pixels, ou peut-être quatre. Cela nous laisse juste un peu d'espace entre le bord de notre barre de progression et notre texte. Nous pouvons maintenant compiler et enregistrer cela. Et nous sommes prêts à écrire le code qui va contrôler notre barre de santé. Nous allons donc passer à la vue graphique. Maintenant, pour mettre à jour notre barre de santé et nos textes de santé, nous allons avoir besoin d'une référence à la composante santé que nous avons ajoutée à notre personnage. Pour ce faire, nous allons ajouter du code à notre Event Construct qui commence simplement par supprimer ces deux notes parce que nous n'allons pas les utiliser. Ensuite, nous aurons notre propre place ou est-ce que vous aurez Owning Player ? Cela nous donne le contrôleur qui possède ce widget. Donc, à partir de cela, nous pouvons le faire contrôle****. Cela nous donne une référence à notre personnage, mais comme une référence d'objet ponctuel. Et à partir de là, nous pouvons obtenir des composants par classe. Ensuite, nous pouvons vérifier si notre **** a la composante santé ? Si c'est le cas, nous voulons le définir. Nous allons sortir de la valeur de retour. Faites-vous la promotion d'une variable ? ainsi que nous appelons cela la composante santé. Maintenant, avant de régler ça, nous voulons faire quelques vérifications. Nous voulons donc d'abord vérifier que nous contrôlons quelque chose. Nous allons donc le faire est valide ici comme ça. Et s'il est valide, nous autoriserons la définition du composant de santé de cette façon. Nous sommes maintenant prêts à créer notre fonction de liaison. Nous allons donc compiler et revenir à la vue du concepteur. Et nous allons commencer par sélectionner notre barre de santé ici. Et nous allons aller dans le panneau Détails et trouver la valeur actuelle. Ensuite, nous voulons utiliser l'option bind et créer une liaison. Donc, pour commencer, nous voulons vérifier si notre composant santé est valide ? Nous allons donc obtenir le composant de santé et faire est valide comme ça. Cela nous empêcherait simplement de recevoir des erreurs. Ensuite, nous avons besoin de notre santé actuelle et de notre offre maximale. Donc, il traînera et obtiendra la santé actuelle et la santé maximale, comme le clap. Ensuite, nous devons diviser notre santé actuelle par la santé r max. Et cela nous donnera une valeur comprise entre 0 et 1. Que nous pouvons ensuite utiliser pour notre barre de progression. Mais nous devons d'abord les convertir en flotteurs. Nous allons donc faire flotter. Cela nous donnera cette note. Il vous suffira de le copier et de le coller ici. Plugger l'aileron entier ou la santé imax ici. Ensuite, nous utiliserons notre état de santé actuel et diviserons. Divisez, et nous divisons notre santé actuelle par r max out. Et cela nous donnera une valeur comprise entre 0 et 1. Et cela indiquera à notre barre de progression jusqu'où nous devons être. Ensuite, nous pouvons simplement le brancher ici comme ça. Ensuite, si notre composant de santé n'est pas valide, nous pouvons simplement copier et coller cette valeur de retour et la brancher dans not valid et nous retournerons simplement 0. Ensuite, nous avons besoin d'un classeur pour nos textes. Nous allons donc revenir au concepteur et sélectionner le texte dans notre barre de progression ici. Ensuite, pour la valeur de texte sélectionnez bind et faites Create Binding. Et nous ferons de même avec nos composants santé. Nous allons donc l'obtenir et nous vérifierons qu'il est valide. Et connectez-le à notre nœud de départ comme ça. Ensuite, nous voulons connaître notre état de santé actuel. Donc, obtenez la santé actuelle et la santé maximale comme ça, ce qui est la ligne, c'est un peu mieux. Maintenant, nous devons réellement renvoyer quelques textos. Nous allons donc faire glisser notre valeur de retour et utiliser le nœud de texte de format comme ça. Ensuite, nous avons besoin d'une entrée pour notre état de santé actuel. Nous utiliserons donc le crochet ouvert, nous appellerons cet état de santé actuel. Et puis fermez le support. Et nous allons appuyer sur Entrée et vous verrez que cela ajoute une nouvelle valeur pour nous. Je vais donc y intégrer notre état de santé actuel. Ensuite, dans notre valeur de texte de format ici, nous allons faire une barre oblique, puis nous ferons crochet ouvert, santé maximale, puis crochet fermé et ensuite entrez maintenant. Et cela nous crée un nouveau Max en bonne santé. Et nous allons le brancher ici comme ça. Ensuite, s'il n'est pas valide, nous copierons, collerons ou retournerons un nœud et nous le brancherons et laisserons simplement cette valeur vide. Maintenant, tout notre code est configuré. Si nous revenons chez le designer, vous pouvez passer autant de temps que vous le souhaitez éditer et à lui donner l'apparence que vous voulez. Je vais faire une chose et cela a changé la couleur de notre barre de santé. Je vais donc le sélectionner et je vais descendre au remplissage, à la couleur et à l'opacité. Et je vais juste sélectionner ceci et je vais le changer en une belle couleur verte juste pour représenter la santé. Et puis je vais cliquer sur OK, compiler et enregistrer ça. Maintenant, nous pouvons l'ajouter à notre cabane, nous allons donc revenir au navigateur de contenu et ouvrir le HUD BP. Dans la palette, nous rechercherons santé, et nous glisserons notre barre de santé BP comme ça. Et je vais juste mettre le mien dans le coin inférieur. Je vais également changer de point d'ancrage. Parce que c'est le point d'ancrage le plus proche, c'est là que je vais l'utiliser. Nous allons donc le placer en bas à gauche comme ça. Maintenant, vous pouvez redimensionner le commutateur. Donc, si je le fais glisser, vous pouvez voir notre barre de santé s' agrandit de plus en plus. Ou vous pouvez prendre de la taille en fonction du contenu. Et cela permettra simplement de s'assurer que le widget a toujours la même taille qu'il était dans cet éditeur de widget ici. Nous pouvons donc maintenant compiler et tester cela. Nous allons donc appuyer sur Play. Et vous pouvez voir que notre valeur apparaît à 100 sur 100. Si je tombe sur cette case ici, vous pouvez voir que notre santé diminue chaque fois que j'entre dans la boîte. Si nous expirons l' éditeur de plan et que nous allons dans notre plan de personnage et nous modifions nos paramètres de santé ici. Donc, si nous sélectionnons le composant santé, disons que je règle la santé maximale à 500 et que nous définissions la moitié de départ à 250. Vous verrez que lorsque nous compilerons et appuierons sur play, j'espère qu'en mettant à jour automatiquement, il indique 250 sur 500 et notre barre de progression est également à mi-chemin. Donc maintenant je vais juste sortir X et je vais juste remettre ces valeurs par défaut. Donc un 100100. Maintenant, si vous souhaitez effectuer d' autres personnalisations, vous pouvez simplement vous rendre dans votre barre de santé ici et apporter les modifications que vous souhaitez. Si vous souhaitez modifier la taille de la barre de progression, vous pouvez sélectionner la zone de taille et nous pouvons modifier ces valeurs ici. Si vous souhaitez modifier la taille du texte, vous suffit de les sélectionner et de modifier les tailles de police ici. Et ici aussi. C'est fini pour cette leçon. J'espère que vous comprenez maintenant un peu plus comment nous pouvons obtenir des valeurs à partir d'autres plans , puis les afficher dans un widget. 56. Systèmes de jeu (Respawning): Salut tout le monde, Dans cette leçon, nous allons mettre en place un système de réponse. Et cela va inclure un HUD qui s'affichera quand nous mourrons, nous pourrons cliquer sur le bouton Répondre, et qui nous créera un nouveau personnage qui prendra le contrôle. Pour commencer, nous allons créer nos participants. Nous allons donc aller dans le navigateur de contenu, ajouter, et nous voulons ajouter une interface utilisateur et un widget. Blueprint va être une utilisation de widget. Et nous allons faire défiler la page vers le bas. Et je vais appeler mon soulignement BP, répondre HUD comme ça. Et nous allons ouvrir ça. Je vais juste faire glisser le mien dans la barre du haut comme ça. Cela va remplacer notre HUD normal. Nous allons donc utiliser un panneau de toile pour cela. Il va donc rechercher Canvas et ajouter à la hiérarchie comme ça. Maintenant, je vais juste ajouter un bouton simple à cela pour que nous puissions recueillir une réponse. Nous allons donc attraper un bouton. Je vais juste faire glisser ça dedans. Je vais changer le point d'ancrage au centre parce que je veux que mon bouton soit proche du centre. Je vais également modifier l'alignement sur 0.50.5, juste pour que notre emplacement soit au centre de notre hanche de widget. Et je vais régler ça sur 0 et sur x. Et je vais juste maintenir la touche Maj enfoncée et la faire glisser un peu vers le bas pour que ce soit à peu près ici. Et maintenant je peux ajouter des textes, mes boutons, pour qu' il recherche du texte. Je vais juste faire glisser le curseur en haut de mon bouton. Et nous aurons ce mot à dire sur le sport comme ça. Maintenant, je vais arrêter mon bouton à nouveau et ajuster la taille au contenu afin qu'il s'agrandisse pour s'adapter au texte ici. Je vais changer la couleur du texte pour qu'il soit un peu plus facile à voir. Encore une fois le bouton Démarrer. Maintenant, tu peux passer autant de temps que tu veux ici à donner l' apparence que tu veux. Je suis juste content d'un peu de texte, je vais avoir à nouveau l'ancre au centre qui changera à nouveau son alignement à 0.50.5. Et nous allons régler le x sur 0. Et je vais de nouveau maintenir la touche Maj enfoncée et la déplacer vers le bas. Et je vais juste envoyer ces textos disant que tu as ce genre de choses. Et nous l'alignerons au centre et la taille en fonction du contenu. Nous sommes maintenant prêts à ajouter code à notre personnage à la troisième personne. Nous allons donc aller dans le navigateur de contenu et l'ouvrir. Maintenant, ici connecté pour que je commence à jouer, nous avons un code qui lie un son de jeu chaque fois que nous subissons des dégâts, je vais juste le supprimer parce que c' est un peu ennuyeux. Nous allons donc supprimer cela pour l'instant. Et nous allons créer une nouvelle liaison pour quand j'atteindrai 0. Nous allons donc récupérer notre composante santé , en sortir et nous lier à la santé. Et nous voulons que Bind Event soit sur la santé 0 ici, comme ça. Ensuite, à partir de l'événement, nous allons faire glisser et personnaliser. Et nous voulons ajouter un client. Alors nous appellerons ce personnage mort. Comme ça. Ensuite, nous allons ajouter des notes d'échéance une fois, donc nous allons faire glisser et faire, faire une fois. Et cela signifie simplement que ce code ne s'exécute qu'une seule fois. Ensuite, nous voulons vérifier si notre HUD est actuellement valide ? C'est normal, mais nous voulons quand même vérifier. Nous allons donc le faire est valide. Et nous allons connecter ça jusqu'ici. Et nous allons maintenant supprimer notre hub. Nous allons donc faire glisser et supprimer des parents. Et cela agit comme un moyen de détruire un widget. Nous allons donc ajouter ceci comme valide. Ensuite, nous voulons réellement générer notre réponse. Nous allons donc faire glisser à partir d'ici, créer un widget et définir la classe pour qu'elle réponde. Nous voulons que ce soit un HUD de réponse, joueur gagnant aura un contrôleur de joueur comme ça. Ensuite, nous voulons définir notre réponse à une variable. Nous allons donc faire glisser la valeur de retour, promouvoir la variable. Je vais appeler ça répondre. Ensuite, nous devons l'ajouter à l'écran du lecteur. Nous allons donc faire glisser et faire Ajouter à la fenêtre d'affichage comme ça. Ensuite, nous voulons nous assurer que le code PIN n'est pas valide est branché dans notre nœud Créer un widget. Et maintenant, pour garder les choses en ordre, nous allons mettre tout cela en évidence et le réduire en fonction. Nous allons donc cliquer avec le bouton droit de la souris et faire une fonction réduite, et nous appellerons cela créer une réapparition, HUD comme ça. Donc tout ce code est maintenant contenu dans cette fonction ici. Et nous pouvons le déplacer pour qu'il soit un peu plus petit. Nous pouvons ajouter des nœuds de redirection. Deux ne sont pas valides. Câblez ici comme ça. Juste pour ranger les choses. Ensuite, nous allons compiler et enregistrer cela. Ensuite, nous allons revenir au graphique d'événements. Maintenant que nous avons créé notre réponse ici, nous voulons désactiver toutes les entrées de mouvement pour notre personnage. Nous allons donc cliquer avec le bouton droit et rechercher « désactivé ». Nous voulons désactiver la saisie. Et puis nous allons obtenir manette du joueur et la connecter à la manette du joueur et la mettre. Maintenant, si nous le voulions, nous pourrions faire jouer une animation pour sourds ici. Maintenant je n'en ai pas, mais ce que nous allons faire à la place c'est monter une poupée de chiffon. Quand nous mourons, notre personnage jouerait comme un effet rhabdo. Pour ce faire, nous allons obtenir nos composants maillés. Nous voulons donc le composant de maillage du panneau Composants que nous allons faire glisser et nous allons définir simuler. Nous voulons simuler la physique. Et nous allons le connecter pour désactiver la saisie. Nous voulons nous occuper de cela. Ensuite, nous quitterons le Michigan et nous voulons mettre en place tous les corps. Épelez correctement, les corps simulent la physique ici. Nous voulons également nous occuper de cela. Ensuite, nous voulons modifier son profil de collision. Pour cela, nous allons faire glisser et définir la collision. Et nous voulons définir le nom du profil Collision. Connectez-la ici. Nous voulons définir ce nom dans le profil de collision sur rag doll. Donc R majuscule puis poupée de chiffon orthographié exactement comme ça. Ce code est en fait ce qui va faire notre poupée de chiffon quand nous mourrons. Nous allons donc également réduire cela à une fonction. Nous allons donc faire un clic droit et faire une fonction de réduction. Et nous appellerons ça « start Greg », comme ça. Et encore une fois, gardons les choses bien rangées et tout ce code est simplement contenu dans cette fonction. Maintenant, comme ça, nous pouvons également ajouter une note ici pour notre composant de mouvement de personnage. On pourrait donc l'attraper et arrêter le mouvement. Et nous pourrions arrêter le mouvement immédiatement. Cela signifie simplement que notre personnage ne recevra aucun signal de mouvement. Donc une fois que tu auras fini, ça devrait ressembler à ça. De retour dans notre graphique d'événements, nous pouvons vouloir que le cadavre de notre personnage disparaisse après un certain temps. ce faire, nous pouvons faire traîner et faire de la durée de vie. Nous voulons une durée de vie définie. Et c'est le nombre de secondes après l'exécution de ce nœud, l'acteur existera avant que nous le détruisions. Donc si je règle cela sur dix secondes, au bout de dix secondes, le corps de notre personnage disparaîtra. Maintenant, vous pouvez avoir besoin d'une variable morte qui est juste une valeur booléenne qui est vraie lorsque le personnage est mort. Nous ne l'utiliserons pas dans cet exemple. Mais si c'était le cas, nous pourrions créer une nouvelle variable, appelée « morte ». Nous pouvons également le définir ici, juste pour avoir une variable qui nous indique que nous sommes morts. Et vous pouvez l'utiliser dans un autre code si vous le souhaitez. Ensuite, nous allons configurer un contrôleur personnalisé. Et la raison pour laquelle nous faisons cela est corps de notre personnage peut disparaître au bout dix secondes et peut-être que nous devions rester inactif sur l'écran de réponse. Maintenant, si notre code de réponse était dans le personnage et qu'il avait été détruit, si nous cliquions sur le bouton Répondre, rien ne se passerait parce que notre personnage aurait été détruit, mais le le contrôleur de place existera toujours. Nous voulons donc y mettre notre code de réponse. Pour ce faire, nous allons créer un nouveau contrôleur personnalisé, aller dans le navigateur de contenu, puis ajouter la classe Blueprint, puis nous voulons le contrôleur du lecteur. Et cela nous créera un nouveau plan. Nous appellerons cet exemple de contrôleur de soulignement BP. Comme maintenant. On va ouvrir ça et je vais juste traîner le mien au bar ici. Ensuite, nous allons accéder au graphique d'événements. Ensuite, nous allons créer une nouvelle fonction pour trouver l'endroit où nous allons répondre à notre personnage. Nous allons donc créer une nouvelle fonction. Je vais appeler ce point de réponse aléatoire. Comme ça. Nous allons ajouter une sortie. Ce sera un lieu. Nous voulons donc que ce soit un vecteur et nous appellerons cet emplacement comme ça. Ensuite, nous allons faire ou travailler déconnecter cette note de retour pour l'instant. Nous allons sortir de là et obtenir des acteurs de classe. Et avec cela, nous allons utiliser le démarrage du lecteur. Il s'agit d'un actif intégré au moteur. Nous n'avons donc pas créé qui vient juste avec le moteur. Ensuite, nous voulons faire glisser et faire de la longueur. Nous allons faire est supérieur à 0. Nous vérifions simplement qu'il y a au moins une étoile dans notre niveau. Nous allons donc faire f. Et si vrai sera exécuté lors de notre vérification aléatoire. Et si c'est faux, nous n' aurons qu'à nous rendre à un endroit. Donc pour cela, nous pouvons faire quelque chose comme 300 et le Z juste pour nous assurer de ne pas tomber à travers le sol. Mais cela ne sera utilisé que si nous n'avons pas de joueurs et de niveau, idéalement, vous voulez toujours en avoir au moins un dans votre niveau. À partir de là, nous pouvons créer une variable locale pour stocker cela juste pour garder les choses en ordre. Nous allons donc faire glisser à partir d'ici, promouvoir une variable locale. Nous allons simplement appeler ce joueur Scott. J'aimerais mettre un L à la fin des variables locales juste pour qu'il soit facile de dire qu' elles sont locales. Donc je vais faire en sorte que les joueurs démarrent la capitale L comme ça. Raccordez-le ici. Et je vais prendre la sortie et la brancher ici. Il suffit de garder les choses bien rangées. Ensuite, nous prendrons le plâtre. Nous voulons choisir aléatoirement l'une des entrées de ce tableau pour notre joueur, spawn up. Pour ça, on va traîner et on va refaire de la longueur. Ensuite, nous voulons un entier aléatoire. Nous voulons un entier aléatoire à partir d'un entier aléatoire dans la plage. Et puis pour minimum, nous voulons que ce soit 0, puis maximum nous voulons que ce soit la longueur moins un. Alors soustrayez-en un. Ce sera notre maximum comme ça. Cela nous donnera un nombre aléatoire compris entre 0 et quel que soit le nombre maximum actuel d' entrées que notre joueur commence. Et puis, à partir de là, nous pouvons copier et coller cette variable, faire un gap et obtenir une copie. Ensuite, nous allons le brancher dans le nombre entier. Cela nous indique quels joueurs nous voulons obtenir. Ensuite, nous obtenons simplement son emplacement. Donc, nous revenons à l' emplacement, nous allons le renvoyer. Je vais donc simplement copier et coller. Je retourne le nœud, je branche l'emplacement dans l'emplacement et je branche ça ici en vrai comme ça. Nous pouvons le rendre un peu plus clair, lier, puis nous compilerons et sauvegarderons cela. Maintenant, cette fonction donnera un départ aléatoire au joueur pour que notre personnage réponde que nous allons maintenant nous diriger vers le graphique des événements. Et nous allons supprimer les deux parce que nous n' allons pas les utiliser. Ensuite, nous allons créer de nouveaux événements personnalisés ou cliquer avec le bouton droit de la souris et faire des événements personnalisés. Et nous voulons ajouter un client. Alors je vais appeler ce personnage de réapparition comme ça. Et nous allons commencer par notre point de réponse aléatoire. Nous allons donc obtenir ça comme ça. Ensuite, nous voulons répondre à notre caractère. Donc nous allons sortir d'ici et faire apparaître un acteur de la classe. Maintenant, pour la classe, nous voulons que ce soit notre **** par défaut dans notre mode de jeu. Donc, ce que nous allons faire, c'est rechercher obtenir le mode Jeu. À partir de là, nous pouvons obtenir un poème par défaut. Et ce sera la classe de pion par défaut que nous aurons définie dans notre mode de jeu. Nous allons donc l'intégrer à la classe. Ensuite, pour la transformation de spawn, nous allons faire glisser et faire une transformation. Je vais juste le reculer un peu pour qu'on ait un peu plus d'espace. Ensuite, nous prendrons la position de notre point de réponse aléatoire et la brancherons emplacement comme ça. Et nous allons définir la gestion des collisions par défaut pour essayer d'ajuster la position, mais toujours apparaître parce que nous voulons toujours que notre personnage apparaisse. Ensuite, nous cliquerons sur la flèche vers le bas et nous définirons le propriétaire comme étant notre contrôleur. Nous allons donc simplement utiliser self et nous allons également le brancher dans owner. Maintenant que nous sommes dans la manette, nous voulons juste posséder ce nouveau personnage auquel nous avons répondu. Donc je vais m'éloigner de la valeur de retour, possédez-vous ? Et nous pouvons posséder ce personnage et quitter la cible elle-même parce que nous sommes à l'intérieur d'une manette. Maintenant, nous allons compiler et enregistrer cela. Et nous allons revenir à notre réponse difficile car ici nous devons ajouter du code qui va s'exécuter lorsque nous appuierons sur le bouton R répondre, il sélectionnera le bouton ici et nous descendrons dans le panneau Détails non cliqué. Cliquez dessus. Ensuite, nous avons besoin de cela pour exécuter notre événement de réponse dans notre exemple de contrôleur. ce faire, nous allons cliquer avec le bouton droit de la souris et rechercher Get Owning Player. Cela nous donne une référence à notre contrôleur. Tout ce que nous avons à faire est donc de payer le coût pour le contrôleur d'exemple. Raccordez-le ici. Et cela nous permettra d'appeler notre événement de personnage de réponse. Maintenant, lorsque nous ajoutons tous répondre fort pour jouer un cri, nous voulons qu'il relâche notre souris afin que nous puissions réellement récupérer notre bouton de réponse. Pour ce faire, nous allons ajouter du code à Event Construct, en supprimant simplement la coche de l'événement et l'événement préconstruit. Ensuite, nous allons récupérer une manette de joueur. Nous allons donc obtenir Owning Player. Et à partir de là, nous pouvons utiliser show mouse. Nous voulons définir Afficher le curseur de la souris sur true. Ensuite, nous voulons régler le mode de saisie sur game et gy. Ensuite, nous allons le brancher ici. Et nous voulons que les cheveux du widget soient autonomes, nous allons donc vous rechercher vous-même. Et cela nous indique simplement que le curseur de la souris est maintenant visible et que nous utilisons ce widget comme point de mire. Je vais décocher Masquer la souris pendant la capture car tout ce que cela fait, c'est que lorsque vous maintenez le bouton gauche de la souris enfoncé et que vous faites glisser les widgets alors que les widgets sont visibles, cela masquera notre souris. Personnellement, je n'aime pas ça, alors je vais décocher ça. Maintenant, une fois que nous avons cliqué, je répondrai. Nous voulons que notre souris soit de nouveau cachée. Nous allons donc copier ce code ici, et il le collera ici. Et nous allons régler le curseur de la souris pour qu'il ne soit pas visible. Ensuite, nous voulons régler le mode de saisie sur jeu. Nous allons donc définir le mode d'entrée sur le jeu uniquement, nous allons nous connecter ici. Et enfin, nous voulons masquer notre réponse une fois que nous avons collecté répondre. Donc nous allons traîner et nous allons détruire ou regretter, pas détruire, retirer les parents déplacés des parents. Et cela agit comme un nœud de destruction. Ainsi, lorsque nous cliquons sur notre réponse, berm indiquera au code de nos personnages dans le contrôleur de répondre ou de masquer notre souris. Et nous passerons en mode jeu uniquement, puis nous supprimerons notre réponse entendue de l'écran. Maintenant, nous n'utilisons pas encore notre manette d'exemple, nous devons donc passer en mode jeu. Nous allons donc nous diriger vers le navigateur de contenu et trouver le mode de jeu à la troisième personne. Ouvrez-le, vous pouvez trouver la manette du joueur ou la classe de manette de joueur par défaut ici. Et nous pouvons le changer pour qu'il soit le contrôleur d'exemple BP. Ensuite, nous allons compiler et enregistrer cela. Maintenant, une autre chose que nous devons ajouter est collision de nos personnages quand ils sont morts. Maintenant, nous ne voulons pas que notre personnage continue de bloquer des choses une fois qu'elles sont mortes. Nous allons donc ajouter un nouveau profil de collision. Nous allons donc accéder à Modifier les paramètres du projet. Et ensuite, nous voulons passer à la collision. Et puis les préréglages. Nous allons ajouter un nouveau préréglage. Je vais appeler ça un dieu mort. Nous allons définir la fonctionnalité Collision activée pour la requête uniquement. Nous allons définir le type d'objet sur **** pour tout reste qui va être ignoré. Ensuite, nous allons prendre des blocs statiques et dynamiques. Nous allons utiliser ce profil de collision pour notre capsule. Donc quand le joueur mourra, poupée de chiffon talon, mais sa capsule sera toujours là où nous sommes morts. Maintenant, nous ne voulons pas, si nous répondons, que nous nous rencontrions dans notre corps et que nous heurtions la capsule. Cela permettra donc à notre capsule de ne pas interférer avec la collision de notre joueur. Mais cela empêchera notre capsule de tomber à travers le sol car nous n'avons pas de blocage statique et dynamique sauvage. Notre capsule risque de tomber directement à travers le sol. Et maintenant, nous devons configurer notre capsule pour l'utiliser. Nous allons donc appuyer sur Accepter , puis passer à la troisième personne. Et nous pourrions l'ajouter à notre code ici, mais je vais en fait ajouter le mien à la poupée de chiffon de départ. Donc on va ouvrir ça et on va récupérer les composants de notre capsule. C'est tout à partir de notre panneau de composants. Faites glisser vers l'extérieur et faites Définir la collision. Et nous voulons le nom du profil de circulation. Et nous allons simplement ajouter ceci à la partie antérieure. Ça va être un enfer mort , écrit exactement comme ça. Maintenant, une autre chose que nous allons changer dans notre personnage dans le graphique d'événement est que ce code est géré par notre événement de début de jeu. Mais nous avons maintenant un système de réponse. Nous voulons changer cela pour qu'il ne soit exécuté que lorsque nous possédons le personnage. Nous pouvons donc cliquer avec le bouton droit et rechercher la possession de l'événement. Et nous pouvons utiliser Event possessed et le brancher ici. Ensuite, nous pouvons supprimer le début de la pièce. Et maintenant, chaque fois que ce personnage est possédé par un contrôleur, il exécutera ce code. Une autre chose que nous pouvons ajouter est, si vous vous souvenez, notre actrice Tracy va courir 30 fois par seconde, mais nous voulons arrêter cela lorsque nous plongerons parce que nous n'allons plus être interagir avec les objets. Donc, si vous vous souvenez, nous avons créé notre regard sur Act a timer et nous pouvons l'utiliser pour l'arrêter. Par ici, nous pouvons simplement ajouter ceci à la fin. Nous allons jeter notre regard sur le minuteur , sortir de cela et effacer et invalider le temps que j'achète la poignée. Et ça va arrêter notre trace comme ça. Et nous allons compiler ça. Maintenant, une dernière chose que nous devons changer dans notre bus de santé, nous allons donc nous y rendre et notre navigateur de contenu le trouvera en haut ici. Ouvre ça. Ensuite, nous nous dirigerons vers le graphique d'événements. Et si vous vous souvenez, hérite où nous obtenons le composant santé de nos pions. Le problème avec cela en ce moment est que nous avons maintenant un système de réponse ou de contrôle ou que nous n'avons peut-être pas pris le contrôle du **** lorsque ce code s'exécute. Il suffit donc d' ajouter un délai d'une image. Nous allons donc rechercher le délai et nous utilisons le délai jusqu'à la prochaine technologie. Et tout cela ne fait qu'ajouter un seul délai de trame à l'exécution de ce code. Et d'ici là, notre contrôleur aura pris le contrôle de notre ****. Nous sommes maintenant prêts à tester cela. Nous allons compiler et revenir au navigateur de contenu. Je vais changer les dégâts que zone endommagée fait donc je vais l'ouvrir. Je vais augmenter cela pour dire que 40 compileront. Et maintenant, nous pouvons lancer Play et tester ça. Donc, si je tombe dans la zone de dégâts, vous pouvez voir que nous subissons 40 points de dégâts. Et maintenant, quand j'y vais pour la dernière fois, tu verras notre personnage mourir. Des poupées de chiffon sur le sol. Nous pouvons appuyer sur répondre pour générer un nouveau personnage. Vous pouvez voir que notre interaction fonctionne toujours. Si j'appuie sur E, cela fonctionne correctement. Si nous rentrons à nouveau dans la zone, nous pouvons également tuer ce personnage. Nous disposons désormais d'un système de réponse pleinement opérationnel. Vous pouvez maintenant ajouter de nouveaux points d'apparition pour votre personnage. Pour ce faire, nous pouvons quitter et nous allons aller dans le menu déroulant ici, puis deux basiques et nous pouvons ajouter un nouveau joueur en le faisant simplement glisser. Nous pouvons en ajouter un deuxième, sorte qu'il passera à nouveau dans Basic, puis dans Player Start et nous en ajouterons un ici. Maintenant, lorsque nous jouerons pour jouer à cette étape, nous pouvons apparaître ou même l'un de ces nouveaux points. Nous allons donc appuyer sur Play. Vous pouvez voir que nous sommes apparus sur la zone d'origine, mais si nous courons dans la zone de dégâts pour nous tuer, nous pouvons réagir. Et vous pouvez voir qu'il me répond à nouveau à l'original. Mais si nous recommençons, nous répondrons à un point d' apparition différent. C'est donc tout pour cette leçon. J'espère que vous avez trouvé ces informations utiles et que vous savez maintenant comment mettre en place un système de réponse pour vos futurs projets. 57. Systèmes de jeu (Crouching): Salut tout le monde. Dans cette leçon, je vais vous montrer comment configurer un système accroupi pour vos personnages. Maintenant, vous pouvez utiliser toutes les animations accroupies que vous voulez. Je vais utiliser les animations de leçon que nous avons utilisées tout à l'heure dans le cours. Et pour les télécharger, il suffit de cliquer sur le lien dans la description du cours. Vous pouvez télécharger ce fichier, puis l'extraire, et vous devriez vous retrouver avec un dossier qui ressemble à ceci. Nous allons maintenant les ajouter à notre projet. Il suffit donc de cliquer avec le bouton droit de la souris et de copier. Revenez ensuite au moteur. Ensuite, cliquez avec le bouton droit sur le dossier de contenu ici. Et nous voulons afficher dans Explorer. Et cela affichera nos fichiers de projet ici. Et nous allons simplement les coller dedans. Vous pouvez maintenant voir qu'il est affiché dans le moteur ici. Maintenant, le vôtre peut avoir ou non des pare-feu à l'intérieur. Donc, si nous l'ouvrons, vous pouvez voir que le mien fonctionne, mais si le vôtre ne contient aucune animation, fermez simplement le moteur puis rouvrez-le et il devrait apparaître. Maintenant, la première chose que vous devez faire est créer un nouvel espace de mélange, car les animations de leçon n'incluent pas d'espace de mélange prédéfini pour notre accroupissement, mais elles incluent tous les les animations dont nous avons besoin pour en créer une. Cela créera donc un nouvel espace de mélange. Maintenant, je vais simplement cliquer sur Ajouter, puis sur Animation. Et nous voulons trouver l'option Blend Space ici. Et nous devons sélectionner le squelette de notre personnage. C'est donc celui-là. Vous pouvez voir qu'il est dit jeu de chemin, personnages, mannequins, puis maillages. Nous allons donc sélectionner celui-là. Et nous allons nommer cet espace de mélange, accroupissez-vous comme ça. Et nous allons ouvrir ça. Je vais juste faire glisser le mien dans la barre du haut comme ça. Pour commencer, nous devons configurer notre axe de manière à ce que nous commencions par l'horizontale. Tout ça va aller dans le sens. Alors cherchez la direction. Nous allons définir la valeur minimale à moins 180, puis la valeur positive à 180. Et si vous vous souvenez que notre espace de mélange est inférieur à, c'est parce que nous devons être capables de définir une animation pour toutes les différentes directions que notre personnage peut prendre. Ensuite, nous avons besoin de l'axe vertical, donc nous allons l'ouvrir et le définir comme étant la vitesse. Et nous laisserons la valeur minimale de l'axe à 0. Ensuite, la valeur maximale de notre axe sera celle votre vitesse de marche lorsque vous êtes accroupi. Donc, si nous prévoyons 300, nous allons le définir à 300. Maintenant, c'est important parce que si je règle cela sur 600 et que nous définissons des animations pour notre marche accroupie à cette valeur de 600. Si notre personnage se promenait lorsqu'il était accroupi à 300, alors les animations qui seront jouées seront dans la partie centrale ici. Donc, si nous avions des animations en bas et en haut, nous obtiendrions la moitié des animations en haut et l'autre moitié en bas. Et puis nos animations n'auraient pas l'air très bonnes. Nous voulons donc que notre valeur d'accès maximale au sommet soit égale à notre vitesse maximale de marche accroupie. Pour moi, je vais configurer jusqu'à 300, donc je vais également définir ce paramètre sur 300. Je vais également utiliser Snap to Grid pour les axes vertical et horizontal. Maintenant, si vous vous souvenez de nos leçons d'animation, nous ne pouvons pas utiliser notre chat d'animation accroupi parce que nous devons configurer nos squelettes pour qu'ils soient compatibles. Pour ce faire, nous allons passer aux personnages, puis aux mannequins, aux maillages. Nous allons ouvrir SK Mannequin. Ensuite, nous voulons aller dans Windows , puis nous voulons trouver les détails des actifs et cocher cette case. Pour les squelettes compatibles, nous voulons ajouter une nouvelle option. Et nous voulons que ce soit le squelette fourni avec les animations de leçon. Donc ça va être celui-ci, vous pouvez voir qu'il y a moins de chemin que d'animations. Nous allons donc cliquer sur celui-ci. Ensuite, nous sauverons notre squelette. Et nous pouvons clore les détails de cet actif et retourner à notre espace de mélange. Maintenant, pour que nos animations apparaissent dans le navigateur de ressources, nous devrons peut-être redémarrer notre blend space Nous allons donc simplement l'enregistrer et le fermer, puis je le rouvrirai. C'est ce qui se trouve dans les animations de mes leçons. Et nous allons ouvrir le Blend Space Crouch. Et maintenant, nous devrions pouvoir trouver toutes nos animations ici dans le navigateur de ressources. Il va donc commencer simplement par la recherche de accroupi. Et cela devrait afficher toutes nos animations d' accroupissement ici. Nous allons donc commencer par l'animation inactive. Je vais donc les mettre en bas pour la vitesse 0. Donc il va attraper le fusil, s'accroupir, tourner au ralenti, et le brancher ici, ici et là comme ça. Ensuite, nous avons besoin de l'animation de marche avant, et elle sera au centre parce que c'est pour la direction 0. Nous allons donc prendre l'option Ford ici et la faire glisser en haut au milieu, comme ça. Ensuite, nous voulons l'arrière, donc nous allons attraper celui-ci et il sera à la fois dans la direction moins un AT et dans la direction positive 180. Alors nous voulons la gauche. Nous allons donc prendre l'animation de gauche et la brancher ici. Et puis juste ici. Maintenant, lorsque nous maintenons le contrôle, nous pouvons prévisualiser notre animation et nous assurer qu' elles sont toutes lues correctement, ce qui semble être le cas. Nous pouvons maintenant l'enregistrer et le fermer. Nous sommes également proches de notre squelette. Et nous allons passer au plan de personnage de troisième personne. Ce sera donc dans le dossier à la troisième personne, plans, et ensuite nous trouverons le personnage à la troisième personne. Maintenant, notre plan de personnage possède en fait un système accroupi intégré que nous pouvons utiliser. Il suffit donc d' ajouter une entrée. Je vais donc rechercher une entrée , puis nous l'épelons et mettons l'événement d'entrée que nous allons contrôler. Je vais utiliser la commande gauche. Ensuite, nous allons cliquer avec le bouton droit de la souris et rechercher accroupi. Et nous voulons la fonction accroupissement. Et je vais le brancher sur pressé puis cliquer avec le bouton droit de la souris et rechercher sur accroupi. Et nous voulons que le accroupi soit connecté à la sortie comme ça. Maintenant, celui-ci a réellement fonctionné parce que notre personnage ne peut pas s'accroupir activé. Il ira donc au mouvement du personnage ici et recherchera peut s'accroupir. Et nous voulons nous accroupir sous des capacités de mouvement comme ça. Maintenant, nous pouvons le tester. Nous allons le compiler et cliquer sur Play. Et maintenant, si j'appuie sur Ctrl, vous pouvez voir ma caméra se déplacer vers le bas. Et quand je bouge, je marche plus lentement parce que nous utilisons notre vitesse de marche accroupie, mais nos animations changent parce que nous ne les avons pas encore branchées. Nous allons donc nous diriger vers le plan d'animation. Donc, il sortira de l'éditeur de plan, ira aux personnages plutôt qu'aux mannequins, animations et ouvrira l'argent Animation Blueprint. Et je vais juste faire monter le mien dans la paire supérieure. Maintenant, comme nous l'avons fait dans la section animation de ce cours, nous avons notre leçon d'états. Nous allons ajouter un nouvel état à nos animations Crunch. Nous allons donc nous diriger vers le graphe Anim puis vers la locomotion. Maintenant, il existe différentes manières de configurer cela. Si vous regardez ici, nous avons un état pour toutes les animations que vous faites, puis je vais marcher slash run. Maintenant, notre blend space intègre les animations inactives. Nous pouvons donc utiliser un seul état pour nous accroupir. Et il mettra à jour si nous sommes en mouvement ou si nous sommes inactifs pour nous. Mais si vous utilisez un blend space qui n'avait pas ces animations inactives. Ensuite, vous aurez besoin d'un état de ralenti accroupi et d'un état de mouvement accroupi, comme nous le faisons pour notre ralenti normal. Et puis je marcherai slash run. Pour nous. Nous allons simplement cliquer avec le bouton droit de la souris et utiliser l'état. Et nous allons appeler ça accroupi comme ça. Nous allons l"ouvrir et brancher notre espace de mélange afin qu"il traîne et ainsi fusionner l"espace. Et nous voulons Linspace Claire ici. Ensuite, dans le panneau Détails, nous voulons définir l'espace de fusion sur notre espace de fusion accroupi. Vous pouvez voir qu'il est mis à jour pour la direction et la vitesse. Nous allons simplement compiler et nous obtiendrons notre vitesse. Nous allons donc traîner et prendre de la vitesse. Et nous utiliserons la vitesse au sol. Maintenant, nous devons définir une variable de direction. Nous allons donc maintenant passer au graphique d' événements et nous allons créer une nouvelle variable. Nous allons appeler cette direction. Nous devons régler ça sur un flotteur comme ça. Maintenant, nous allons également ajouter une autre variable pour savoir si le personnage est accroupi. Nous allons donc en créer un nouveau et nous appellerons cela « accroupi ». Et nous allons également régler cela. Nous avons besoin que ce soit un booléen comme ça. Maintenant, pour prendre notre direction, nous avons besoin de notre vélocité. Nous allons donc cliquer avec le bouton droit et obtenir la vélocité Et ça devrait être en bas ici. Ensuite, nous allons faire glisser et rechercher la direction de calcul. Cela prendra notre vélocité et la rotation de nos personnages , ainsi que le retour et la direction pour nous. Nous allons donc avoir besoin de la variable caractère. Nous allons donc avoir du caractère. Et puis, à partir de là, nous voulons faire une rotation. Nous voulons l'acte de rotation du get et le brancher dans la rotation de base. Ensuite, à partir de notre direction Calculer, nous pouvons définir notre direction. Nous allons donc définir la direction. On peut raccorder ça à nos séquences. Donc je vais ajouter une nouvelle broche, la brancher ici, et j'ajouterai au réacheminement juste pour garder les choses bien rangées comme ça. Maintenant, nous devons définir R est des variables accroupies, nous allons donc les faire glisser et créer un nœud d'ensemble. Ensuite, nous allons faire bouger les choses. Et nous voulons la composante du mouvement de l'écart. À partir de là, nous allons nous accroupir. Sort correctement accroupi. Et nous voulons le nœud est accroupi ici. Et nous allons simplement le brancher à notre position accroupie, puis nous ajouterons un nouveau stylo à la séquence et le connecterons ici. Encore une fois, je vais juste ajouter une redirection maintenant juste pour garder les choses un peu trop idées. Maintenant, nous pouvons retourner à notre état accroupi. Et ici, nous devons brancher la direction r comme ça. Ensuite, nous pouvons compiler. Et maintenant, nous devons établir les règles qui intéressent réellement la foule. Nous allons donc à la locomotion. Ensuite, nous ferons glisser du ralenti au mode accroupi, et nous ferons également glisser de Walk, slash run à accroupi également. Et nous allons ouvrir la règle du ralenti à l'accroupissement. Ensuite, nous voulons juste l' accroupir et le brancher dans la hanche variable. Ensuite, nous ferons la même chose dans notre walk slash rum. Et nous allons le brancher ici. Ensuite, nous avons besoin de règles pour revenir de notre position accroupie à notre course au ralenti ou à la marche. Nous allons donc faire glisser de Crouch au ralenti, puis nous allons ouvrir cette règle. Et là, nous voulons juste nous accroupir, ce n'est pas vrai. Donc nous allons traîner et ne pas utiliser béryllium et le brancher ici. Ensuite, nous voulons faire la même chose. Nous avons traîné de Crouch à Walk Slash Run. Ouvre cette règle. Et ici, nous voulons faire la même chose est accroupi, pas vrai, donc nous allons essayer et ne pas booléen. Mais nous voulons également vérifier si nous déménageons ? Nous allons donc sortir d'ici et le faire et le brancher ici. Et puis on veut qu'on bouge, qu'on bouge, qu'on branche ça ici. Cela devrait donc ressembler à ça. Maintenant va compiler et nous pouvons réellement le tester. Nous allons donc sélectionner la variable est accroupie, prenez-la. Vous pouvez voir qu'il monte et descend comme il se doit. Nous allons donc compiler et tester cela dans le jeu. Il se dirigera donc vers notre carte, appuyez sur Play. Et maintenant, quand j'appuie sur Ctrl, vous pouvez voir que nous nous accroupissons, que l' animation au ralenti est en cours de lecture. Si je marche en avant et d'un côté à l'autre, des animations de mouvement sont également jouées. Actuellement, notre personnage fait juste face à la direction dans laquelle nous nous dirigeons. Et la raison pour laquelle il le fait est, si vous vous souvenez, j'ai marché slash run blend space est un 1D, donc il a juste en avant et en arrière. Il n'a pas d'animations latérales comme notre accroupi. Donc, si nous voulions nos animations latérales soient jouées pendant que nous sommes accroupis, nous aurions besoin de modifier paramètres de mouvements de notre personnage. Donc, pour ce faire, les planètes expireront, et si nous revenons à notre personnage ThirdPersonCharacter, nous pouvons sélectionner le mouvement du personnage. Et ici, nous allons chercher à orienter la rotation par rapport au mouvement. Vous pouvez voir qu'il est actuellement activé, ce qui signifie que chaque fois que notre personnage se déplace dans une direction, l'acteur fera face à cette direction. Désactivez-le et compilez en appuyant sur Play. Vous verrez que si je me déplace d'un côté à l'autre, notre personnage ne fait plus face à la direction dans laquelle nous nous dirigeons. Et la raison pour laquelle I animation fait cela est parce que nous n'avons que des animations en avant et en arrière. Mais si nous nous accroupissons et que nous nous déplaçons d'un côté à l'autre, vous pouvez voir que notre personnage place réellement les bonnes animations. Et c'est parce que notre espace de mélange 2D est accroupi avec des animations pour chaque direction. ce moment, si je regarde la caméra dans une autre direction, peu importe où je regarde. Notre personnage va toujours faire face de la même façon. Ce que nous pouvons faire pour changer cela est d'aller dans ThirdPersonCharacter ici, puis de sélectionner le composant supérieur ici pour obtenir nos valeurs de coût par défaut. Ensuite, nous pouvons rechercher York et nous pouvons utiliser la rotation du contrôleur. Vous êtes maintenant quand nous appuyons sur Compiler et sur Play, vous pouvez voir que je peux me déplacer d'un côté à l'autre et walk slash run ne joue pas très bien, mais notre accroupissement oui. Et si je regarde dans une autre direction, vous pouvez voir que notre personnage regarde dans cette direction. Nous pouvons donc changer la direction que nous envisageons actuellement. Maintenant, bien sûr, vous pouvez modifier tous ces paramètres pendant l'exécution lorsque certaines choses se produisent. Donc, par exemple, vous vouliez activer ou désactiver l'orientation de la rotation par rapport au mouvement lorsque vous vous accroupissez Vous pouvez le faire en obtenant simplement le mouvement du personnage ici, faisant glisser et en recherchant orientez, faites défiler vers le bas. Et vous pouvez définir l'orientation de la rotation sur le mouvement. Nous pouvons régler cela sur vrai lorsque nous nous accroupissons et sur faux lorsque nous sommes accroupis. Ou on pourrait changer ça. Vous configurez que nous avons activé dans les paramètres par défaut de notre classe ici. On pourrait changer ça. Nous pourrions donc définir, utiliser le contrôle de la rotation. Vous l'êtes, et nous pouvons l'activer ou le désactiver quand nous le voulons. Tous ces paramètres sont des préférences personnelles. Cela dépend totalement de la façon dont vous voulez que votre personnage se déplace et de la façon dont vous voulez que le joueur puisse le contrôler. Maintenant, si vous voulez changer vitesse de déplacement de votre personnage accroupi, nous pouvons le faire dans le mouvement du personnage ici, qui élimine cette recherche. Nous pouvons simplement rechercher accroupi et vous trouverez la vitesse de marche maximale accroupie ici. Vous pouvez également modifier votre demi-hauteur accroupie. Voici donc la taille du composant de la capsule à l'intérieur du personnage lorsque vous êtes accroupi. Et vous pouvez également décider si le personnage peut ou non marcher sur un rebord, accroupi sauvage. Encore une fois, ces éléments peuvent être modifiés dans le code. Vous pouvez simplement saisir le composant de mouvement du personnage , le faire glisser, régler l'accroupissement maximum, et vous pouvez modifier la vitesse de marche maximale accroupie dans le code si vous le souhaitez. Enfin, peut-être que vous voulez configurer l' accroupissement pour basculer au lieu de maintenir. ce que nous pouvons faire. Nous allons donc supprimer ce code ici les déconnecter pour l'instant et les déplacer en arrière. Nous allons utiliser pressé et faire un nœud de branche. Et ici, nous voulons vérifier si le personnage est actuellement accroupi. Donc pour ce faire, nous allons avoir le mouvement du personnage, le mettre accroupi ou est accroupi, nous allons le brancher ici. Et si nous sommes actuellement accroupis plutôt que nous voulons nous accroupir, et si nous ne le sommes pas actuellement , nous voulons nous accroupir. Il va donc les réorganiser comme ça. Maintenant, quand je clique sur Play, tu verras si j'appuie sur Accroupi. Je reste accroupi. Et si je m'accroupis hors de prix, nous sortons de Crouch et nous n'avons plus à le maintenir enfoncé. C'est donc la fin de cette leçon. J'espère que vous comprenez maintenant comment mettre en place un système d'accroupissement simple pour vos futurs personnages.