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.