Transcription
1. Développement de jeux de tir spatial avec Unreal Engine 5 Blueprints étape par étape: Lancez-vous dans une aventure de
création de jeux pas
comme les autres avec les lupins Unreal
Engine Five Développement étape par étape d'un jeu de
tir spatial. Votre première étape pour devenir un maître développeur de jeux
commence ici 5. Je suis Marcos, un créateur se concentre principalement sur l'
aspect codage de la conception de jeux Mon parcours dans le
développement de jeux vidéo a été nourri par une profonde passion pour la fusion de l'art
et de la technologie Cela m'a amené à poursuivre des études
approfondies et engager dans des applications
du monde réel dans le domaine de la conception de jeux. Ce
cours complet vous invite à
un
voyage passionnant pour maîtriser le développement de jeux avec
Unreal Engine Five Un puissant système de plan
conçu à la fois pour les débutants, désireux d'explorer la couche
du développement de jeux, et pour
les développeurs expérimentés qui souhaitent affiner leurs compétences avec
Unreal Engine Five Ce cours promet une expérience d'apprentissage
riche qui couvre tous les
aspects de la création d'un jeu de tir spatial
captivant Nous vous avons fourni un pack de ressources
complet pour démarrer votre projet, y compris tous les actifs nécessaires Ce pack comprend
un niveau spatial avec un vaisseau jouable unique et
deux atouts ennemis distincts Il est entièrement
équipé de 27 matériaux et instances ou de
réeffets particules d'instances ou de
réeffets pour les
propulseurs de navires et les lance-armes, pour des effets sonores inédits. Et deux niveaux de préceptes pour l'action, la révision et les skyboards spatiaux Cette gamme de ressources est conçue pour
vous donner une longueur d'avance vie à votre jeu avec des éléments
visuellement époustouflants et
captivants. Le cours est structuré
de manière à aider les débutants à devenir des développeurs de
jeux compétents partant de zéro, vous apprendrez à
tirer parti d'un véritable moteur, 51 des plateformes de développement de
jeux les plus avancées pour transformer vos
idées créatives en réalité. Grâce à
des démonstrations détaillées, acquérez une compréhension approfondie de l'architecture
et de la mécanique du moteur. Nous commençons par jeter les
bases de votre jeu, notamment en établissant
le mode de jeu. Conception d'un menu principal dynamique et mise en œuvre d'un système de peinture pour
les joueurs. Étapes essentielles pour préparer le terrain pour une expérience
de jeu immersive. fur et à mesure que le noyau progresse, nous approfondissons les mécanismes
du jeu Vous apprendrez à améliorer l'interaction des
joueurs grâce mécanismes de caméra
avancés et à des systèmes de contrôle
intuitifs. Implémentez un système de
mouvement robuste, animez votre vaisseau spatial et développez un système de tir complet Intégrer un
système de notation pour récompenser joueurs qui font tous
partie du programme. Sa leçon est méticuleusement
conçue pour s'appuyer sur les précédentes, garantissant ainsi une base solide à la
fois sur les fondamentaux et les techniques
avancées de
développement de jeux L'accumulation de points vous
permet d'
ajouter des fonctionnalités de
jeu sophistiquées, telles que des systèmes de missiles, mise en œuvre d'un système de score
élevé et la création de séquences de jeu en séquences Pour terminer votre jeu en polonais, bien
plus qu'
un simple cours de codage,
ce cours vous permet d' compétences en
matière de débogage, d'
optimisation des performances et d'application des
touches finales qui différencient
un jeu hors du commun conçu pour les
passionnés Ce cours offre des connaissances
précieuses et une expérience pratique, quel que soit votre niveau d'
expérience. Pour ceux qui s'
intéressent vivement aux jeux narratifs, envisagez de poursuivre vos
études avec Unreal Gin Five, jeu de conception
visuelle, novatrice et
narrative Ce cours supplémentaire
est méticuleusement conçu
pour approfondir votre compréhension
de la conception de jeux narratifs, vous
apprendre à créer des environnements
captivants, à maîtriser les
subtilités narratives avec les tables de données
Anal Engine Five et à intégrer facilement des mécanismes
complexes Que votre ambition
soit de créer des romans visuels
immersifs
ou des jeux riches en narration, ce cours vous permettra
de faire chaque décision compte et chaque scénario trouve un écho auprès
de votre public Unreal Engine
Five Loopings, étape par étape, développement de jeux de tir
spatial est votre passerelle pour
transformer vos rêves de développement de jeux en réalité avec
Unreal À la fin de ce cours, vous aurez entièrement
développé le jeu Spaceshoter, prêt à être étendu ou
porté sur la plateforme de votre choix. Si vous êtes prêt à vous
lancer dans ce voyage passionnant, apprenez et amusez-vous.
Joignez-vous à nous aujourd'hui.
2. Introduction au développement et au pack de ressources UE5: Bonjour et bienvenue sur le cours de
développement de jeux de tir
spatial
Unreal Engine Five, Blueprint étape par étape développement de jeux de tir
spatial Commençons notre cours par un
aperçu de notre pack de ressources. Et dites quelques mots
à propos de notre système. Et bien sûr,
expliquez en même temps certaines choses sur Unreal et certains concepts
de base du script Blueprint Maintenant, j'ai ouvert le projet de pack de
ressources, et la première chose que nous voyons est cette fenêtre que nous
appelons une fenêtre d'affichage La carte actuellement
chargée est la carte par défaut d'Unreal
que nous ne modifierons pas Nous pouvons voir sur le plan ci-dessous qu'il s'agit du contenu
du monde. Et nous pouvons voir qu'il a peuplé ce monde de certaines choses
par défaut. Mais nous ne l'utiliserons pas. Si nous allons dans le navigateur de contenu, nous
utiliserons un dossier appelé maps. En bas se trouve le navigateur de
contenu. Vous pouvez l'ouvrir
avec l'espace de contrôle, le
fermer ou l'ancrer. La mise en page, et elle reste ici. Personnellement, je préfère parfois le
dock, cela
dépend de ce que je travaille. Allons-y dès maintenant. Maintenant, dans notre contenu, c'est tout ce qui
se trouve dans notre projet. Il s'agit des dossiers de contenu
que nous avons classés ici. Ici, nous pouvons voir les dossiers. Maintenant, si vous ne
voyez pas les filtres, c'est peut-être parce que vous
n'en avez activé aucun. J'ai activé et
désactivé certains filtres. Il s'agit d'un endroit où les paramètres de
filtre
que vous avez utilisés sont enregistrés pour une utilisation rapide. Nous pouvons réinitialiser nos
filtres ici. Comme vous pouvez le constater, ils s'en vont. Mais si je clique,
disons par exemple,
Blueprint, Anything about
blueprints, all categories Si je clique dessus, Filtrer en haut. Jetons maintenant un coup d'œil
à notre navigateur de contenu. Nous avons
ici quelques dossiers, puis des plans, des
matériaux, des particules, des sons, de la
statique, du maillage et des textures En conséquence, vous trouverez
les ressources appropriées dans chaque
dossier Sur les mesures statiques,
vous trouverez les mesures statiques,
les textures, les matériaux,
les matériaux, les particules, les sons, etc. Dans le dossier
Blueprints, vous
trouverez un plan appelé sky box Passons maintenant à nos cartes. Passons d'abord à
notre niveau d'actif. Au niveau des actifs, nous
démontrons nos maillages statiques, certains matériaux que nous utiliserons et certaines particules, comment j'
utilise cette caméra. Permettez-moi de fermer le second
navigateur pour que ce soit plus facile. Maintenant, si je fais un montage radical, je peux déplacer la caméra de
gauche à droite, haut en bas, faire pivoter la caméra avec W S AD, je peux me déplacer. véritable éditeur couvre une
variété de mouvements dans la fenêtre d'affichage que nous
ne passerons pas tous en
revue pour le moment Dans nos fenêtres d'affichage,
voici les particules
que nous utiliserons pour les propulseurs et pour
notre trajectoire de missiles Ce sont les
matériaux que nous
utiliserons pour nos balles Ici, nous avons le message statique
que nous allons utiliser pour nos joueurs, Play Ship et les ennemis. Si nous revenons sur notre contenu et sélectionnons l'espace, le
niveau, le niveau, l'espace, nous pouvons le voir ici, ce qui est différent lorsque
nous testons notre jeu. Nous allons utiliser
ce modèle ici, mais lorsque nous appuyons sur, il joue le niveau, il joue tout ce que
nous avons programmé. Lorsque nous nous arrêtons, nous appuyons sur le stop ou sur Escape. Cela arrête la simulation. Avant d'entrer
dans le vif du sujet, examinons un peu notre système et les composants que nous utiliserons pour le fabriquer. Je vais donc apporter de la peinture, passer en
revue quelques concepts. Nous utiliserons un mode de jeu, mais je
ne sais pas ce qu'est un mode de jeu pour quelqu'un de nouveau. Il s'agit donc en gros d'un type de plan dans lequel
vous hébergez des règles de
niveau, car
les modes de jeu apparaissent à chaque Chaque niveau possède son
propre mode de jeu. Lorsque vous
réinitialisez le niveau, si vous le chargez à nouveau,
le le
mode de jeu s'exécutent également à nouveau. C'est une chose importante. Vous pouvez avoir plusieurs types
de modes de jeu dans un jeu. De plus, vous n'êtes pas limité à un seul. En gros, il s'agit d'un
plan qui héberge des règles de
niveau
ainsi que des informations relatives au serveur. C'est également important pour le
multijoueur. Quoi qu'il en soit, nous ne
ferons aucun mode multijoueur. Continuons. Nous
utiliserons un mode de jeu. Comme vous pouvez le constater, j'ai modifié quelques points
pour des raisons de commodité, mais relions les points. Dans notre mode de jeu, nous allons
faire apparaître notre joueur. Nous aurons une règle
pour faire apparaître notre joueur. Nous allons également créer le widget du menu principal.
Qu'est-ce qu'un widget ? Encore une fois, un widget est un
plan spécialisé pour afficher des éléments de l'interface utilisateur, comme
s'il s'agissait d'un graphiste Nous y reviendrons une fois que nous
aurons avancé nos leçons. En ce qui concerne les widgets, nous aurons un widget de menu principal,
un widget de jeu dans lequel nous
hébergerons nos Crosshairs, notre barre de santé et notre barre d'endurance Nous aurons également un
widget de fin de partie qui hébergera notre meilleur score et notre fonctionnalité de
réinitialisation du jeu Maintenant, j'ai parlé un peu création d'un
système de génération de joueurs pour les joueurs C'est ainsi que nous appelons joueur
pion personnage. Il existe de nombreuses
façons de s'y prendre. Nous utiliserons Player Really ou Blueprint pour cela Nous allons créer
un autre numéro, à savoir missile
à balles destiné aux joueurs Maintenant, le mot ici est acteur. Si nous créons un glossaire, il existe réellement un
glossaire
sur ces sujets Un acteur est un acteur n'importe quel objet qui peut être
placé dans le niveau. C'est peut-être un joueur. Cela pourrait être un moi statique. Un maillage statique simple
sans plan. Il peut s'agir de particules. Il peut s'agir du lieu de
départ d'un joueur, d'une caméra, de tout ce qui peut
être placé à l'intérieur du niveau. C'est un acteur en tant qu'information hiérarchique
dans Unreal, elle fait partie du jeu
comme elle se trouve en dessous de la
hiérarchie du système d'
intracomunication Mais c'est un
peu plus avancé. Quoi qu'il en soit, un autre acteur
que nous allons créer est un parent ennemi. Pourquoi je parle de parent ennemi ? Parce qu'à travers cet acteur, nous démontrerons à
l'enfant acteur quel est l'ennemi tireur. Et l'ennemi du boom, qui
sera celui des ennemis qui hériteront de certaines capacités et statistiques de
l'ennemi parent Il s'agit d'une autre fonctionnalité. Autre glossaire, un acteur enfant
est un acteur qui hérite des propriétés
de l'acteur parent Nous allons maintenant avoir des systèmes
que nous allons programmer. Nos systèmes de base seraient
bien entendu notre meilleur score avec un système de score de sécurité et de
fonctionnalité de charge. Cela comptera chaque
fois que nous tuerons des ennemis. Grâce à ce système de score, nous calculerons nos
améliorations, par exemple en fonction score et, bien sûr,
d'un système ennemi. J'ai gardé le système de santé pour la fin parce que
nous allions
utiliser un composant, un composant de
plan directeur Le glossaire pour cela est
un modèle. Un composant est un comportement que
nous pouvons concevoir et associer à plusieurs acteurs Comme nous voulons que le joueur et les ennemis adoptent
ce comportement, nous allons le qualifier, je crois, dommageable dans notre codage Maintenant, je pense que
c'est tout pour celui-ci. Je te verrai
le prochain. Au revoir.
3. Mode jeu et design d'interface utilisateur: Bonjour et bienvenue sur
Engine Five Blueprints, un jeu de
tir spatial développé
étape par étape Commençons donc par notre projet. Comme vous pouvez le constater,
le projet s'ouvre sur la carte par défaut
qui est vide. Eh bien, au cas où nous ferions
quelque chose de mal sur notre carte, si nous avions notre carte par défaut, pourrait le projet pourrait être annulé et vous
pourriez l'ouvrir. Beaucoup de choses peuvent mal tourner.
En gros, nous avons une carte par défaut vide, et maintenant nous allons
ouvrir notre propre niveau. Dans le navigateur de contenu, sur les cartes de dossiers, nous
pouvons voir l'espace de niveau. C'est notre
niveau principal. Il contiendra tout ce que nous
allons créer. Ouvrons-le. Comme nous l'avons dit, la première chose que nous allons faire dans ce niveau est d'avoir un mode de jeu qui
active le widget du menu principal. Et crée le lecteur et affiche en fait le widget du menu principal. Faisons-le d'abord.
Pourquoi partir de là J'ai créé un dossier dont je,
peut-être que c'est le contenu, peut-être que nous incluons ce dossier
sur le catch ou bien vous pouvez à juste titre mettre le contenu dans un dossier et accéder à un nouveau dossier et cela
crée un dossier. Vous l'appelez interface utilisateur. Et je ne vais pas le nommer
parce que je l'
ai déjà supprimé, non ? Vous pouvez ensuite créer un dossier, ou nous allons l'utiliser pour stocker nos widgets en tant que ressources. Je vais écrire, cliquer
et créer un widget. Je vais utiliser le widget
d'interface. Et le modèle que nous allons
utiliser est le widget utilisateur. Un autre cours. Pour nos besoins, je
vais convoquer ce groupe de travail. Je vais l'ouvrir. Je vais l'enregistrer
juste pour le garder en
mémoire afin que rien ne se passe dans le dossier Blueprints Je vais écrire, cliquer
et créer un nouveau plan. Maintenant, comme vous pouvez le voir, il n'y a pas de mode de jeu
ici car le jeu a base de mode de
jeu qui est
en fait un mode de jeu, toutes les classes et tous les types de mode de jeu. Comme vous pouvez le voir, il s'agit de l'ancienne base du
jeu et de l'ancien jeu. Je vais sélectionner
celui-ci, le voici. Et je vais l'
appeler Base Game. Commençons maintenant à héberger
nos règles en interne. En fait, avant
de définir nos règles, il serait
peut-être judicieux selon notre niveau, que
ce soit le jeu. Comme vous pouvez le voir, j'ai
ici un onglet appelé World Settings. Je n'ai pas cet onglet ici. Vous pouvez facilement le trouver dans les paramètres de
Windows World. Vous pouvez voir que c'est activé pour moi, il apparaîtra
ailleurs dans la mise en page, mais vous pouvez toujours
le déposer où vous le souhaitez. Dans un environnement mondial, nous passerons en mode gay. Remplacez là où il est indiqué non ou il se peut qu'il indique
simplement le mode gay, qui est la valeur par défaut Nous allons sélectionner le mode
non ou gay, notre propre gain d'espace GM, il a des valeurs par défaut. Nous allons modifier le
plan en interne. Nous pouvons le changer ici, en fait nous pouvons sélectionner notre personnage, tout
changer à l'improviste. Nous n'avons pas créé
notre personnage, mais il possède tous les autres
personnages par défaut que nous pouvons utiliser pour enregistrer le niveau
en revenant à un mode. Ces paramètres se trouvent
dans les valeurs par défaut des classes. Il existe des paramètres de
classe, des valeurs par défaut de classe, il existe quelques différences
d'options entre les deux Mais pour l'instant, nous allons utiliser les paramètres
de classe, accéder à la classe de points
par défaut et sélectionner. Si nous ne sélectionnons aucun personnage
et même pas notre personnage,
c'est parce que c'est le gade qui
fait apparaître le joueur Mais si nous avons sélectionné ici, cela signifie que lorsque
le niveau commence, le joueur où nous voulons spécifier quand le joueur
va apparaître. Intéressant,
nous le sélectionnons également ici, vous pouvez voir que cela a également changé ici. Cela affecte le plan. Mais je pense qu'il est bon de savoir
que les valeurs par défaut des classes
contiennent ceci ici en ce qui concerne la compilation Maintenant, dans la fenêtre d'affichage nous n'allons rien ajouter, généralement sous forme de plans
dans la Nous ajoutons quelques composants. Disons que c'est le bleu, dans
ce cas, nous voulons ajouter un script de
construction de fenêtre de fermeture Encore une fois, c'est quelque chose que nous
n'utiliserons pas dans le mode jeu. Il s'agit essentiellement d'un outil
permettant de modifier le plan
pendant sa création Dans notre cas, le mode de jeu
est créé dans le niveau, nous ne créerons rien. Objection. Ce que nous allons
utiliser, c'est le graphique de l'événement. Le graphe d'événements est généralement l'
endroit où se trouve le code principal. Le code du plan principal va supprimer l'
épaisseur de l'événement parce que nous
n'allons pas
l'utiliser, quelque chose qui s'exécute par épaisseur, par image Nous allons
utiliser Event Begin. Joue à ce jeu quand il fonctionne. Dans notre cas, lorsque le niveau s'exécute parce qu'il fait partie du niveau où le jeu commence,
faites quelque chose. Ce que nous allons faire,
nous allons créer,
faire glisser à partir d'
ici et créer ige. Voici notre
ligne d'exécution à partir d'ici. Ça, que dois-je faire quand je joue ? Un widget, ce que j'appelle
ce widget ou ce
widget de création , Wig connected line. Ce nœud de création nécessite une classe de widgets,
certaines valeurs par défaut. Il possède des valeurs par défaut. Et le widget que nous avons
créé, le menu principal G. Maintenant, lorsque vous avez un
tas de widgets, vous ne pouvez pas simplement taper
ce que vous voulez. Si je tapais le menu principal, je pouvais voir le menu principal du widget Nous allons le sélectionner
pour un cours. Quel widget dois-je créer ? En gros, c'est ce que cela signifie. Il a également un propriétaire. Si vous aviez un
jeu multijoueur local, par exemple, ou même dans un jeu multijoueur, vous pouvez afficher les widgets
des autres joueurs. Vous devez spécifier à
quel joueur appartient ce widget, à
qui il appartient. Maintenant, nous allons simplement utiliser le
contrôleur pour obtenir le contrôleur
du joueur. Cela donne une référence
à notre contrôleur. Maintenant, nous n'allons pas
créer de contrôleur, nous allons utiliser
le contrôleur par défaut. Et comme vous pouvez le voir,
il possède un index des joueurs pour les jeux multijoueurs locaux, vous pouvez spécifier le joueur par un index, de nombreuses méthodes. Nous avons créé le widget.
Désormais, lorsque vous créez un widget, vous devez l'
ajouter à la fenêtre d'affichage Comme add on, ce que voit
le joueur, il existe un nœud pour cela
appelé add to Viewport Mais nous n'allons pas utiliser
ce nœud pour le moment. Mais nous allons le garder. Déconnectons-le. Je me déconnecte en appuyant sur
Alt et en cliquant avec le bouton gauche. Ce que nous allons faire, c'est cliquer avec le bouton droit
sur la valeur de retour, où nous pouvons voir que le menu principal de type G, référence à l'objet. Maintenant, l'objet est un
terme important dans la programmation. C'est ce qu'on appelle la programmation
orientée objet. Nous ne nous intéresserons pas à l'
informatique pour le moment. Nous allons transformer cette valeur
de retour en variable. Qu'est-ce qu'une variable que
quelqu'un pourrait se demander ? Une variable est une donnée stockée. Il existe de nombreux types
de variables. Ils stockent des données. En gros,
vous pouvez manipuler ces données ultérieurement et en faire
quelque chose. En gros, la plupart
des choses doivent être variables. La plupart des choses avec lesquelles vous
voulez faire quelque chose. Nommons notre variable
WG dans la référence du menu, car elle fait référence
au menu du widget Nous pourrions l'ajouter à
nouveau pour ajouter Viewport. Comme vous pouvez le voir, le code couleur
S R. Mais nous ne pouvons pas ajouter
la manette de jeu à la fenêtre d'affichage car ce numéro de retour
nous donne une valeur de retour Référence claire à l'objet contrôleur, comme nous pouvons le voir ici. En fait, menu principal, référence à l'objet du
widget. Nous pourrions le connecter ici. Maintenant, comme nous l'avons dit, nous voulons l'ajouter à Viewport Et si nous ne l'
ajoutons pas comme ça, c'est parce que nous voulons faire
d'autres choses en même temps. Par exemple, depuis le contrôleur du
lecteur qui contrôle toutes les entrées et tout ce qui
provient du lecteur. Nous voulons configurer la souris en fait, je vais la copier-coller
et la connecter ici. Je vais l'apporter
ici si nous montrons la souris pendant que
nous jouons ou si est contrôlée par la manette de
jeu. Maintenant, je vais définir cela sur
true et le connecter ici. Maintenant, ce serait mal de
droguer des câbles comme celui-ci. Ce que je vais
faire, c'est
apporter ici, à partir de nos variables, nous en avons créé une nouvelle. Je vais apporter
ça ici. Et si je relâche simplement ma souris
, j'ai deux
options pour la configurer ou pour l'
obtenir et je veux l'obtenir. Mais pour le faire rapidement, si vous appuyez sur la touche Ctrl,
vous obtenez, si
vous appuyez,
vous réglez vous obtenez, si
vous appuyez, quelque chose. Nous allons le supprimer
et le connecter ici. Maintenant, comment puis-je appeler ce
bout de code ici ? Parce que si je le connecte
à la ligne d'exécution, il fonctionnera tous ensemble. Il y aura exécution,
exécution, exécution. Il exécutera cela aussi. Mais je ne veux pas le faire fonctionner
correctement au début du jeu. Je veux pouvoir le lancer
quand je veux.
Comment est-ce que je peux m'y prendre ? Comme on peut le voir, il s'agit d'une pièce de théâtre, c'est le maître-mot,
c'est la partie événementielle. Ce que nous allons
créer, c'est un événement personnalisé. Si j'écris un événement personnalisé tel que vous pouvez le voir, laissez-moi le refaire. Événement personnalisé et voir Odd, événement
personnalisé, événement personnalisé. Disons ceci. Afficher le menu principal. Je vais le connecter ici. Lorsque Afficher le menu principal s'exécute, il fera ces deux choses. Il affichera la
souris et
ajoutera la référence au menu principal, en fait le menu principal la fenêtre d'affichage utilisant la référence au menu
principal Maintenant, il y a encore une chose. Cela aide le système
à définir ce qui est, ce que nous
contrôlons actuellement, quoi nous nous concentrons. Par exemple, nous nous concentrons sur le menu principal ou sur le gameplay. heure actuelle, même si
c'est dans le gameplay, est-ce que nous nous concentrons sur un
widget ou est-ce que nous jouons ? Où dois-je envoyer les informations que je reçois
réellement ? C'est ce qu'on appelle une entrée définie. Vous pouvez maintenant voir que nous
avons défini le mode de saisie, le mode Game and I, le jeu activé. Et je ne définis que le mode de saisie I uniquement pour le moment, nous le voulons uniquement parce que nous sommes dans
le menu principal. Nous allons connecter
cette exécution ici, sur laquelle Widgit se concentre Il nous demande si nous allons
placer notre Widgit qui va
double-cliquer ici,
créer un nœud de redirection, puis double-cliquer à nouveau pour le rendre plus joli Nous pouvons toujours
redresser les connexions en cliquant avec le bouton droit de la souris
à partir de l'endroit où nous voulons commencer la partie à redresser Et sélectionnez le
fait que ce n'est pas simple. Nous pouvons refaire la
même chose ici, cette fois vérifier
le nœud de redirection, tout va
bien, mais parfois
ces choses prennent du temps Lorsque vous codez, vous ne le faites
généralement pas, puis vous venez ensuite
tout réparer. Maintenant, le mode verrouillage de la souris est activé. Ce
mode de verrouillage de la souris consiste à verrouiller la souris dans la
fenêtre d'affichage d'un widget spécifique Et il a besoin d'un système plus
complexe pour être utilisé
ainsi que d'entrées flash Il nécessite des
éléments spécifiques lors de la saisie, des configurations
spécifiques pour être utilisé. À l'heure actuelle,
nous allons également l'utiliser. Lorsque cet événement se déroulera, il exécutera tous les et ajoutera notre
menu principal à la fenêtre d'affichage Et il montrera notre souris. En fait, nous allons l'appeler
lors de l'événement, commencer à jouer. Je vais afficher le menu principal. Nous appelons cette
fonction événement. Cette fonction qui
appelle cet événement. En fait, je pense que c'est une
information suffisante pour celui-ci. Je te verrai dans
le prochain. Au revoir
4. Fonctionnalité du menu principal: Bonjour et bienvenue sur Real
Engine Pipe Blueprint. Développement étape par étape d'un jeu de
tir spatial. Dans la dernière leçon,
nous nous sommes arrêtés avec la
création du mini-système d'affichage des
menus. Et nous l'avons appelé sur Begin Play après avoir
créé le widget. Passons maintenant
au menu principal de notre widget. Comme nous pouvons le constater, il existe déjà une différence dans ce widget. Nous l'avons dans le menu
du widget de droite, nous pouvons voir une différence. Cela ne ressemble pas du tout
à la laquelle nous avons ouvert
ce plan Le plan du mode jeu
ressemble à la plupart des plans. Nous avons cette fenêtre d'affichage
ici que nous avons fermée ici. Nous voyons les choses différemment
, comme nous pouvons le voir ici. C'est designer et graphiste. Si nous passons au graphique, nous pouvons voir notre graphe, même le système de graphes. Mais nous avons un peu
de différence. Eh bien, billets pour les
événements sont en fait courants, mais les deux autres sont différents. Nous voulons y
prêter attention dès maintenant. Passons au design.
Parlons du designer. C'est ici que nous créons
l'apparence de notre widget. À quoi ressemblera le widget. Nous avons un tas de
primitives ici, comme des composants audio, des primitives
communes, des bordures, des
boutons, un tas de choses Ce dont nous avons besoin pour
le moment, c'est dans cette liste que
nous allons rechercher
Canvas. Qu'est-ce qu'une boussole ? Une boussole est quelque chose qui
nous permet de nous disposer en fonction de la
taille de l'écran Disposez nos objets en fonction d' une taille d'écran
ou
d'une taille spécifique. Mais pour le moment, nous avons
une boussole en plein écran. Dans cette boussole, nous
allons apporter un bouton, je vais dessiner un bouton ici Vous pouvez voir que je peux le placer
où je veux sur l'écran. Permettez-moi de supprimer ceci pendant une seconde. Si j'avais juste un bouton, c'est juste un bouton qui peut
définir sa taille, mais je peux définir où je veux qu'il soit sur
l'écran. Je vais l'annuler et avoir les cavas pour pouvoir
définir la position En fait, vous ne voulez pas de
bouton, je veux des boutons, je les veux dans la boîte
horizontale,
verticale ou verticale. Mais le bouton ne se trouve pas
dans le cadre vertical. Je peux toujours mettre le
bouton non pas comme ça, mais d'ici à l'intérieur de
la boîte verticale. Mais je peux aussi, si
je supprime celui-ci, cliquer avec le bouton
droit sur le bouton et
dire « envelopper avec boîte verticale ». À l'heure actuelle, la hiérarchie a changé. Le bouton est la deuxième case
verticale en premier. Il en serait de même si je
suivais simplement le bouton à l'intérieur de la boîte. deux façons de faire une chose, il y a plein de façons de
faire certaines choses. Deux boutons, comme nous l'avons dit, prendre le bouton, le
copier, ou nous pourrions le dupliquer, pourraient créer le même
effet que nous voulons obtenir avec trois
boutons à l'intérieur d'ici. Cela ne sera pas très beau
s'il ne s'agit que de boutons que vous pouvez voir
les uns sur les autres. Dispons-les en dehors de ça. Je vais nous apporter Pacer.
Apportons une entretoise Maintenant, je veux cette entretoise
à l'intérieur de la boîte, disons entre
les deux boutons Mais en fait,
mettons également une entretoise,
copions-la et
mettons une entretoise Et copiez-collez à nouveau et placez un espaceur en dessous. Assurez-vous maintenant que les entretoises sont à l'intérieur de
la boîte verticale. Nommons maintenant ces boutons. Appelons ça Start
Game, Quit game. Nous avons donné des noms à nos modèles, mais cela ne signifie pas que
ce nom apparaît ici. Pour ce faire, apportons un texte. Je vais le placer à l'
intérieur des boutons encastrés. Déposez-le sur le dessus du bouton. Il entre dans le bouton, vous pouvez voir qu'il est écrit
bloc de texte. C'est vrai. Maintenant, si nous
passons aux détails, tout a ses propres détails. Ici, les entretoises ont des détails. La case verticale contient
des détails sur le texte des détails. Nous pouvons voir ici qu'
il est écrit « texte du contenu ». Nous allons choisir
ceci et vous dire de recommencer. Alors que dans le prochain,
nous allons dire que nous y gagnons, ils ne sont toujours pas
très beaux ici. Nous devons
leur dire quelle taille ils obtiennent dans cette
boîte verticale, quelle est leur taille ? Dans cette case verticale, je
vais les sélectionner. tous. Et. Sans sélectionner le texte. Nous devons donc fermer
cette hiérarchie et sélectionner la raison
en est que si nous sélectionnons le texte le texte contient des
détails différents ici. Il dispose de différentes options. Il n'a pas le point commun car il se trouve à l'intérieur du bouton. Si je place le texte à
l'extérieur du bouton et qu'il
se trouve dans le cadre vertical, il aura les mêmes
détails. C'est ce que nous allons faire. Vous voyez qu'il a aussi du
pudding et de la taille. Mêmes détails, mais si je les
mets dans le bouton, le contexte de ces détails
change et c'est vraiment une machine très chouette qui
les sélectionne tous et appuie sur le champ, ils commencent déjà à
paraître bien espacés Ce que nous devons changer
maintenant, c'est la taille de la boîte verticale, où est-elle placée sur notre écran ? Ce que nous allons faire, c'est que nous pouvons réellement sélectionner
les ancres à partir d'ici C'est une définition
de la façon dont nous le réglons, par rapport à l'espace de l'écran, au widget, nous pouvons
le
définir avec les points, ce
symbole ici. Mais il y a aussi une
liste par défaut ici qui dit : « Je veux l'ancrer en haut ». Je veux l'ancrer de
ce côté en plein écran. Il existe de nombreux états
par défaut. Nous allons utiliser celui du
milieu de cette façon. Nous pouvons également définir la taille de cette boîte un peu plus facilement. Disons que
sa taille x est de 400 et que la taille Y est de 300. a l'air cool. Nous
allons le positionner. Maintenant, vous pouvez voir que c'est décalé parce que nous étions
en mouvement, je le déplaçais. Je vais remettre la position à zéro. Et vous pouvez voir
que sa direction et son emplacement d'origine sont pivotés depuis ce
coin Sur la base de ce virage, nous voulons
aller à mi-chemin dans la direction x -200 et à mi-chemin dans la direction
y moins 150 Et maintenant, nous avons une bonne
position pour notre widget. Voyons ce que nous avons
créé jusqu'à présent, car nous avons actuellement
une représentation visuelle et, sur la base du code que
nous avons écrit ici, nous devrions réellement
voir quelque chose. Parce que lorsque nous lançons le jeu, créez le widget et mettez-le à l'écran avec le
curseur de la souris. Complétons encore une étape. Passons au
bouton Jeu rapide. Maintenant, sur les boutons, nous devons d'abord
cliquer sur sa variable pour pouvoir manipuler
certaines choses. Vous voyez que lorsque je
clique sur est variable, cette liste apparaît ici. Les éléments supplémentaires ont été
cliqués, puis relâchés. Nous allons le faire publié. Ce serait une meilleure tactique à utiliser pour le
moment. Il se passe quelque chose à la
sortie du jeu rapide. Pour la sortie du jeu Quick, nous venons de quitter un jeu. Nous sélectionnons un jeu rapide, couche spécifique à
Quit Game. Nous n'avons pas besoin que quelqu'un qui
joue quitte le jeu. Compilons,
sauvegardons à notre niveau. Let's play, notre widget est là. Démarrez le jeu, jeu rapide. Démarrez le jeu. Je
ne devrais rien faire d'autre que quitter le jeu. Cela met fin à notre jeu. Donc ça marche. OK. Je pense que
c'est un bon point d'arrêt. Faisons une pause
ici et nous
passerons à la suivante. Au revoir.
5. Les bases du plan d'action du joueur: Dans la dernière leçon, nous nous sommes arrêtés à
la création des fonctionnalités du jeu
Quick et nous avons testé nos mécanismes
d'affichage du widget. Le bouton de démarrage de notre système
ne fonctionne cependant pas. Réglons ça.
Passons maintenant au mode jeu ici. Comme nous avons animé l'émission, code du menu
principal, nous
hébergerons le code du menu Hyde. Je vais écrire, cliquer et créer
un autre événement personnalisé. Je vais appeler
cet événement Menu principal. Maintenant, ce que nous voulons voir se produire ici, c'est le contraire que
nous voulons. Nous voulons montrer que
le curseur de la souris est désactivé. Nous voulons définir les entrées
en mode gameplay. Et nous voulons le supprimer
de Viewport. Comment s'y prend-on ? La
première étape est simple. Nous allons copier
la manette du joueur au lieu de « true », nous allons transformer
ce lingot en faux L'étape suivante
nécessitera un nouveau mode. Comme nous l'avons démontré précédemment, mode de saisie
défini, I uniquement, il existe également un mode de jeu en mode de
saisie défini. Cordialement, étant donné
que notre jeu
ne contient aucun widget axé sur l'utilisateur, cela nous convient parfaitement Comment supprimer de Viewport. Maintenant, il n'y a pas réellement de
suppression de Viewport, il y a une suppression de la fenêtre parent Je vais prendre la référence de notre
widget, vais copier-coller ici, et je vais
taper supprimer une partie Il existe une autre option. Il y avait une option
pour régler la stabilité. Nous
masquons ou réduisons la visibilité, ce qui est une
technique différente pour nos besoins. Supprimé du parent,
c'est très bien. Un détail important
à noter à ce sujet, ou même si nous utilisons
la visibilité, est que notre référence conservera la référence jusqu'à
la fermeture du mode de jeu. Comme ça, nous allons héberger Nous aurons la
référence du widget même s'il est supprimé
du parent. Ou réglez sa visibilité
pour qu'elle soit réduite ou masquée. En plus de masquer le menu principal. La prochaine chose que nous devons faire est créer un événement ou une fonction. Nous allons nous en tenir aux
événements pour le moment. Pour faire apparaître le joueur, je vais créer
un événement
personnalisé appeler Spawn Maintenant, nous n'allons pas le classer car la
première chose à
faire est d'utiliser le bouton pour
appeler ces fonctions. Ici, je
vais revenir à notre menu principal et je vais
vérifier qu'il est variable au bas de
la page de départ. De cette façon, j'expose encore une fois la fonctionnalité
de ces événements. Et nous allons
utiliser l'événement de sortie. Lorsque nous appuyons sur
le bouton Démarrer le jeu, nous voulons faire
apparaître le joueur et masquer le menu principal Maintenant, comment pouvons-nous faire cela lorsque
nous sommes sur ce widget, dont nous n'avons pas ces
fonctions ? Par exemple, si j' appelle Masquer le menu principal à partir d'
ici, il n'apparaîtra pas. n'y a pas de menu principal Masquer
dans la liste. Comment puis-je m'y prendre ? Eh bien, puisque nous
utilisons le mode jeu. Le mode jeu, comme je l'ai dit, est un plan très spécifique
contenu dans le niveau Real nous fournit un joli nœud
appelé get game mode, mais cela renvoie un type de mode de jeu
général, comme vous pouvez le voir, une référence d'objet
basée sur le mode jeu. Cela indique le
mode de jeu utilisé par ce niveau. Mais dans un type de
référence que nous ne pouvons pas utiliser pour l'
utiliser pour le comparer. En fait, si c'est notre mode de jeu nous devons utiliser un
nœud appelé casting. Nous allons donc coûter cher au jeu
GM GM Space lorsque nous voulons comparer des objets. Si c'est quelque chose que nous
utilisons, généralement des nœuds de casting. Il y a beaucoup plus de
détails sur le casting, mais cela n'entre pas dans
notre champ de compétence pour le moment. Nous allons connecter
l'exécution et nous
demandons quand le joueur commence. Le jeu est pressé, c'est le mode de
jeu, notre Ode de jeu. Oui, nous allons
faire quelque chose. Nous n'allons
rien faire en fait, peu importe si ce n'est pas
notre jeu, ne faites rien. Lorsque nous passons
au mode jeu. L'avantage que
nous en retirons, c'est que nous obtenons certaines actions
basées sur le mode de jeu. Comme nous pourrions appeler des actions spécifiques à partir de la référence du menu principal du
widget. Par exemple, nous pouvons appeler
des objets depuis le widget lui-même ou depuis le contrôleur du
joueur. Nous avons appelé des
choses spécifiques pour la souris. Ici, nous pouvons appeler des
choses spécifiques que nous avons créées dans notre jeu spatial
GM de classe. De là, nous pouvons faire apparaître un joueur. À partir de
là, nous allons sortir du jeu. Tu vois l'erreur
que j'ai commise. J'ai tracé une ligne à partir de l'exécution. L'exécution ne sait pas à
qui je parle ni d'où je dois
obtenir des informations. Encore une fois, il s'agit d'une question
contextuelle. Eh bien, ce n'est pas un
problème, c'est intentionnel. Si je dessine depuis le jeu, je vais écrire le menu principal. Et je comprends si je l'appelle
d'ici, dans le menu principal. Parce que tu vois, il est dit que cela
appartient au jeu spatial GM. Je clique, ça
ne connecte pas ça. Il va y avoir une erreur. Ça dit que c'est le cas, je ne
sais pas d'où ça vient. Mais si nous le connectons ici, cela fonctionnerait également. Compilez et enregistrez. Maintenant,
testons-le. Espace, appuyez sur Play. Si j'appuie sur Démarrer le jeu maintenant, spawn player
ne fera rien, mais le menu principal
devrait disparaître. Je clique ici, il n'y en a plus. Cette partie fonctionne également. Avec cela, nous avons créé une belle configuration pour démarrer notre jeu. Il est maintenant temps de commencer à
créer notre personnage. Passons au dossier Blueprint,
nous allons écrire,
cliquer et accéder à la
classe Blueprint et sélectionner un pion Maintenant, quelle est la différence
entre toutes ces choses ? Pourquoi ? Avant de créer un
jeu où tout a une fonction spécifique, l'acteur est comme la
classe la plus générale que nous puissions avoir. Un pion est quelque chose que nous pouvons
posséder et recevoir des commentaires. Une amélioration du pion
serait un personnage qui
inclurait la capacité de marcher Il dit que parce qu'il contient la composante de mouvement du
personnage, il s'adresse davantage au personnage réel. Mais comme nous
utilisons un vaisseau spatial, nous allons utiliser un pion Je vais donc sélectionner un
pion et je vais le
nommer espace de joueur BP Comme vous pouvez le voir, il
a également une icône différente de celle du mode de jeu. C'est un Pon, c'est écrit. Mais bien sûr, vous pouvez créer
vos propres miniatures à l'aide certains outils disponibles pour la taille des vignettes, le
pouce, le mode DD, les vignettes en temps
réel que pouce, le mode DD, vous
pouvez reproduire avec les vignettes pouvez Ouvrons le vaisseau spatial. Nous sommes revenus à la vision que
nous avions auparavant, à savoir les widgets. Nous avons une fenêtre d'affichage,
un script de construction, un graphe d'événements C'est ça. D'après les
principes de base, nous voyons que nous avons les valeurs par défaut des classes, les paramètres
de classe. Maintenant, il y a un tas de choses
que nous n'avons pas dites à propos la fenêtre d'affichage et nous
n'allons pas utiliser de script de
construction Je vais fermer ça. Nous allons utiliser la fenêtre d'
affichage et le graphe de bandes. Maintenant qu'il
ne s'agit pas d'un mode de jeu, il s'
agit d'
une présentation d'un acteur du monde. Nous devrons
construire notre navire ici. C'est ici que nous allons
voir notre vaisseau. Dans ce panneau, nous pouvons voir un bouton
appelé Composants. En fait, nous pouvons voir le titre Components
et un bouton d'ajout. Voici une liste
de nos composants. À l'intérieur du plan, ce que le plan contient
à partir des composants Cela peut être à peu près n'importe quoi. Comme si ça pouvait même être
un autre plan. Cela s'appelle Child Blueprint. Je pense. Mon enfant, laisse-moi voir. Ouais. Ce qui peut être un autre
plan en soi. Mais avant
cela,
parlons d' une règle très spécifique à notre cas en matière de blocage
de passes. La collision n'est
affectée que par la racine. S'il y avait une autre
collision à l'intérieur de l'étang, cela ne bloquerait pas
physiquement. Il existe de nombreuses façons de
le contourner pour le faire fonctionner, mais par défaut, cela ne fonctionnera pas. Il peut enregistrer les chaleurs de
collision, il peut enregistrer les chevauchements de
collision, mais il ne bloquera pas Ce que nous
allons faire, c'est ajouter une boîte de collision. Je vais faire de cette boîte de
collision notre racine. La deuxième chose que nous
allons ajouter serait un maillage statique qui
représentera notre navire. Sélection du maillage statique. Encore une fois, sur le
panneau de détails ici. Nous allons passer au
maillage statique et sélectionner notre navire. Quel vaisseau spatial ? OK, c'est un peu plus grand. Maintenant que nous avons sélectionné
comme racine la case, et qu'il ne s'agit pas d'une
racine n par défaut, nous abaissons le vaisseau. Vous pouvez voir que cette boîte
n'a pas l'étendue, l'échelle. Il n'a pas
notre outil de balance notre outil de déplacement ou
un outil de rotation. C'est parce que
c'est la racine, c'est le plan lui-même. Permettez-moi de le ramener à son emplacement
d'origine. Nous allons
aller sur place et
sélectionner le bouton Par défaut ici, il est passé à 000. Comment faire cette boîte
aussi grande que le navire, où il y a cette
boîte ici que nous allons l'agrandir un peu Peut-être beaucoup plus gros. Trop gros ? Je pense que c'est bon. Oui, c'est bon. Et
je vais m'agrandir de cette façon. Je pense que c'est bon.
Également de cette taille. Arrondissons ces chiffres. 650-65-0540, disons 190. Il s'agit maintenant de notre collision de
blocage physique. Cela ne veut pas dire
que c'est là nous allons être
endommagés, car nous
allons spécifier les dommages qui
se situent sur le corps lui-même. C'est un peu
plus élevé, peu importe. Nous pourrions abaisser le navire
un peu plus bas, mais cela pourrait créer d'
autres problèmes. Nous allons le laisser à 000. Maintenant compilons et voyons voir. En fait, passons en
mode jeu au moment de l'apparition des joueurs. Nous allons apparaître, c'est ainsi que nous amenons d'autres
acteurs au monde. Nous sélectionnons une classe et nous faisons apparaître
cet acteur dans le monde. Ici, nous avons une transformation. Si nous pouvons nous diviser de manière rétique, vous pouvez voir que le transformateur contient
trois vecteurs différents Le spawn transforme l'emplacement, la rotation et l'échelle Certaines options contre les collisions et d'autres options que nous n'allons pas utiliser
pour le moment. Je suppose que nous avons encore une fois une classe
comme celle que nous avions sur les widgets. Lequel, quel widget nous
étions en train de créer ou de créer. Nous allons sélectionner
notre joueur ici, vaisseau spatial à transformer Nous allons utiliser 000. Puisque notre monde est suffisant, commençons par le milieu. Nous allons être transformés. Allons voir le résultat. Nous passons au niveau spatial,
nous appuyons sur Play, et si j'appuie sur Démarrer le jeu, nous voyons
quelque chose apparaître. Je pense que c'est
suffisant pour celui-ci. C'est le bon moment pour faire une pause et nous allons passer
à la suivante. Au revoir.
6. Mécanique de la caméra et commande: Bonjour et bienvenue sur Unreal
Engine Five Blueprint, développement étape par étape d'un jeu de
tir spatial Dans la leçon précédente,
nous avons laissé de côté l' observation de notre
vaisseau géniteur de l'intérieur Cela se produit parce que
nous n'avons pas de caméra et que nous ne
possédons pas également notre navire Nous ne disons pas que c'
est le vaisseau contrôlé, c'est de là que nous
contrôlons le jeu. Réglons ces choses. Passons à notre vaisseau spatial sur
la affichage et ajoutons Un bras à ressort est un bon élément
pour tenir l'appareil photo. Nous l'utilisons comme
manette d'appareil photo ou
quelque chose comme ça parce qu'il possède cette caractéristique intéressante
de longueur de bras cible, qui augmente la taille du bras à
ressort que
nous allons attacher à cette caméra
à bras à ressort Vous pouvez voir la hiérarchie ici. Nous avons le bras à ressort lorsqu'
un enfant est la caméra. Vous pouvez voir un peu plus l'
intérieur que l'autre. Il a cet Arno
qui ne s'affiche pas lorsque nous le
fermons Lorsque nous l'avons ouvert, nous pouvons voir la hiérarchie dans le bras du ressort Mettons quelques valeurs par défaut. Tout d'abord, la
première chose devrait être la durée de 2000. C'est une bonne distance compte
tenu de la taille de notre navire. Il doit être à une hauteur 1 000. Donnons-lui une
rotation de moins dix. Compilons et sauvegardons. Maintenant, si nous allons jouer
et que j'appuie sur Play, vous verrez que rien ne s'est passé. Regarde ce qui se passe.
Nous ajoutons la caméra. Pourquoi ne nous le montre-t-il pas ? Eh bien, nous devons le posséder pour montrer
au jeu qu'il
s'agit de notre joueur. Utilisez essentiellement cet appareil photo. Au début du jeu. Je
vais passer à Broll, puisque
c'est ce qui contrôle notre personnage et que nous devons
dire au joueur Controller, qui possédons-nous ? Nous possédons notre
propre cible, mais qui ? Contrôleur de joueur qui
va posséder. Player Controller
va posséder dans Po. Qui possédons-nous à Po ? Nous allons taper « soi » et nous allons obtenir
une référence à soi. Le contrôleur du joueur
possède ce plan. Nous allons connecter
cette exécution. Allons-y et appuyons sur Play. heure actuelle, si je clique sur Jouer
et que j'appuie sur Démarrer le jeu, nous pouvons voir que le
problème de caméra est résolu. Nous avons fait des progrès, mais cela ne donne rien. Faisons en sorte que les choses bougent. Nous avons possédé le
joueur lorsque nous l'avons créé. Lorsque nous faisons apparaître le joueur, nous l'avons possédé Lorsque cela se produit,
le jeu de début se
déclenche lorsque celui-ci apparaît
et il prend
possession instantanément de lui-même. Passons à quelque chose de
très simple dès maintenant. Commençons par regarder autour de nous,
comme avant de partir, commençons par regarder à gauche, droite c'était du haut vers le bas
et tout le reste. Comment allons-nous nous
y prendre ? Nous allons avoir besoin de quelques informations. Maintenant, nous n'allons pas utiliser le système de saisie amélioré, car nous n'allons pas
changer, lier ou changer de clé,
ni effectuer d'actions compliquées. Tout se fera
sous forme numérique, et non sous forme analogique. Cela signifie que si j'appuie sur quelque chose, quelque chose se produit et
si je relâche quelque chose, alors quelque chose d'autre se produit. Nous n'avons pas
d'intermédiaires, comme si nous avions
une manette de jeu qui donne une valeur de 0 à 1
avec toutes les valeurs entre les C'est une forme analogique d'entrées. Puisque nous avons un formulaire numérique, prenons notre souris,
X, Y. Ce sont essentiellement des
entrées statiques C'est bon pour tester, c'est bon pour faire
bouger les choses uniquement avec cet
esprit et rien d'autre. Comme on peut le voir, il a une valeur de retour et
un nœud d'exécution. Cette valeur est appelée valeur d'axe. Maintenant, ces deux événements
se déclenchent constamment. Ils nous
donnent constamment le résultat du mouvement X de la souris
et du mouvement de la souris. Ce que nous allons
faire, c'est
utiliser ces deux axes de la souris et nous
allons les utiliser
pour contrôler la
rotation de notre vaisseau. Si nous cliquons en haut ici ou si nous cliquons sur
les valeurs par défaut de la classe, nous pouvons accéder aux valeurs par défaut de la
catégorie pon et dire « utiliser la rotation du contrôleur Pitch. Utilisez la rotation du contrôleur, nous avons besoin que les deux soient activés. Encore une fois, vous pouvez le trouver dans les valeurs par défaut
des classes ou dans le haut de la
hiérarchie ci-dessus, en fait la hiérarchie
dans l'onglet des composants. Maintenant, nous voulons
dire au pion que
chaque fois que nous nous déplaçons sur X, nous ajoutons, lorsque
nous nous déplaçons sur Y,
nous ajoutons sur Y.
En fait, nous ajoutons ou
soustrayons en
fonction de la direction de l'
axe dans lequel la souris Ce que nous allons faire, c'est
contrôler vos entrées. Il s'agit d'un nœud qui ajoute simplement entrée à la rotation du
contrôleur. Comme le dit
encore une fois le cool Tp pour expliquer pourquoi nous
allons utiliser la saisie de pitch, ces
deux nœuds
ont besoin d'une valeur. Cette valeur serait la constante de
notre souris, donnant de la valeur, allant
compiler, enregistrer. Passons à notre niveau,
appuyez sur Play Start Game. Maintenant, vous pouvez voir que je
peux vraiment me déplacer maintenant, car vous pouvez le voir si vous
le testez en même temps que le y est inversé Des choix difficiles pour cela seraient de multiplier ceci, cette valeur, cette valeur de l'axe
y par moins un Maintenant, cela nous donne une valeur
opposée. Une autre chose est que c'
était un peu trop rapide. Ce que nous pouvons faire, c'est
multiplier à nouveau avec un autre nombre, et le faire également sur le x. Ce que j'ai fait, c'est copier le nœud de
multiplication et le coller. Je vais le connecter
ici. Connectez ceci ici. Je vais définir
les valeurs à 0,05 0,5 C'est la moitié de
la valeur d'origine Nous jouerions à
demi-sensibilité. Maintenant,
comme vous pouvez le constater, la sensibilité a été considérablement réduite
et nous avons corrigé la rotation inversée Maintenant, la caméra est un
peu en avant. Je pense que nous
devrions peut-être le placer un
peu plus à l'envers. Ou placons-le un
peu plus à l'envers. Inclinons également le moins dix. Outre l'angle
de la perche, la caméra bénéficie d'une rotation supplémentaire de
moins dix. Cette zone semble bien meilleure. Nous tournons, nous pouvons réellement voir le monde maintenant, bien sûr Si vous tournez vers le haut, vous pouvez voir qu'il
y a un verrou à cardan, comme on l'appelle, qui
empêche un tour à 360 degrés Mais c'est avantageux
car il serait très facile de passer le tour complet. Cela rendra le
joueur très facile. Je pense que c'est tout pour celui-ci. Je te
verrai le prochain. Au revoir
7. Aperçu des mouvements des personnages: Bonjour et bon retour
sur Real Engine Five. Développement étape par étape d'un jeu de
tir spatial. Dans la leçon précédente, nous avons
fini par créer la rotation du personnage
là où nous regardons seuls. Nous avons ajouté le boomstick
et la caméra, et nous avons
enfin pu
voir notre vaisseau sous un angle correct Maintenant, dans celui-ci, nous
allons ajouter du mouvement à notre vaisseau. Mais avant cela, permettez-moi d'apporter de la peinture et de
griffonner quelques explications Tout d'abord, comment allons-nous déplacer notre personnage ? Nous pourrions définir l'emplacement de notre
acteur, il s'agit de lieux. Nous pourrions définir
notre position plus ou moins une certaine distance. Et nous pourrions déplacer
le personnage de cette façon. Nous n'allons pas
faire ça. Au lieu de nous
allons utiliser,
en fait, revenons à
un projet pendant une seconde. Dans les composants, il y a un
composant dont le comportement est pour nous déjà créé avec
quelques éléments supplémentaires. C'est ce qu'on appelle le chargement sur le mouvement, le pont
flottant, le mouvement. Comme nous pouvons le constater, il contient des
valeurs d'accélération, vitesse et des valeurs de variables et
d'attributs avec lesquels jouer. Nous n'allons pas
utiliser la plupart d'entre eux, mais c'est un très bon système pour contrôler les ponts qui
flottent dans l'espace, par exemple. Comme vous pouvez le constater, vous
trouverez ici une description complète avec plus d'informations. Revenons maintenant à nos duals avec cette composante de
mouvement flottante Disons que nous avons notre vaisseau ici. C'est notre vaisseau, ça n'en a pas l'air, mais ça l'est. Nous avons fait un pas en avant. Mouvement vers l'arrière, disons directement depuis la gauche, depuis la droite. Nous aurons également un mouvement
de haut en bas. Ce serait notre W,
ce serait notre A. Ce serait, ce
serait D, pour up. Nous allons utiliser
la barre d'espace et pour descendre, nous allons
utiliser le bouton de commande. Une autre chose.
Si nous sommes dans l'espace et que nous avons un vaisseau spatial, nous poussons vers l'avant et nous poussons en même temps vers l'arrière Nous ne devrions pas déménager. La même chose devrait
se produire lorsque nous
poussons vers la gauche et vers la
droite en même temps lorsque
les deux sont actifs Lorsque les deux sont inactifs, la vitesse sur cet axe doit être nulle et
identique sur celui-ci. En fait, il serait
préférable de le montrer dans le code. Je pense que ce serait un
peu plus logique. Commençons notre codage. Nous avons notre composant
mobile flottant. Je vais aborder cette question à côté de cet événement intense, car notre
mouvement va se produire. Nous devrions vérifier que nos
mouvements bougent. nous ne nous déplaçons pas comme
cela devrait se produire chaque image depuis le composant de mouvement
flottant, nous allons faire glisser l'entrée. Cela nous donnera du mouvement. Maintenant, si on le laisse à
zéro, ça ne servira à rien. Mais prenons un exemple. Si nous mettons 100 sur
X et que nous appuyons sur Play, je vais l'
éjecter pour le montrer Nous pouvons voir que
notre vaisseau spatial est un film comme je l'ai fait en ce moment. Si vous appuyez dessus et
que vous vous éjectez dans la fenêtre d'affichage, vous avez cette caméra gratuite
pour voir votre monde Si j'appuie sur Play,
je vois que je ne possède pas le personnage parce que je suis
expulsé du Je peux naviguer et voir ce qui se passe sans
vraiment jouer. Comme on peut le voir, si
je mets 100 sur X, il se déplace vers X
à une vitesse de 100. Maintenant, c'est là que les choses vont commencer à devenir
un peu complexes. Mais avant de passer
aux choses complexes, je t'ai peut-être un
peu effrayé, mais ça va. Nous allons tout
expliquer. Avant de passer
aux choses complexes, faisons quelques entrées, comme nous l'avons fait pour mousex et mousey Nous allons
appeler le clavier, nous allons
appeler le clavier, je dois le trouver. C'est ici. Et apportons
le clavier et le tableau. Et nous aurons
également besoin d'un espace et, sur le clavier, de la commande gauche. J'espère que tu as arrêté
de chercher. Nous avons apporté notre clavier gauche. Commençons par créer
quelques variables pour dire si elle est pressée
ou non. Nous allons
utiliser des lingots. Pour cela, nous allons avoir besoin
de 123456 lingots. Ce n'est pas la meilleure solution, mais c'est ce que nous
allons faire dans ce cas. Je vais faire 12345. Je vais nommer le premier. A est pressé, est pressé, désolé, D est pressé, je vais avoir des W. Et c'est le repos et l'espace. C'est du repos. Encore une fois, je fais un copier-coller et je suis parti D'accord, certains ont du capital, non. Laisse-moi régler ça très rapidement. Amenons nos variables
ici avec des setters. Je vais faire glisser et déposer en appuyant sur AT et nous
aurons des setters. L'un est vrai, l'
autre est faux. Je pense que nous pouvons le copier-coller. Puisque nous avons créé
les variables ici, nous pouvons corriger une variable et
remplacer la référence W.
Rapidement et facilement, nous pouvons effectuer toutes ces connexions, en
gardant à l'esprit que lorsque vous
appuyez sur cette touche, c'est oui. Quand on n'appuie pas, c'est non. Nous allons le
remplacer par. Remplacez-le par « Faisons également D reps ». Nous allons faire de même pour la barre d'espace et nous allons faire de
même pour le contrôle. heure actuelle, nous pouvons facilement effectuer
nos entrées
pour tester notre mécanique. Enveloppons tout cela un
peu plus loin et mettons un commentaire
Paramètres des entrées Staples Nous allons
cliquer sur Afficher la bulle, afin de voir de loin ce fait
ce code ici. Revenons-en
aux choses complexes. Mais vous savez quoi, je pense que cela nécessite
une analyse un peu plus approfondie pour être expliqué. C'est tout pour celui-ci. Je te
verrai le prochain. Au revoir
8. Développement de la fonction de mouvement: Bonjour et bienvenue sur le Real Engine Five Blueprint développement étape
par étape du
jeu Space Shooter Dans la leçon précédente, nous avons dit que nous allions laisser la partie
effrayante à cette leçon. Nous avons ajouté quelques entrées. Nous avons dit que nous allions
expliquer les calculs effrayants ici, ce
qui n'est en fait pas si effrayant, pour être honnête. Laisse-moi ramener de la peinture. Ce que nous allons
faire, c'est, comme nous l'avons dit, c'est une direction
vers l'avant et vers l'arrière. La direction vers le haut et vers le bas,
la direction gauche vers la droite. C'est un vecteur, en fait nous avons un vecteur à
trois ou deux points. , un point mathématique est en fait une
collection de trois nombres. C'est essentiellement ce que
c'est, la façon dont nous l'utilisons. Il existe de nombreuses façons
d'utiliser trois chiffres. Supposons que le x de
notre vecteur soit le W, que le fil de
notre vecteur soit a et D,
et que le z de notre
espace vectoriel soit le par et le contrôle. Nous allons calculer
chacun d'eux séparément. Ensuite, nous allons
les ajouter à un vecteur pour
obtenir la direction totale de notre mouvement,
notre vitesse totale. Si nous sommes, disons, un ici, et que nous passons
à moins un ici, et que c'est zéro, alors nous nous déplaçons en diagonale dans cette
direction,
un moins un Faisons cette action. En fait, passons
à l'action. Parfois, ces exemples
sont meilleurs en action si nous ajoutons toutes ces questions mathématiques
et mathématiques que nous nous posons. Si nous nous déplaçons
vers le haut, vers bas ou vers le bas ici, nous allons
créer Ce que nous allons faire, c'est créer une fonction. Maintenant, quelle est la différence entre une fonction et un événement ? Il y a de nombreuses différences. L'une des
différences les plus pratiques serait que fonctions ne peuvent pas faire des choses
temporelles, comme nous ne pouvons pas effectuer de retard
dans une fonction. Il n'y en a pas. Nous pouvons attribuer le délai
à d'autres choses. Ce sont des choses beaucoup plus
complexes, mais dans des circonstances normales,
nous pouvons retarder ce laps de temps
avant que vous ne passiez à autre chose. Nous pouvons essentiellement jouer avec le temps, alors que dans les fonctions, cela est presque impossible à réaliser. Vous pouvez avoir de nombreuses fonctions
et des délais entre elles. Mais à l'intérieur de la fonction il n'y a pas quelque chose qui
peut être fait facilement. Tout sera également dans
cette fonction, cette fonction
sera une fonction pure. Qu'est-ce que cela signifie, laissez-moi
décliquer dessus pendant une seconde. Si je dois appeler
cette fonction ici, vous allez la
glisser-déposer. Ici, nous pouvons voir qu'il possède
une ligne d'exécution. C'est ce qu'on appelle parler, jouer, jouer, courir
et commencer à jouer. Est en cours après cet événement. Après cette fonction, il exécutera cette fonction et continuera à faire autre chose si nous l'avons
en tant que fonction pure. Vous pouvez voir que c'est très
similaire à ça. Cela nous donne un résultat dès maintenant. Nous ne l'avons pas donné pour nous le dire. Faisons-le dans les sorties
lorsque nous sélectionnons la fonction en interne
ou en externe. Permettez-moi de revenir
au graphique à partir d'ici. De l'intérieur de la fonction, nous pouvons voir qu'il y a effectivement des entrées
et des sorties. De plus, sur la sortie, il crée des ordres et
connecte en fait, la ligne d'exécution,
un nœud de retour. Nous pouvons maintenant voir qu'il existe un nouveau paramètre
en tant que nœud de retour, en sortie de cette fonction. Cela peut être considéré
comme une boîte noire. Il se passe quelque chose à l'intérieur
et nous n'obtenons qu'un résultat. Nous allons introduire
cette fonction
ici . Allons à l'intérieur. Nommons cette fonction.
Appelons cela les mathématiques du mouvement. Le nœud de retour. Nous devons l'
avoir non pas comme lingot, mais comme vecteur Parce que le vecteur est ce que nous
allons connecter ici. Pour relier cela ici, nommons également
ce vecteur au mouvement. Il y a eu du mouvement, de l'amplitude ,
peut-être, parce que nous allons
également
mettre la vitesse ici. Je suis désolée, nous n'
allons pas mettre de la
vitesse ici parce que notre vitesse est contrôlée par notre composant de
mouvement flottant. Nous ne fixons pas un emplacement défini, nous utilisons le composant
mobile flottant. Nous allons avoir besoin de
trois nouvelles variables. Nous allons en avoir 123. Ils seront
du type vectoriel. Si je l'ai fait très rapidement, vous pouvez cliquer sur un type de variable et modifier le type de variable. Ou vous pouvez le faire à partir de
ce panneau ici. Et sélectionnez le
type de variable ici. Nommons ces variables.
Nommons celui-ci. Avancer et reculer. Ce sera L R, non ? Ce serait du haut vers le bas. Ce résultat serait que cette direction de mouvement serait le résultat de l'ajout de
trois vecteurs. Une autre façon dont nous
aurions pu le faire est que chacun d' eux soit un entier ou un flottant. Nous les
ajouterions séparément, mais l'ajout de vecteurs
revient au même. Je vais le connecter ici maintenant, nous devons remplir le spectre d'une manière ou
d' Je vais les apporter
avec Alt pour les configurer. Mettons-les en ordre. Peu importe la commande,
car cet ajout
se fait instantanément En fait, cela se produit une fois que
nous avons calculé tout cela. L'ordre
dans lequel nous le faisons n'a pas vraiment d'importance. OK, il nous faut de la place. OK,
commençons par B. Je vais
apporter une condition et des lingots Cela signifie que si les
deux sont vraies, si les deux sont fausses, si l'une est vraie
et l'autre non, alors cela renvoie faux. Ils doivent tous les deux être fidèles pour que nous obtenions un véritable résultat. Dans tous les autres cas, cela nous
donnerait un résultat négatif. Nous voulons également
le contraire. Nous allons le copier-coller
et le mettre devant eux. Qu'est-ce que cela signifie ?
Cela signifie que si c'est oui, changez un non, c'est un non,
transformez-le en oui. Je vais également apporter la fin. Maintenant, remarquez que j'ai fait le nœud, le revers des
lingots, avant la fin Parce que disons par exemple que si je le mettais après la fin, cela ne me donnerait pas
les mêmes résultats. Par exemple, si W était
vrai et faux, cela renverrait un résultat négatif. Et le fait de mettre le nœud ici en
ferait un point positif, mais cela aurait
dû être négatif C'est la raison pour laquelle nous
les inversons tous les deux. Ensuite, nous ajoutons
la fin car les opérations logiques
modifieraient le résultat. Ce type de vérification est
appelé portes logiques. C'est un grand chapitre
sur la façon de les utiliser,
les utilisations les plus courantes et tout le reste. Cela fait partie de l'informatique, c'est très intéressant. À l'heure actuelle, nous avons
nos deux conditions. Nous avons deux conditions. Notre première condition
est la suivante : le WNS est-il pressé en même temps ? Et la deuxième
condition est en fait dire si le WNS n'est pas du tout
enfoncé ? Aucune d'entre elles n'est pressée. Si c'est l'une des autres, nous devrions faire ce
que j' appellerai porte logique, porte logique. Cela signifie que si c'est vrai ou si
c'est vrai, faites quelque chose. Qu'allons-nous faire avec
cette question ici ? Parce que c'est une belle question de
complexité, mais pas trop complexe, mais il ne
s'agit pas d'un lingot Nous allons sélectionner un
résultat pour notre direction B. Je vais faire glisser le pointeur depuis
la direction B et taper select. Comme vous pouvez le constater, deux options s'
offrent à nous. Sélectionnez le plan et le vecteur. Les deux sont identiques. La différence, c'est que
si je choisis select, cela me donne un joker ici. Parce que je pourrais choisir en fonction de quelque chose de
différent d'un lingot Il se peut que je souhaite sélectionner
en fonction d'un entier. Il se peut que je souhaite sélectionner
en fonction de l'énumération. Select peut être utilisé dans
différentes conditions. De plus, si je connecte le
résultat du Or ici, le joker sera automatiquement remplacé par un lingot Maintenant, si cette condition est vraie
pour l'une de ces raisons, notre direction devrait rester nulle. Il devrait rester nul dans
la direction F B car nous sommes peut-être
en train d'appuyer sur autre chose. Si c'est vrai, c'est zéro. Si ce n'est pas le cas, nous
allons sélectionner à nouveau. Cette fois, je vais
utiliser le
vecteur de sélection et vous pouvez voir qu'il tient compte du
fait que ce
pick a , le vrai est ici,
le faux est ici, alors qu'ici c'est le contraire. Le faux est ici,
là où le vrai est là. Cela dit, revenons un
peu en arrière. C'est pressé. Nous n'avons pas besoin de
demander si c'est enfoncé, car si nous avons passé
cette vérification ici, nous
ne nous soucions que de
l'une des deux autres directions. Si c'est vrai, alors nous
allons aller de l'avant. Si ce n'est pas le cas, c'est vrai, nous allons
reculer Si ce n'est pas le cas, nous allons
aller de l'avant. Maintenant, je dois expliquer d'
autres choses. C'est une excellente occasion d'
expliquer l'orientation mondiale par rapport orientation
locale.
Expliquons-le. Maintenant que nous avons dit que nous avions un
progrès en ce moment, j'ai donné l'exemple d'un
moins un dans notre plan directeur Nous avons un système de coordonnées. Par exemple, lorsque nous
plaçons la caméra, le ressort de la caméra, nous avons dit qu'elle
passerait à 1 000 sur l'axe Z. Eh bien, ces 1 000 sont basés sur le centre de notre plan
sur son propre système de coordonnées Mais lorsque nous sommes sur le monde, ce système de coordonnées n'
est pas le même. Le monde a sa propre localisation. C'est relatif au monde et
au plan directeur. Le relatif au plan, nous l'appelons l'emplacement
relatif Et l'autre est
le mot « localisation ». Il y a cette différence
entre les deux. Nous ne voulons pas ajouter plus une direction vers
l'axe x ou y. Quel que soit
l'avenir que nous
envisageons dans le plan directeur, nous voulons l'ajouter en fonction du monde Unreal nous a fourni
une fonction juste pour cela. C'est ce qu'on appelle get at
forward vector. Nous avons le vecteur
avancé de nos acteurs. Cela signifie que si nous n'
appuyons pas sur S, nous devrions avancer. Si nous insistons, nous
devrions reculer. Pour ce faire, nous allons simplement multiplier par moins un
pour annuler la valeur Comme vous pouvez le voir ici, nous avons vecteur multiplié
par un vecteur car s'il s'agit d'une multiplication de type, cela nous
donne cela par défaut. Pas de soucis Nous pouvons le changer Cela nous a également donné ce système. Que nous pouvons changer
cela à partir d'ici en cliquant avec
le bouton droit de
la souris et en sélectionnant le type compatible. Nous allons sélectionner un
entier et faire un moins un. Et connecte-le ici. Les avancées et les
reculs devraient être prêts. heure actuelle, si nous allons jouer, je ne vois aucun mouvement. Voyons pourquoi c'est le cas. Je pense que nous devons relier les mathématiques du mouvement
au facteur d'entrée. Si je joue maintenant, Crest Game, c'est vrai, mais il y en a un petit peu, nous avançons trop lentement
pour que cet arrière-plan puisse indiquer
que nous bougeons. Mais pour le tester, nous pouvons réellement
entrer dans la bouche. Nous pouvons connecter,
disons , le vecteur direct
dans la direction F B de compilation. Appuyons à nouveau sur Play. Si on peut le voir bouger. Si nous relions le
signe négatif à la direction B, l'opposé de l'avant, nous rejouons ,
nous rejetons et
le joueur recule Oui, notre vaisseau est en mouvement. Nous ne pouvons tout simplement pas encore le voir. OK, je vais
compiler et enregistrer. Je pense que ces informations sont
suffisantes. Dans les prochaines leçons,
nous allons
terminer les
deux autres mouvements. Je te verrai dans
le prochain. Au revoir
9. Visualiser un mouvement avec des sentiers accidentés: Bonjour et bienvenue dans le développement
d'un jeu de
tir spatial à moteur 5, étape par étape. Au cours de la dernière leçon, nous nous sommes arrêtés à la création du mouvement
d'avant en arrière, ce qui était la partie la plus difficile pour
expliquer ce que nous faisions. Dans cette leçon,
nous allons
terminer le prochain gauche-droite
et
le mouvement vers le haut de la ville, mais cela va être très simple Nous allons simplement coller cette
logique ici. Commençons par ce
copier-coller cette logique ici. Je vais le connecter
à L R, et nous allons changer nos W et S en A et D. Nous allons
tout remplacer par A
et D. L'ordre
n'a pas vraiment d'importance
, car le résultat
sera le même. Nous allons également
changer cela
en D, peut-être inversé. Maintenant, la seule différence est au lieu d'utiliser le vecteur
acteur vers l'avant, nous allons utiliser
le bon vecteur. Si vous appuyez sur cette option, je pense que c'est le contraire.
Vérifions-le maintenant. En fait, tu sais quoi ?
Nous avons besoin d'un système, quelque chose de visuel pour voir
que nous nous déplaçons. Je pense qu'il est temps d'
ajouter des particules. Revenons à notre fenêtre d'affichage et sélectionnons
notre maillage statique Nous avons besoin de deux enfants
pour y introduire deux particules. Nous allons,
nous allons ajouter cascade parce que ces particules
proviennent de l'ancien système de cascade. Nous allons le dupliquer. Nous allons appeler le
premier sentier à gauche. Et je vais le faire
glisser depuis le côté gauche. En fait, nommons
l'autre, d'accord. Je vais sélectionner à nouveau
le sentier vers la gauche, en le déplaçant vers la droite
au bord de cette aile, peut-être un peu
à l'intérieur de l'aile. Lorsque la particule
est réduite à zéro, elle ne montre pas grand-chose Il n'est pas là où je le
veux, mais un peu à l'intérieur. Oui, je pense que c'est
parfait de tous les côtés
, comme je peux le voir maintenant, pour le bon sentier. Je vais juste copier
cet emplacement ici. Sélectionnez le bon
parcours et collez-le. Puisque nous
parlons de l'axe Y, je vais juste suivre pour le moment. Comme j'ai sélectionné
la trace ici, elle
a automatiquement ajouté et nommé le composant à la particule
que j'avais sélectionnée. C'est quelque chose que
Real fait si vous avez sélectionné la bonne
chose et que vous l'ajoutez,
il crée automatiquement la référence
même s'il s'agit d'un maillage. S'il s'agit d'un
son de particules ou quoi que ce soit d'autre. Comme nous avons
copié l'emplacement avant de
pouvoir le coller, je copie/colle autre chose. Je dois le refaire. J'aurais pu
appuyer rapidement sur Annuler plusieurs fois, le faire comme ça
et copier-coller l'emplacement. Mais parfois, les
crashs irréels lorsque vous effectuez plusieurs actions d'annulation peuvent être effectués avec un
peu de retenue Ne le pressez pas trop. Attendez que
les actions soient terminées. Je place la remorque
au bon endroit. Copiez, placez l'emplacement, supprimez le signe négatif indiquant que le sentier
est allé à l'autre endroit. heure actuelle, si nous appuyons sur « Oui », nous avons des sentiers, nous avons des sentiers. Nous voyons que nous bougeons. Nous pouvons voir que nous
bougeons. C'est génial. Mais A et D sont inversés, comme je m'en doutais.
Nous allons changer. Cette touche est pressée jusqu'à ce que la touche A soit enfoncée, puis appuyez sur
Démarrer. C'est correct. Génial. Nous avons du mouvement.
Nous faisons également du trail. Maintenant, vous voyez que le sentier
est un peu taché. Cela se produit à
cause du flou cinétique. Si nous allons dans Paramètres du projet,
dans Paramètres du projet, nous saisissons le flou cinétique
dans les paramètres par défaut, Motion Blair Engine Rendering,
et nous le supprimons Sauvegardes automatiques, nous n'
enregistrons rien, il suffit de le fermer, il enregistre
le réglage et d'appuyer sur Play. heure actuelle, nous pouvons
constater que nos sentiers ne
sont pas aussi brumeux
qu' Parfait, nous allons maintenant continuer à
ajouter les entrées de l'axe Z. Je vais le copier
à nouveau. Je vais le connecter ici. Je vais changer cet espace. Et cette seule commande que nous
sommes, nous allons le faire ici. Je contrôle, je pense qu'au lieu du
vecteur droit ou du vecteur
direct, nous allons obtenir un vecteur. Maintenant, le réel ne nous donne qu'
une seule direction dans son axe. Quand il nous donne le droit,
il ne nous donne pas la gauche. Quand il nous donne l'avant, il ne
nous donne pas le revers. Il est très facile de le créer. Si vous en avez un, vous le niez simplement et
vous obtenez le contraire Ici, nous allons utiliser un
vecteur de coupe pour l'espace des axes.
Et le contrôle gauche. Nous allons tester cela. Appuyez sur la touche Z, elle s'abaisse. Si j'appuie sur espace, il augmente. Il y a une belle
circulation ici. Je pense que c'est tout pour celui-ci. Je
te verrai bientôt. Au revoir
10. Animation et maîtrise des navires: Bonjour et bienvenue sur
Real Engine Five Blueprints, jeu de
tir spatial développé
étape par étape Dans la dernière leçon, nous avons
terminé notre mouvement. Dans celui-ci, commençons à rendre notre mouvement un
peu plus intéressant, un peu plus animé. Ce que nous allons faire dans
celui-ci, c'est
faire pivoter le navire un
peu de ce côté, un peu de ce
côté pendant que nous nous déplaçons. Faisons-le. La première chose à faire
est de stocker la rotation de nos navires. Quand je parle de rotation, la rotation
relative
à l'intérieur du plan C'est une autre
raison pour laquelle nous n'avons pas utilisé le vaisseau comme
collisionneur de base ou comme root Nous l'avions en tant que composant. Une meilleure pratique serait de l'
avoir également en tant qu'enfant acteur, peut-être qu'il ait sa propre collision
et qu'il
n' y ait pas cette boîte de
collision ici. Mais pour l'instant, cela va très bien
servir nos objectifs. Allons enregistrer la
rotation de notre navire. Nous voulons que cela se produise au début du jeu lorsque
nous commençons le jeu. Il stocke la variable. Nous allons obtenir
le maillage statique, et nous allons obtenir la rotation. Cela peut figurer dans le script de
construction, également au cas où un certain mouvement est
pressé ou
que quelque chose fait
pivoter le navire au moment où il faut pressé ou
que quelque chose fait
pivoter le navire au Mais ici c'est bon. heure actuelle, nous allons promouvoir cette rotation relative vers une variable et la
relier ici. Il a également nommé la variable
pour nous, mais disons,
renommons-la pour qu'
elle mette renommons-la pour qu' en majuscule la rotation relative du
corps d'origine Nommons notre mesure statique, la mesure statique du corps. Je vais donner un nom à ce corps. Nous en avons fini avec ça. Maintenant, comment allons-nous y
parvenir ? Encore une fois, nous allons
utiliser le tickivent. Nous allons
poser des questions similaires à celle-ci,
dans un style similaire, les mêmes
questions dans un mode différent. Mais avant de commencer à
poser des questions, mettons une séquence ici. La séquence est un nœud très spécial. Cela nous aide
également à garder le code un peu plus organisé. Nous faisons ceci,
nous faisons cela, nous faisons l'autre chose. Mais ne laissez pas le
nom vous embrouiller. Cela ne signifie pas qu'il va attendre
pour terminer cette action. Supposons que nous ayons un
tas d'actions dans le zéro, puis un
tas d'actions dans un. Il n'attendrait pas de terminer
les actions à zéro. Il en lancerait alors
un juste dans un ordre. Mais très probablement, cela se produit
instantanément, cela ne signifie pas que cela les
déclenchera dans Mais instantanément,
il n'attend pas la
fin
de la ligne d'exécution pour de la ligne d'exécution lancer
la seconde Le troisième, le quatrième, il se déclenche l'un
après l'autre. Pour cela, nous allons avoir besoin
de quelque chose, comme nous l'avons dit, nous ne devrions pas tout placer
dans le graphique des événements. Nous devrions créer une
fonction pour cela. Je vais créer une fonction. Appelez ça une rotation droite. Je ne sais pas si
c'est quand c'est normal. Oui, expliquons les choses avec les noms de nos fonctions. Ici, nous allons avoir
besoin de ces règles ici. Et les règles D, ce sont les boutons que
nous utilisons pour enregistrer maintenant. Nous n'allons
pas utiliser une sélection, nous allons
utiliser une branche ici. Il s'agit d'une déclaration if. Si c'est le cas, faites-le, si c' l'autre, je vais connecter la condition et connecter
la branche ici. Nous avons la même
situation si ce n'est pas le cas.
En gros, si nous ne bougeons pas, si nous appuyons sur les deux ou si aucune d'elles n'est pressée, nous ne bougeons pas, c'est vrai, cette condition ne renvoie pas
vrai, alors elle est fausse, et nous testons dans quelle
direction nous nous déplaçons. Maintenant, le nœud dont nous aurons besoin pour effectuer cette action
sera relatif au corps. Cela dépendra également de la rotation du
plan directeur, et non du monde Nous allons
définir une rotation relative parce que nous déplaçons le corps
par rapport au plan, non par rapport au monde par
lequel je vais me connecter ici Déplace ça un peu vers le haut. Maintenant, quand j'ai dit qu'
on
ne peut pas attribuer du temps à une fonction et dire qu'elle est
un peu plus complexe, nous allons le démontrer. Maintenant, il y a un R inter sans appel, il y a R interpréter deux
et R interpréter une constante, qui signifie interpolation. Qu'est-ce qu'une interpolation ? Une interpolation est une
fonction qui détermine les valeurs inconnues entre deux données
connues pour connaître des points Bref, permettez-moi de vous parler de
l'interpolation. Nous avons une rotation actuelle et une rotation cible basée
sur une vitesse et un temps. Nous obtenons le résultat entre
ces deux points. Par exemple, pour notre courant, nous allons utiliser get rotation,
notre rotation actuelle similaire à la rotation
relative actuelle de
ce corps, puisque nous n'appuyons sur rien pour le moment
dans ce scénario, la condition est que nous
n'appuyons sur rien. La cible doit être la rotation
initiale du corps. Comme vous pouvez le constater, nous
agissons actuellement en fonction
du temps. À l'intérieur d'une fonction, le temps delta est le taux de variation
entre les images. Cela ne veut peut-être pas dire grand-chose. Si nous le multiplions par
, par exemple,
une valeur de vitesse, cela rend notre mouvement
sans rapport avec le temps delta. Mais nous n'allons pas en parler en profondeur, nous allons simplement utiliser
les secondes delta mondiales, qui sont le taux de variation
entre chaque image dans le monde. Pour la vitesse d'
interpolation, plus
la vitesse est élevée, plus ce taux
de variation sera lent. Ce
résultat d'interpolation sera. Pour le moment, nous allons
mettre une vitesse d'un. Nous allons passer
au faux coup de poing. Cela restera
presque exactement le même avec une modification
de notre objectif. Nous allons le supprimer. En fait, je ne
vais pas le supprimer, je vais juste le déconnecter. Parce que ce que nous voulons faire, c'est donner à la rotation d'origine
une plage entre la gauche et la droite. Je vais combiner
deux rotateurs, un pour la gauche et
un pour la droite La combinaison, le B
, que j'ajoute
doit être sélectionnée. Je combine l'original
avec le décalage de la droite ou plus le décalage
de la gauche selon une règle. La règle sera que
si l'on appuie sur A
maintenant, si l'on appuie sur A il ne nous reste plus
qu'à donner le décalage. Pour calculer le décalage, nous allons utiliser la rotation
initiale du corps. Je vais le
copier-coller ici. Et je vais combiner, copier-coller à nouveau. Je vais combiner avec,
disons, 15 et -15 Puisque A est pressé,
en fait, cela devrait être
au-dessus, il devrait être au-dessus Et passez à A. Et cela devrait aller ici, la rotation initiale. Nous le compensons de
15 degrés de chaque côté. Si vous appuyez sur A, nous ajoutons à la rotation
relative, cette quantité basée sur le courant, nous obtenons une nouvelle rotation. Combinons et économisons. Commençons. Et rien ne se passe parce que je suppose que je
n'ai pas appelé cette fonction Je vais appeler cette
fonction ici, pile,
enregistrer, appuyer sur Play. Cela fonctionne. Le navire se déplace vers la gauche et s'incline vers la gauche Déplacement vers la droite et
inclinaison vers la droite. Lorsque nous quittons tout,
il se remet en place. À l'heure actuelle, notre mouvement est devenu
un peu plus vivant. Nous avons maintenant une animation. La seule chose que je
n'aime pas beaucoup, c'est que lorsque
je suis immobile, je peux voir ces lignes si
je
ne bouge pas du tout . Certains trouveront peut-être cela acceptable, mais je n'aime pas beaucoup le visuel non plus. Désactivons cela. Revenons au graphique. Calculons la vélocité de
l'acteur si celui-ci ne bouge pas,
amenons une branche ici
si elle ne bouge pas,
parce que c'est ce qui
nous donne la vélocité. S'il ne bouge pas, il est nul
si le tor ne bouge pas. Faisons en sorte que les deux sentiers et sétibilité les relient tous les deux Ce nœud peut prendre
plusieurs cibles. Connectons-le. En fait,
nous n'avons pas besoin d'une succursale ici. On peut juste harceler ici. Si c'est zéro, alors on
ne bouge pas, c'est le contraire. Il est alors invisible, il ne bouge pas. En fait, s'il bouge, c'est qu'
il est visible. Je vais le connecter ici, et c'est prêt. Je vais appuyer sur Démarrer. Je suis en rotation. Pas de lignes. Je déménage. J'ai des lignes. Génial. Je pense que c'est tout pour celui-ci. Je
te verrai bientôt. Au revoir.
11. Introduction au système d'endurance: Bonjour et bienvenue sur
Unreal Engine Five Blueprints, jeu de
tir spatial développé
étape par étape Dans la dernière vidéo, nous nous sommes
arrêtés avec la création quelques animations
pour notre vaisseau spatial Nous avons pivoté à gauche et à droite
lorsque nous mitraillons. Nous perdons la visibilité des sentiers lorsque
nous ne bougeons pas. Bien sûr, si vous le souhaitez, vous pouvez le
déconnecter et les sentiers
seront toujours visibles dans celui-ci. Créons d'autres mécanismes de
mouvement. Nous allons créer un système
de gestion de l'endurance et un
système de sprint. Comment le montrer
dans un espace infini ? Parce que si vous n'avez aucune référence de points et
que c'est juste un espace vide, vous pouvez vraiment savoir à
quelle vitesse vous allez. Laissez-moi dessiner à nouveau mon, notre
vaisseau spatial. Disons que je vais le refaire
comme un avion, parce que c'est la
seule chose que je puisse dessiner. Eh bien, le can est une énorme
surestimation de mes compétences. Disons que c'
est un espace et qu'il y a des propulseurs ici, ici et ici Ce que nous allons faire, c'est
utiliser une particule. Que lorsque nous sprintons, que faisons du
boost ou que nous empruntons le métro, ou quelle que soit l'utilisation de l'espace, les
particules paraissent plus grosses Nous allons également jouer avec le
champ de vision de la caméra. Par exemple, si notre caméra est ici et a ce champ de vision, nous
l'augmenterons un peu. On dirait que
nous sommes en train de sprinter. Comme si nous allions plus vite. Comment allons-nous
y parvenir ? Maintenant, nous apportons une nouvelle
couche, masquez-la. Nous utiliserons une nouvelle entrée
que nous appellerons sprint. En fait, nous ne l'
appellerons pas comme ça. Le décalage vers la gauche,
c'est la gauche****, c'est le décalage vers la gauche qui, lorsque
nous appuierons dessus, activera, eh bien, permettez-moi de
mieux taper, d'activer le sprint. Et nous allons désactiver le sprint lorsque ces
actions se produisent. Nous allons
utiliser une chronologie. Chronologie, Quelle
est la chronologie ? C'est une façon d'effectuer des manipulations
centrées sur le temps les acteurs
présents sur la scène En gros, ce que nous faisons est correct, la façon dont nous allons
l'utiliser est d'utiliser une courbe avec un axe du temps
et un axe des valeurs. La chronologie nous
donnera les données, la sortie de la valeur en
fonction de la courbe que
nous allons créer. En fait, ce ne sera pas une courbe. Je pense que cette fois, ce
sera juste une chose linéaire basée sur le point que notre
chronologie nous indiquera. Comme maintenant c'est sur 0,25, la
valeur est 0,2 par exemple. Il nous le donnera
en fonction du temps. Sur la base de cette valeur,
nous augmenterons la taille des flammes et le champ de
vision de la caméra. Maintenant, en plus de cela, nous aurons un système qui utilisera
une minuterie. Qu'est-ce qu'un chronomètre ? Une minuterie est l'un des meilleurs
systèmes qu'un homme propose pour déclencher des
périodes de froid spécifiques à la fois. Mais il n'est pas basé sur l'épaisseur, étant donné que l'épaisseur s'exécute plusieurs
fois par trame, nous pouvons spécifier qu'elle
fonctionne comme 0,1, c'est-à-dire qu' elle s'exécute dix fois par seconde Alors que nous avons, par
exemple, 60 images par seconde, il fonctionne 60
fois par seconde. Faire fonctionner quelque chose
tellement moins, c'est en fait créer
une performance énorme. Eh bien, pour ne pas avoir d'impact
contraire, car s'il
fonctionne sur le tic-tac, cela aura
un impact sur les performances. S'il est exécuté sur une minuterie, impact sur les
performances
est moindre. Nous aurons un Tim.
Permettez-moi de le supprimer. Dans le chronomètre, ce que nous allons
faire, c'est augmenter ou diminuer notre endurance C'est une question de savoir si notre acteur
sprinte ou non S'il imprime,
nous allons
augmenter endurance, notre récupération d'
endurance S'il s'agit d'une impression, nous
allons réduire l'endurance. Tout cela doit d'une manière ou
d'une autre être transmis au joueur. La façon dont nous allons
procéder est très simple. Nous allons simplement créer
une barre de progression pour II dans laquelle nous remplirons
la barre ou réduirons
le remplissage la barre ou réduirons de la barre en
fonction de notre valeur d'endurance Commençons maintenant. Tout d'abord, nous allons avoir
besoin d'une nouvelle interface utilisateur. Je vais donc dans notre dossier
I et je vais à juste titre créer un nouveau
widget de widget utilisateur. Et nous l'
appellerons G Gameplay, car c'est un
widget pour le gameplay. Encore une fois, il serait préférable d' avoir de nombreux widgets pour
chaque aspect. Mais pour nos besoins, nous hébergerons tout dans un seul widget lorsque
le joueur démarrera. Comme nous l'avons dit, nous hébergerons ce
widget dans le lecteur. Encore une fois, je vais
utiliser une boussole. Si nous avions de nombreux autres widgets, par
exemple, nous
les trouverions créés par les utilisateurs. Comme on peut trouver le menu principal. Je peux apporter
le menu principal ici. Il en serait de même
pour la barre d'endurance, la barre de santé, si nous
les avons sur différents widgets Mais pour l'instant, comme je l'ai dit, nous
allons tout héberger ici. Tout d'abord, nous
voulons une barre de progression. Je vais l'apporter
ici. Je vais l' agrandir un peu
et le placer ici. En fait, je vais l'ancrer
simplement en le regardant. Peut-être qu'ici c'
est un peu grand. Oui, je pense que c'
est bon pour le moment. Nous verrons quand nous
jouerons sur un fichier et que nous enregistrerons, je le ferme par erreur. Voyons cette partie pour voir si elle semble correcte. Hébergons cela sur notre
widget sur Begin Play, nous allons créer huit widgets. Comme nous l'avons fait en mode jeu, nous étions en train de créer le widget du menu
principal. Nous utilisions une manette intégrée, qui est notre manette. Maintenant, vous allez me demander pourquoi je ne me
mets pas ici en tant que joueur. Comme vous pouvez le constater, cela
ne le fait pas ressortir. Il doit s'agir d'une référence de
contrôleur. Il ne peut pas s'agir d'
un acteur, d'un pion ou d'un acteur. Je vais connecter une manette de
jeu pour le cours. Je vais introduire
le gameplay en G et le promouvoir en
tant que variable, que j' appellerai gameplay
variable G. Ensuite, je vais l'
ajouter à Viewport. Maintenant, si tout
est réussi, si je commence le jeu, nous pouvons voir votre
barre d'endurance là-bas Oui, super. Maintenant, pour ce qui est du gameplay du Widget, nous pouvons définir certaines couleurs, comment c'est Barbin Field et
quelques détails supplémentaires ici Passons au style, et nous
allons sélectionner une couleur d'
arrière-plan. En fait, nous allons juste
jouer avec la teinte ici. Nous n'allons
pas utiliser une image, nous allons la rendre
un peu jaune. Nous allons modifier l'alpha 2.3. Il est un peu
transparent comme on peut le voir ici. C'est déjà devenu transparent. La prochaine chose que nous allons faire est d'augmenter légèrement le pourcentage de champ, afin que nous puissions voir l'autre barre. Le bleu, c'est bien. Mais puisque
nous avons les jaunes, continuons avec les jaunes. Peut-être que cette couleur rend un
peu transparent. De plus, l'alpha
sera de 0,7, peut-être un point 0,6, c'est bien. Compilons. Vérifions que cette barre de
progression est une variable. Appelons cette
barre de progression B, Underscore stamina. Encore une fois, cela peut être n'importe quoi, nitro, ce que nous voulons Mais en plus, c'est toujours de l'
endurance chaque fois que nous gagnons, cela n'a pas vraiment d'importance de toute façon Maintenant sur le graphique, nous allons passer
aux fonctions,
créer une nouvelle fonction et appeler cette mise à jour la barre d'endurance En fait, barre d'endurance. Pourcentage d'endurance. Je vais expliquer une
minute par un pour cent. Maintenant, si nous obtenons la barre d'
endurance ici, nous avons besoin d'un moyen d'alimentation. La façon dont le nœud que nous utilisons pour
cela s'appelle set percent Il faut une valeur en
pourcentage ici. Ce pourcentage n'est pas égal à 100, c'est un flottant de 0 à 1, ce
qui signifie que 0,0 est 0,1 égal à 100 Si nous avions 0,5, ce serait 50 %. Maintenant, nous allons
connecter ce nœud ici en pourcentage à la
fonction en pourcentage. Cela signifie que chaque fois que
nous appelons cette fonction, nous devons donner un pourcentage. Et il transmet cette valeur à
notre nœud ici et cela fonctionne. Vous pouvez maintenant constater que cela s'
appelle une entrée dans une fonction. Si nous cliquons sur les
fonctions et passons aux entrées, nous pouvons voir qu'elles
ont été créées pour nous, comme nous l'avions fait
dans la fonction pure. Les sorties, comme si
je clique sur les sorties, créeront une sortie, un nœud de retour, qui nous donnera une sortie et il a
cette valeur ici. Nous pouvons le voir également ici. Sorties, nouveau paramètre. Nous ne l'utiliserons pas, je
vais le supprimer, le compiler et le sauvegarder maintenant. Je pense que c'est pour
celui-ci et que nous
allons continuer le
système pour le suivant. Au revoir.
12. Mettre en œuvre la mécanique du sprint: Bonjour et bienvenue sur
Real Engine Five Blueprints, jeu de
tir spatial développé
étape par étape Dans le dernier, nous avons créé la représentation visuelle
de notre barre d'endurance, de notre barre Nero ou autre. Nous avons également créé une
fonction que nous
allons appeler pour mettre à
jour le pourcentage. Maintenant, dans celui-ci, nous
allons continuer à créer les entrées et à définir certains
des mécanismes du sprint. Je vais
cliquer avec le bouton droit de la souris et laisser passer. C'est le bouton sur lequel nous allons
appuyer pour le sprint. Maintenant, tout d'abord,
nous avons besoin d'une variable pour pouvoir faire la différence
entre nous qui sprintons ou non Je vais créer un lingot
appelé sprint. Encore une fois, vous pouvez ajouter
des variables à partir d'ici, ajouter des variables, puis vous pouvez modifier leur type
ici ou ici. Maintenant, nous allons
mettre cela en premier ici, mais au fur et à mesure, nous allons changer la façon dont l'ordre
logique se produit. Tout d'abord, nous
ne sprintons pas lorsque nous
appuyons sur le bouton. Lorsque nous publions
le schéma, nous ne sprintons pas Mais ce n'
est pas parce que nous avons
déclaré quelque chose qui se passe avec un nom que
quelque chose se passe réellement. Vous vous souvenez lorsque nous utilisons mouvement à virgule
flottante pour déterminer la vitesse à laquelle
nous nous déplaçons dans le monde ? Nous avons dit qu'il y avait ici un tas d' autres informations
que nous pouvions modifier. L'un d'eux est la vitesse maximale et l'
autre est l'accélération
et la décélération Maintenant que notre vitesse maximale
est inférieure aux deux, cela signifie que nous
passons instantanément à la vitesse. Il n'y a ni accélération
ni décélération. Changer de boost, c'est autre chose. Quoi qu'il en soit, il y a beaucoup de choses que nous allons faire ici , c'est
que lorsque nous sprintons, je vais obtenir ce mouvement
flottant Avec le glissement et le contrôle, je vais régler la vitesse Disons que c'était 1 200. Plus du double de 2500. Maintenant, lorsque nous appuyons sur Shift, nous disons que c'est en train d'imprimer et que nous réglons
la vitesse maximale. Voyons ce que nous avons fait.
Pouvons-nous faire la différence ? Je me déplace normalement. Je sprinte peut-être un
peu à cause de l'effet, mais nous ne pouvons pas faire de différence Puisque nous l'avons créé, allons-y et
ajoutons quelques sentiers. Nous allons utiliser
un système
de particules appelé Thruster Son système en cascade est issu de l'ancien
système, l'ancien. Cela fonctionnera bien pour nous
ici dans la fenêtre d'affichage. Nous allons
sélectionner le corps parce que nous voulons qu'ils
soient attachés au corps, comme lorsque le corps tourne, nous voulons qu'ils
tournent avec le corps Nous n'allons pas les considérer
comme des enfants de la boîte, nous allons les considérer
comme des enfants du corps. Je vais appuyer sur Ajouter un composant du système de
particules. Maintenant, comme j'avais sélectionné
le propulseur ici, il a automatiquement ajouté le
composant en tant que modèle Si ce n'est pas le cas pour
vous, vous pouvez toujours, simplement en sélectionnant le propulseur, le composant
ici, la particule ici Je vais le faire pivoter à 90 degrés et je
vais le ramener. C'est peut-être là, en fait,
c'est un peu, c'est un peu gros
pour démarrer une flamme. Je vais donc sélectionner le
verrou ici sur la balance, qu'il s'adapte uniformément
et le faire de 0,25 Oui, pour un mouvement au ralenti
et un mouvement simple Je pense que tout ira bien. Peut-être que tu veux l'agrandir, mais je vais en rester là. Je vais le
dupliquer. Copiez-collez. Et mettez-en un ici. Je vais le coller à nouveau
et en mettre un ici. Je vais dupliquer
celui-ci et mettre le moins ici. Ils sont peut-être un
peu petits, alors je vais tous les
sélectionner. Mettez 0,5 Oui, ça a l'air
un peu mieux. Vous pouvez peut-être le faire glisser ici. Oui, tu peux jouer
autant que tu veux pour
qu'il ressemble à ce que tu veux. Je vais arrêter de
le faire dans une seconde. Oui, je pense que c'est mieux. Voyons voir. Oui, ça
a déjà l'air mieux. Maintenant, commençons par manipuler les flammes pour placer d' abord le sprint
dans les entrées Maintenant, pour cela, nous allons
utiliser une chronologie. Comme nous l'avons dit, je vais
écrire une chronologie en cliquant et en disant. Cela nous permet déjà
de renommer la chronologie. Nous allons dire L Sprint. Et je vais créer
deux événements personnalisés. Des événements personnalisés. Je vais nommer l'
un Start Sprint et l'autre Stop Split. Voyons où nous
connectons ces éléments. Les chronologies font quelque chose au fil du temps et elles nous
donnent une valeur. Nous n'avons pas encore la valeur, mais parlons
des lignes d'exécution. Nous devons jouer et
jouer depuis le début. Cela signifie qu'il sera joué dès le début de la
chronologie. Jouez depuis le début. jeu se poursuivra en
fonction de l'heure actuelle
de la chronologie. Comme il jouait
à 50 % et qu'il s'inversait, nous rejouons
soudainement, mais il est à 3,30 %
30 % . Cela continuera à
partir de 30 % Ce que nous voulons connecter, c'est jouer chaque fois que nous appuyons sur
Shift ou que nous le relâchons. Nous ne jouons pas nécessairement depuis
le début, mais nous jouons à partir du point de départ
actuel. La même chose que nous
allons faire avec arrêt
inversé, c'est
bien sûr arrêter où que vous soyez. La défense inversée date de
la fin du temps. Maintenant, il y a une nouvelle heure
et une nouvelle heure définies, une nouvelle heure ici. En fait, c'est
comme si nous avions un temps 0 à 50 et que nous fixions un nouveau temps de
30 et que nous commencions à
jouer, à jouer à partir de ce moment-là,
il
commencera à partir de 30 et à
continuer à jouer à partir de là Ou si nous faisons marche arrière,
ce sera une inversion par rapport à cette chronologie. Vous pouvez également les trouver dans
les composants des variables. Nous pouvons en fait définir
une nouvelle heure à partir d'ici. Il existe également d'autres options telles que taux
fixe, le taux de jeu défini. Si nous voulions prolonger, comme si nous avions un chronomètre de zéro à un et que nous voulions
durer 3 secondes, nous serions un tiers. Mais il s'agit d'utilisations plus
étendues de la chronologie. Nous ne
les ferons pas pour le moment. Nous avons un effet de sprint de départ
et un effet de sprint d'arrêt. Nous jouons à partir du moment
présent et nous faisons marche arrière par rapport au
moment où nous les appelons. Pendant tout ce temps. Je parle de fixer les heures, les
valeurs et tout le reste. Mais où mettons-nous tout cela ? Où avons-nous placé tout cela ? Parce qu'il
n'y a rien ici qui puisse être configuré pour cela. Eh bien, en fait, des délais. Vous pouvez double-cliquer dessus. Ils ouvrent leur propre petit
panneau. Ici, ils ont un tas d'options, comme la durée
totale de la chronologie Si la chronologie utilise
la dernière image clé, nous verrons dans un
instant ce que c'est, s'ils jouent
eux-mêmes automatiquement ou s'
ils sont appelés à la suite d'événements comme nous
les appelons ici. S'il s'agit d'une boucle ou d'autres choses, il y a ce petit
bouton ici qui s'appelle camion, camion. En tant que camion, nous
fixons l'heure et les
valeurs que nous voulons. Il existe différents
types de camions. Nous allons
utiliser un camion-flotteur. Lorsque nous cliquons dessus, cela nous
donne la possibilité
de le renommer Nous allons appeler cela un sprint. Maintenant, nous avons notre
valeur temporelle sur la valeur x, notre valeur flottante sur le y. Si je contrôle, cliquez ici. Si je clique ici, je crée des points. Ces points peuvent être manipulés et si vous voyez que lorsque je les déplace, valeur
temporelle change et la valeur change
également la valeur flottante, mettons un à zéro de la valeur 01 pour former cinq valeurs un. Vous voyez, c'est passé au-dessus de notre
visibilité, c'est ici. Il y a ces deux boutons
qui sont magnifiques. Il indique qu'il zoome pour s'adapter à l'horizontale
et zoomer pour s'adapter à la verticale. Au moment de presser, nous
pouvons voir notre pente. Je vais sélectionner les deux
valeurs en maintenant la touche Maj enfoncée. Dans le second cas, vous voyez que
ces valeurs sont sélectionnées. Si je clique dessus avec le bouton droit de la souris, cela nous donne une interpolation clé Pour le moment, c'est en linéaire. Si je sélectionne Auto, cela crée
une belle courbe ici. Nous pouvons toujours modifier la
courbe en fonction de nos besoins. Ce que je vais annuler
maintenant et utiliser la courbe automatique , c'est terminé. Quand j'ai dit d'utiliser la dernière image clé. Notre dernière image clé est à 0,5. Si je la laisse telle quelle, la
durée est de 5 secondes, je vais maintenir la touche Ctrl enfoncée
et ma souris sera abaissée. Voyons si nous allons atteindre les
cinq secondes ici. La chronologie se termine ici. Cela signifie que cela fonctionnera 0 à 5. Si je sélectionne la dernière image clé, elle passera à 0,5. C'
est notre dernière image clé Je pourrais également le changer ici 0.5 Vous verrez qu'il ajusté automatiquement cette partie qui s'
estompe Je préfère utiliser les dernières images clés car je peux changer les choses Je n'ai
donc pas à changer
la longueur à chaque fois, mais c'est une préférence. Maintenant, vous voyez quand je suis
revenu au graphique des événements, notre chronologie contient
maintenant
cet alpha du sprint. Dans ce lieu, cette valeur change en fonction de
la durée de diffusion de la chronologie. Parlons de ce que nous avons. Du côté
de l'exportation de la chronologie, nous avons un événement de mise à jour. Cela fonctionne tant que la
chronologie est en cours d'exécution. Cette mise à jour,
tout ce que nous voulons faire est terminé lorsque la
chronologie sera terminée. Nous parlerons de
la direction dans une seconde. alpha du sprint est la valeur que nous avons définie
dans la chronologie. Zoomons bien, 0-1 dans ce laps de temps Comme vous pouvez le voir, lorsque je
déplace la souris ici, cela me donne une valeur
basée sur l'heure. Cette valeur est
exportée ici depuis Sprint Alpha. Maintenant, la direction à prendre est de savoir si nous allons de l'avant
ou de l'arrière. Et c'est du type
énumération qui est un type spécial,
disons, de
variable dans le monde réel, non dans la programmation
en général Cela nous donne une liste
prédéterminée. Mettons le signe égal ici et voyons les options en
avant et en arrière. Cela signifie que s'il s'agit d'
un jeu dans le sens
ou dans le sens inverse,
nous pouvons savoir, lors de la mise à jour
ou en cours un jeu dans le sens
ou dans le sens inverse,
nous pouvons savoir, de mise à jour, dans
quelle direction la chronologie
joue ou était jouée Je vais le supprimer
car nous n'
allons pas l'utiliser. Ce que nous allons
utiliser, c'est que je vais
amener toutes les
particules du propulseur ici Cluster une base de propulseurs,
Custer zéro propulseur trois Comme vous le voyez quand je les ai créés. Le vrai nom pour moi, ce n'est pas le même nom
que nous pouvons toujours nommer. Propulseur gauche,
propulseur droit, propulseur central. Mais c'est bon
pour nous en ce moment. Ce que je vais faire
avec eux, c'est
définir l'échelle du monde à trois D. Je vais connecter tous
ces nœuds ici. Encore une fois, l'échelle
est ce que nous avons fait la
variable d'échelle Viewport ici Peut-être que ça va le
débloquer et le mettre sur 0,25. Oui, je pense que c'est mieux Permettez-moi de sélectionner chacun d'entre eux. 0,25 peut-être que ce n'est pas le cas. Oui, c'est bon. C'est bon Je vais connecter la mise à
jour pour définir l'échelle du monde. Maintenant, comment vais-je
changer en fonction l'alpha, de la valeur ici ? Disons que nous avons la valeur
par défaut de 0,25 0,5 et 0,5. Comment puis-je faire cela ? Puisque nous avons un changement d'échelle, nous voulons nous baser sur
un lecteur pour le faire, il existe un
nœud spécial pour cela. Ce nœud est appelé nœud. Nous avons les vecteurs. Il y a aussi, en général, de nombreux laboratoires,
c'est-à-dire de A à B. En gros, c'est
ce qui permet d'interpoler
entre a et B en
fonction d'un alpha Nous allons connecter
notre alpha ici, puisque nous connaissons nos valeurs, nous allons faire
0,25 0,5 0,5 B nous sommes, disons 0,5,
restons les mêmes Et 1,5, nous avons un peu recours à ces
valeurs. C'est ainsi que nous les découvrons. Lorsque vous avez quelque chose, vous devez toujours jouer un peu avec
les valeurs. Découvrez celui qui convient le mieux
à votre coque. N'hésitez pas à remplacer n'importe
laquelle des valeurs par
les valeurs de votre choix. En ce moment même. Nous avons dit que nous allions également
faire quelque chose
avec la caméra. Nous allons changer
le champ de vision. Je vais apporter l'appareil photo, je vais régler le champ de U. Je vais le reconnecter
ici Nous devons définir
ici une valeur qui sera une valeur d'alerte flottante. Je vais créer notre nœud de
lecture ici, connecter à l'alpha, créer un autre nœud rouge ici. Notre champ de vision par défaut, nous pouvons le voir sur les détails
de la caméra, est de 90,
ce qui, je pense, est un champ de vision
par défaut normal. Je vais mettre de l'alpha 90 pour B. Je vais en mettre 110 gratuitement. Bien sûr, pour modifier n'importe quelle valeur. heure actuelle, notre caméra passe à un angle de 90 degrés
à un angle de 110 degrés. Nous allons tester cela. En fait, nous devons relier ces deux épreuves au sprint gauche. Nous allons commencer à publier des effets
d'impression. Nous allons passer à l'effet sprint. Je vais
compiler. Jouons. Je bouge, je
bouge, je sprinte. Oui, il semblerait que la caméra
recule, les flammes grossissent Je pense que c'est tout pour celui-ci, je vais vous l'envoyer ensuite. Au revoir.
13. Système Sprint et gestion de l'endurance: Bonjour et bienvenue
sur Andrea Lynching, cinq plans de développement de
jeux de tir spatial
étape par étape Lors de la dernière, nous avons commencé
la mécanique du sprint. Nous avons en fait réalisé
les visuels du sprint. J'ai remarqué que j'avais oublié un détail
très important. Nous augmentons la vitesse sans jamais la diminuer. Je vais juste le copier-coller
ici, le connecter
et revenir à 1 200
qui était notre valeur par défaut. Oui, en ce moment, nous sommes en train de sprinter et nous pouvons arrêter de sprinter Les visuels, nous nous arrêtons, mais la vitesse ne changeait pas Passons maintenant à
notre système d'endurance, par
exemple, combien de temps pouvons-nous
sprinter ? Parce qu'en ce moment,
nous sommes en train de sprinter, mais c'est pour une durée indéterminée Pour ce faire, nous allons utiliser
le chronomètre que nous
expliquons depuis le début. Jouez à l'événement à la fin ici. En fait, organisons un événement personnalisé que nous appellerons
les heures de début. Nous aurons des heures de début pour cet
événement, car nous aurons probablement deux ou trois
fois de plus pour le tir.
Pour la régénération de la santé,
nous aurons plus de temps à mettre d' affilée dès le
début de l'événement de jeu Je vais appeler Start Timers. Pour être honnête, je vais
mettre une séquence avant le widget de création pour
faire les choses d'affilée. Et plus clairement, je vais
mettre en place le widget et
je vais le recommander, widget ici sur le 10 Ensuite, je vais
appeler Start. Maintenant, amenons G
ici, tout ira bien. Démarrez les minuteries. Que faisons-nous ? Nous allons appeler un chronomètre
réglé par événement. Quelques autres fonctions avec minuterie. Si vous avez vu dans le très
bref dialogue là-bas, il
y avait d'autres fonctions comme régler le chronomètre par nom de fonction. Réglez la minuterie pour Nextek. Chacun d'eux possède son propre événement de nom de fonction
d'utilisabilité. Ils présentent quelques
petites différences, mais aussi pour des raisons de débogage, il serait plus facile de
déboguer quelque chose pour lequel
nous avons un événement et nous
pouvons voir ce qui est Ensuite, avec une minuterie
qui exécute une fonction, la minuterie par fonction
fonctionnerait comme ici. Nous devons créer un
événement personnalisé et le nommer. Sprint. Sprint. Sprint. En fait, cela n'a rien à voir avec
le printemps, mais avec l'endurance Région de régénération de l'endurance. Si nous avions une fonction
appelée region, nous utiliserions le nom de fonction Tim
défini et le
nom de la fonction
stamina Ce temporisateur fonctionne, il exécute
la fonction d'estampage régional. À chaque fois que nous l'avons dit, il serait difficile de le déboguer car à chaque fois qu'il s'exécutait, il entrait ici pour
vérifier les choses Peut-être que nous avons plus de
fonctions que cela ne serait intégré à
d'autres fonctions. Je pense qu'il est plus facile de
commencer par supprimer des éléments, régler le chronomètre par événement, car
c'est plus facile à suivre. Maintenant. Maintenant, outre la première épingle que nous venons
d'analyser un peu. Nom de l'événement ou de la fonction. En fait, permettez-moi de vous présenter
à nouveau le minuteur de fonction. Parlons un
peu du reste. Maintenant, une différence fondamentale
que nous pouvons constater instantanément en plus de ces deux facteurs, disons le nom de l'événement
ou de la fonction, est que le
nom de la fonction comporte un objet. Cela signifie que je peux exécuter une fonction d'un autre plan dont
j'ai une référence, un
widget, un mode de jeu ou autre. Je peux avoir une référence à partir d'un objet ainsi
qu'une référence à partir de toutes ses fonctions sur une
minuterie, sur ce plan C'est l'une des différences
entre les deux. ce qui concerne les points communs, nous avons le temps de les aborder dans les deux cas,
et le fait de boucler, c'est à dire à quelle fréquence et
combien de temps il faut attendre avant d'
exécuter le délégué, comme on dit en secondes en va de même pour l'
autre faction, en boucle, si nous voulons que ce soit une boucle
infinie, faites-le tout le temps et
pareil pour l'autre Il existe d'autres statistiques
un peu plus avancées dont nous ne
leur parlerons pas pour le moment,
nous ne les utiliserons pas. Je vais le supprimer ici. Nous allons avoir un
temps d'une seconde et cela
va tourner en boucle pour notre système, nous aurons besoin de deux variables Je vais en créer un et je vais en
créer un autre. Je pense qu'il est temps de le
classer un
peu avant de nommer et de sélectionner les types
de ces variables Mettons la
précédente dans certaines catégories, sur ADS et espace, nous allons créer ici
une catégorie appelée, disons, entrées. Je vais glisser-déposer
tout cela dans les entrées. En plus de diminuer le gain, je peux
toujours le modifier à partir d'ici. Il comporte d'autres catégories,
la catégorie des défauts, essentiellement la nouvelle
catégorie que nous venons de créer. Maintenant, ces trois-là
les placent peut-être dans une catégorie de mouvement. Je vais le mettre également ici, en fait, je vais
mettre son impression ici. Et de l'endurance pour deux
nouvelles variables. Ces deux nouvelles variables
seraient de type entier, en fait elles
seront de type, l'une d'elles serait endurance et l'
autre l'endurance x. Je vais apporter ces variables
ici et je vais vous
donner un aperçu de
l'endurance actuelle Lorsque le chronomètre
fonctionne toutes les 1 seconde
et qu'il tourne en boucle et qu'il vérifie
constamment, cela signifie qu'il exécute
constamment cette
fonction toutes les 1 seconde Nous voulons vérifier si
nous sommes en train de sprinter ou non. Pour sélectionner la valeur que
nous allons définir. Ici, je vais sélectionner Node. Comme nous l'avons fait précédemment,
encore une fois, deux options. Sélectionnez Float et sélectionnez simplement
Select a le joker. Et Select Float ne nous
donne qu'un lingot. N'oubliez pas que les
deux sont opposés sur les jokers. Eh bien, si vous sélectionnez un
lingot en joker et fas, c'est vers le haut
et vers le bas Quand je sélectionnerai, je
veux me demander si je suis vraiment en train de
sprinter .
Je vais le faire à partir de là Commencez le sprint
et connectez-vous ici. Si je fais du sprint, choisissez A. Si je ne sprinte pas, choisissez B. Je n'en aurai pas
besoin pour le moment Je vais le mettre ici, endurance
actuelle plus et endurance actuelle négative Lorsque nous ne sprintons pas, nous ajoutons de l'endurance En fait, lorsque nous sprintons, nous réduisons notre endurance Maintenant, je vais
mettre des valeurs statiques de un et je vais les
promouvoir en
variable, la valeur plus une, je vais l'appeler
région d'endurance,
promouvoir la région variable en étoile parce que le taux
est toutes les 1 seconde La valeur que nous ajoutons par seconde
sera placée ici. Pour le moment, c'en est un.
Ils ne font qu'un, mais si vous souhaitez les modifier, cette valeur peut être différente. Et lorsque nous en
faisons une variable, nous pouvons l'appeler valeur d'endurance Nous plaçons ceci en dessous
et ceci en dessous. Chacun d'entre eux peut être défini
séparément pour une valeur par défaut. Je vais le compiler maintenant. Nous pouvons voir qu'
ils sont tous les deux sur la valeur 1. Nous avons besoin d'une endurance actuelle. Ce que je vais
faire, c'est régler
mon endurance maximale sur dix Pour commencer, jouez ici sur la rotation relative du corps
d'origine et rotation relative du corps
d'origine. Je vais régler l'
endurance actuelle sur l'endurance maximale. En fait, définir get, quelle que soit
notre endurance maximale par défaut, devient notre endurance
actuelle Une autre astuce astucieuse :
lorsque vous commencez à avoir des valeurs que vous voulez définir par défaut
et d'autres choses de ce genre, vous pouvez toujours Dr vous pouvez toujours Dr.
Peu importe le nombre de
nœuds ou les nœuds qui le font réellement délai
ne serait pas utilisé dans cette situation et certains
autres nœuds de toute façon, vous pouvez cliquer dessus
et réduire pour fonctionner Tout cela se trouve dans
cette fonction. Je vais appeler cette
fonction Defaults. Maintenant, dans cette fonction, nous avons le réglage de la rotation
relative du corps d'origine et de l'endurance actuelle Bien, revenons
à notre système. Nous réduisons l'endurance ou
nous augmentons de l'endurance en
fonction du fait que nous sprintons toutes les
secondes pendant lesquelles nous sommes Mais cela va continuer à ajouter endurance même si nous dépassons
notre valeur maximale. Pour y parvenir, arrêtez-le à sa valeur maximale. Nous pourrions le faire si c'est égal à la valeur maximale,
puis
nous pouvons bifurquer et dire ne plus le faire
ou d'arrêter le temps. Mais nous allons utiliser
un autre nœud mathématique
appelé Plump Plot Maintenant, ce que fait la pince, elle obtient une valeur et
elle a un minimax Et dit qu'il s'agit de la valeur minimale que cette
valeur peut renvoyer, et que c'est la valeur maximale. Même si cela donne,
disons que nous en avons un maximum et que
cela en donne cinq, cela en renverra un. Ou s'il était inférieur à cinq, il renverrait zéro. Je vais utiliser ce nœud
et le connecter ici, faire de la place pour
notre valeur maximale. Nous allons
associer l'endurance. Quel que soit le maximum que nous fixons, celui-ci l'agglutinera
pour ne pas le dépasser, et si nous réduisons l'endurance, il ne descendra pas en dessous de zéro Je pense que celui-ci contient beaucoup d'
informations. Je pense que c'est un
bon point de rupture. Je te verrai
le prochain. Au revoir.
14. Finaliser le système Sprint: Bonjour et bienvenue sur
Unreal Engine Five Blueprints, jeu de
tir spatial développé
étape par étape Dans le dernier, nous avons
créé les bases de notre mécanisme de gestion de l'
endurance Nous avons créé un chronomètre sur
lequel il fonctionne en boucle. Il s'exécute toutes les 1 seconde. À chaque itération, cela réduit ou augmente
l'endurance actuelle, notre valeur à
une endurance
maximale et à zéro Cela signifie qu'il ne peut pas descendre en dessous zéro ou au-dessus de la valeur maximale. Dans celui-ci, nous allons mettre
à jour le widget et terminer le mécanisme de régénération de l'
endurance Apportons la référence de notre
widget et la fonction que nous avons créée
à l'intérieur du widget. Désolé, ce n'est pas le bon widget. Durée de mise à jour en pourcentage. Nous allons l'appeler
du nom du joueur. Comme nous avons la
référence du widget que nous avons stockée au début de la partie, lorsque le widget a été créé
à partir de cette référence, je vais appeler la
fonction update stamina Pourcentage Pour pourcentage, je vais diviser l'endurance actuelle
par l'endurance maximale. Maintenant, c'est un
petit spaghetti. Peut-être que si on fait plus de place, on pourra en parler ici, ça pourrait paraître un
peu mieux. Quoi qu'il en soit, en divisant ces deux, nous obtenons une valeur de 0 à 1 indiquant qu'
il s'agit de notre pourcentage Maintenant, la prochaine chose à faire, c'est de lancer une séquence
et de poser deux questions. La première question serait si l'endurance est nulle, notre endurance actuelle Si c'est le cas, nous voulons
arrêter de sprinter. Le code que nous avons ici, nous devons en fait l'utiliser deux fois
car nous avons créé la fonction par défaut définie
ici, qui se chevauche. Ensuite, nous cliquons avec le bouton droit de
la souris et créons une fonction. C'est la même chose que nous allons
faire avec celui-ci. Nous pouvons appeler cette fonction. Nous avons écrit le code
une fois et nous l'avons appelé deux fois. Je vais cliquer sur
Réduire la fonction. Je vais l'appeler
Stop Sprinting. Je vais copier cette fonction, et si notre
zéro d'endurance est vrai, nous devrions arrêter Maintenant, la question suivante que je
vais poser est notre endurance actuelle est-elle
égale à l'endurance maximale ? La raison pour laquelle je pose la
question est que si c'est le cas, alors tout ce chronomètre ne
devrait pas fonctionner car le
démarrage et l' arrêt d'un chronomètre
consomment des ressources. Dans le code, nous
avons cette valeur de retour ici qui renvoie
une structure de gestion de temporisation. Je vais en
faire une arrivée et l' appeler Stamina Hand Avec cette poignée ici,
nous pouvons le creuser et le déposer. Ici, nous pouvons appeler pause timer, ou nous pouvons appeler post timer. Pour le moment, nous devons
mettre le chronomètre en pause. Mais comme nous
interrompons le chronomètre ici, lorsque nous appuyons sur
Shift pour démarrer le sprint, nous démarrons le Je vais également apporter cette
variable ici et dire timer par handle. Pour gérer un temporisateur, nous utilisons cette
variable de gestion du temporisateur, si cela a du sens. À l'heure actuelle, nous devrions être en
mesure de voir une certaine visualisation. Allons jouer. Il a fallu une coche pour
nous montrer que notre corps était plein. Je fais preuve d'endurance.
C'est dévorant, je n'utilise pas d'endurance Il ne consomme pas, il
régénère le fonctionnement du système. Nous devons juste
corriger ce problème
au début, à savoir mettre
à jour le pourcentage d'endurance Je vais copier ceci et Max Stamina et revenir
à nos paramètres par défaut Je vais le placer ici, je vais utiliser cette
endurance actuelle. Compilez et enregistrez. Oui, bien sûr, cela n'a pas fonctionné car nous sommes en train
de créer le widget. Plus tard, nous allons le couper
à partir d'ici, où nous allons créer le
widget. Commencer. Jouez. Je vais le mettre à jour après avoir apporté l'endurance
actuelle ici Connectez cette pièce. Il est mis à jour. Je fais preuve d'endurance. J'arrête de faire preuve d'endurance. Toujours en mouvement. Rien ne le
consume. Utiliser l'endurance Ouaip, ça marche. Cela complète notre
système de sprint, peu importe. Je vous verrai lors de
la prochaine, où nous commencerons les mécanismes de
prise de vue. Au revoir
15. Les bases du système de ciblage et de prise de vue: Bonjour et bienvenue sur
Real Engine Five Blupints, un jeu de
tir spatial développé
étape par étape Dans la dernière vidéo, nous avons
terminé notre système d'endurance,
notre système d'endurance au sprint Commentons un petit peu. Je vais mettre un
commentaire ici pour l'appeler. Mettons cela
ici, car il y a des entrées, sont la souris et la souris Appelons cela les
effets de sprint en ligne fine. Mettons ceci en dessous de
notre minuterie de printemps. Maintenant, voici
notre événement Tick. Nous allons donc appeler
le premier mouvement, le second est visuel. Bon, maintenant tout est
un peu plus commenté. Nous allons garder cela pour
commenter à la fin, car
nous ajouterons d'autres éléments. Parlons maintenant un peu du système
de prise de vue. Je ne vais pas dessiner à nouveau
un vaisseau spatial. Ce sera notre
vaisseau spatial cette fois. Disons que nous avons le pistolet quelque part ici et que nous
voulons tirer avec le pistolet. Nous avons notre appareil photo là-haut. Pourquoi je dis que nous avons l'appareil photo ? Parce que la caméra,
c'est notre fenêtre d'affichage. C'est le champ de vision tel que nous le décrivons dans
la mécanique du sprint. C'est ce que voit la caméra. Nous pouvons toujours trouver
le centre de ce que la caméra découvre. À partir de ce centre, nous
formerons une ligne vers le
centre de l'écran. C'est ce qu'on appelle une ligne de traçage. Nous reviendrons sur
des points plus techniques plus tard. Nous allons tracer une ligne à partir du centre de l'écran jusqu'à une distance de notre champ de tir
maximal. Avec cette ligne, nous
déterminerons si nous touchons quelque chose quelque part. Avons-nous un objectif ?
Pourquoi allons-nous le faire ? Parce que lorsque nous
tirons avec notre arme, si nous tirons
debout en ligne droite, le centre de l'écran et la ligne droite de notre
arme ne seront pas les mêmes, ne
seront pas dans la même position. Nous pouvons dire à ce pistolet de tirer
vers la cible. C'est la fin de cette ligne. Mais s'il trouve un
ennemi entre les deux, par exemple si ce tir ici et
celui-ci prend
un
angle de tir complètement différent,
nous devrons recalculer, en
gros, si cette
ligne a trouvé quelque ce tir ici et
celui-ci prend un
angle de tir complètement différent,
nous devrons recalculer, en
gros, si cette
ligne a trouvé Non, alors tire ici. Au final, cette
ligne a trouvé quelque chose ? Oui, c'est le cas, il est là. Notre arme recalculera l'
angle de tir pour nous, il semblerait qu'elle
tire toujours sur la Commençons par créer cette ligne à partir de la
caméra de notre projet. Nous allons assister
à notre événement Tick. Nous allons ajouter la nouvelle
branche dans notre séquence. Pour cela, nous allons avoir
besoin d'une variable supplémentaire. Nous allons appeler
cela la direction R. Il sera
du type vector. Je vais apporter un
setter à cette variable. Je vais
les relier à celui-ci, peut-être un peu plus bas. Maintenant, prenons un appareil photo, car il s'agit de l'appareil photo que nous voulons, où il vise le point
central de l'écran. À partir de la caméra, je vais
obtenir le vecteur avant. Quel que soit le point de
vue de la caméra. Nous obtenons le vecteur
direct de. Je vais le multiplier
par la portée de mon arme. Il s'agit maintenant d'une multiplication
vecteur par vecteur, mais nous pouvons la remplacer
par un autre type. Je vais le changer
en entier, je fais de ce 50 000.
Promutons-le en variable et
appelons cette plage de primaire. Maintenant, à partir de cette caméra, je
vais obtenir la position du monde. Je vais ajouter
ces deux valeurs. Je vais définir cette direction
comme objectif. Ce que nous faisons ici, laissez-moi vous l'expliquer un peu. Nous avons notre appareil photo.
C'est notre appareil photo. Et il a une orientation vers l'avant. Il a une direction vers l'avant,
cette direction. Disons que c'est 0,1 0,0
parce que nous avons x, y et z, nous avons plus un sur y. Alors si c'est
le vecteur direct, je le multiplie par plage 0,1 0,0 Si je le multiplie par ceci, il deviendra celui-ci ici Alors il s'agit d'une gamme. Il est dit que si vous êtes
dans cette direction, allez-y, 50 000 en avant. Ensuite, nous ajoutons à cela le mot « emplacement de la caméra ». Ces 50 000, disons que nous
sommes 1,0 0,1, nous
facilitent les choses. Ce sera notre dernier résultat. Le résultat
sera de 1,50 mille. Il s'agit d'un K011. Chaque fois que nous visons, nous visons 50 000 points en
avant, plus
le mot localisation. Cela nous donne le dernier point. C'est ce que nous avons fait ici. Il s'agit de notre premier objectif. Disons que la direction de la cible n'
est peut-être pas le bon
nom, c'est juste la cible. Je pense que c'est tout pour celui-ci. Nous avons dit beaucoup de choses. Nous allons continuer
dans le prochain. Au revoir
16. Développement de mécanicien de tir: Bonjour, bienvenue sur le vrai
moteur Five Blueprints. Développement étape par étape d'un jeu de
tir spatial. le précédent, nous nous sommes
arrêtés avec la création notre cible. Par exemple, quelle est notre première cible
devant la caméra ? Dans celui-ci, nous
allons continuer avec le tracé linéaire dont nous
parlions. Cette ligne invisible qui nous
indique si nous heurtons quelque chose. Continuons,
passons à notre projet. Et puis le nœud suivant dont nous
aurons besoin est la ligne trace 4. Nous allons maintenant
tracer quatre objets. Il existe
également d'autres tracés linéaires, comme par canal, ce qui est comme
un canal spécifique à la visibilité. Nous expliquerons
cela dans une seconde. Les sphères ont
une forme différente C'est une forme sphérique. En fait,
au lieu d'une ligne,
d'une sphère, nous pouvons utiliser une sphère. Suit les objets par sphère. Trace sphérique pour les objets. C'est la même chose
que le tracé linéaire pour les objets avec une petite différence
que ce n'est pas une ligne, c'est une sphère que nous nous donnons, je vais supprimer ce tracé
linéaire pour les objets. Je vais utiliser cette trace de
sphère pour les objets. Maintenant, expliquons
quelques points ici. Le début est le point de départ
de la trace et l'endroit où la trace se termine. Pour la fin, nous avons notre
objectif de départ. Nous allons utiliser l'
emplacement de la caméra indiqué à un rythme de copie cette année et
connecté pour commencer. Maintenant, il y a ce rayon. C'est la taille de notre
sphère en gros. Je vais mettre une valeur de dix. Nous passons à une partie
plus importante. Il est dit ici, les types d'objets, que
nous allons
promouvoir cette variable, mais cela nous donne
l'occasion de discuter. Quels sont les types d'objets
et que sont les collisions ? Passons à notre fenêtre d'affichage, où se trouvent notre vaisseau
et notre boîte de collision. Fondamentalement, les collisions dans
Unreal sont un moyen de faire référence à la détection d'un contact ou d' intersection entre
des objets dans le jeu Ou si nous sélectionnons le maillage
statique ou la case, il existe ici une catégorie
appelée collisions, qui possède de nombreuses propriétés, de détails avec lesquels jouer. Nous allons
les passer
un peu en revue avec quelques
détails, mais pas beaucoup. La simulation d'
un événement de génération de chaleur
consiste à générer des événements de chaleur
pendant que la physique se produit. Nous pouvons le voir dans l'
infobulle ici. Et le matériel physique est un
peu plus complexe. Les matériaux physiques, vous pouvez avoir des réponses basées sur le matériau
physique de n'importe quel matériau, comme
on pourrait dire du béton, et avoir
une réponse spéciale sur la dérogation ou sur
le matériau
physique existant, générer des événements de
chevauchement Oui, c'est un
peu plus avancé. Les systèmes génèrent des événements de chevauchement Si la case de collision
génère des événements, un
chevauchement ou même un clic, je pense que
cela est inclus dans ce personnage. Comme l'indique l'infobulle, il s'agit de la mécanique de
mouvement du personnage essaie de marcher sur quelque chose Ce n'est pas
le cas si vous pouvez marcher dessus lorsque vous avez atterri après avoir sauté dessus ou quelque chose comme ça. Maintenant, les préréglages de collision. C'est une belle liste que real a créée pour nous
avec quelques préréglages. Mais nous pouvons toujours faire
une collision personnalisée. Les préréglages ont une
incidence sur ces éléments. Ci-dessous, nous avons activé la
collision, c'est-à-dire requête ne peut pas être sûre façon dont elle est prononcée
et les collisions physiques. Nous pouvons choisir d'
activer certains d'entre eux, désactiver certains d'entre eux
ou d'éviter toute collision Maintenant, le type d'objet, c'est
ce qui
peut intéresser notre
conception de ce que nous faisons. Le type d'objet est un canal
qui consiste essentiellement en une liste. Il s'agit d'un mécanisme utilisé pour classer différents
types d'objets et définir la manière dont ils
interagissent les uns avec autres en termes de collision Pas d'autres éléments de programmation, mais en termes de collision. Comment ils interagissent les uns
avec les autres. Par exemple, lorsque le
monde est statique, quel en est l'effet
sur la dynamique mondiale ? Ici, il est dit de le bloquer , par
exemple, je vais
revenir à ce qu'il était Pond, en gros, c'est tout. Cette jolie boîte ici. Cliquez pour ouvrir la documentation. Si vous cliquez dessus, il y a
une analyse très détaillée des collisions
dans
les jeux Epic. Très bon.
Continuons maintenant. Nous avons des types d'objets. À quoi sert ce traçage de sphères ? Pour les types d'objets que
nous allons utiliser, nous allons compiler pour
activer les valeurs par défaut et nous allons ajouter
un type d'objet serait World Dynamic. Notre trace est à la recherche d'
objets du
type World Dynamic. Une autre chose à
propos des collisions, et je vais m'arrêter là, c'est que nous pouvons créer
nos propres types d'objets. Si nous allons dans les paramètres du projet
et que nous passons aux collisions, il y a des collisions
ici, des canaux d'objets. Nous pouvons créer de nouveaux canaux d'
objets ,
puis créer de
nouveaux canaux de trace. Il y a un préréglage ici. Nous pouvons voir si je crée un
nouveau canal d'objets, nous disons mon canal personnalisé
P, je n'ai pas composé Si je compile d'abord, vous verrez mes versions personnalisées ici et elles contiennent les collisions
par défaut. Quoi qu'il en soit, n'hésitez pas à
explorer le système car c'est un système nécessaire pour les projets à
plus grande échelle. Je vais supprimer celui-ci. Continuons. Bien sûr. J'ai oublié d'expliquer encore
une chose. Complexe de traces.
C'est quoi ce bouton ici ? Quand on passe à un moi statique, disons
par exemple un vaisseau spatial Certaines mesures statiques
entraînent une simple collision. Si nous allons montrer et
dire collision simple, nous pouvons voir
une simple collision ici. Certains d'entre eux ont également une collision
complexe
que vous pouvez voir. C'est beaucoup plus détaillé. Il est toujours préférable d'utiliser une
simple collision si c'est
le cas de la masse statique, mais nous pouvons toujours
générer une forme de collision simple grâce à
ces options ici. Nous n'allons pas passer par
là pour le moment. Continuons. Nous n'
allons pas utiliser le complexe maintenant. Acteurs à ignorer, acteurs
à ignorer un tableau. Encore une fois, nous n'avons pas
parlé de tableaux, mais j'en ai fait la promotion en tant que
collisions d'objets Vous voyez ce symbole
ici avec de nombreuses petites boîtes. Cela symbolise un tableau. Qu'est-ce qu'un tableau ? C'est une liste. En gros, comme vous pouvez le voir ici, j'en ai ajouté un bien d'autres. Laisse-moi refaire ça. C'est ce qu'est ce NarraA. Il contient des règles spécifiques
concernant la manipulation de cette liste. Nous n'avons pas besoin de nous en éloigner pour
le moment car nous n'
allons pas les utiliser dans cette liste. Nous pouvons le remplir d' acteurs à ignorer, nous
ne l'utiliserons pas Maintenant, quelques choses plus
intéressantes. Dessiner le type de débogage. Cela indique combien de temps
doit durer la ligne de débogage ? Qu'est-ce que la ligne de débogage ?
Il nous montre notre trace. En fait,
démontrons-le. Nous l'avons, si je le
mets pour une image, nous voulons ignorer le temps
passé pendant 5 secondes. Voyons ce plateau
sphérique qui part notre appareil photo et se termine avec la durée de vie maximale de la
balle. Vous pouvez le voir ici, ça
part de la caméra et ça se termine là-bas. Continuons. Ignorer soi-même, c'est ignorer le plan
lui-même, tracer la couleur C'est pour la caméra. Si je change cela, la couleur de la ligne de débogage changera S'il réchauffait quelque chose
après la chaleur, il prendrait la deuxième couleur. Je vais m'en remettre à
celui-ci, peu importe. Peut-être que nous pouvons donner au rayon de la sphère une valeur un
peu plus grande. Portons le score à 20. Ça fait
2 200. Il y a un point ici. Parlons maintenant des
résultats. Les entrées, nous
parlons du temps de tirage. Combien de temps durent les
lignes de débogage tracées sur
les valeurs de retour ? Nous avons la
ligne d'exécution, bien sûr, nous avons cette chaleur de sortie, et la valeur de retour, la valeur de retour, c'est si
elle a chauffé quelque chose. Demandons à cette
première agence Cola, car la trace a trouvé quelque chose. À l'heure actuelle, nous
n'avons rien au monde. Les sondages seront toujours déclenchants. Mais comme nous devons analyser
un peu notre épisode de chaleur, je pense que nous avons dit assez de
choses pour celui-ci. Nous avons analysé
les collisions, nous avons créé notre
ligne de trace sphérique comme nous l'avons vu ici. Nous allons passer à
la suivante. Au revoir.
17. Améliorer le ciblage et le croisement: Bonjour et bienvenue sur
Engine Five Blueprints, jeu de
tir spatial développé
étape par étape Dans le dernier, nous avons
créé notre tracé linéaire. Nous avons expliqué quelques points sur
les collisions, les types d'objets et quelques points sur les
listes appelées tableaux qu'ils doivent manipuler
selon des règles spéciales Maintenant, nous avions ajouté une branche ici, laissez-moi l'ajouter. J'étais en train de vérifier certaines choses. Aujourd'hui, nous allons
parler un peu notre résultat à l'extérieur. Lorsque nous chauffons quelque chose, lorsque nous entendons quelque chose, qu'
est-ce que
nous obtenons en retour ? Vous voyez qu'il est écrit « chaleur ». Ce qu'est une structure est un type de variable spécial qui peut contenir de nombreux types de
variables différents. C'est comme une liste personnalisée
de ce que nous voulons. Cela facilite la
manipulation et la réutilisation des données. C'est un bon moyen de stocker des informations dont nous savons que des informations
spécifiques seront nécessaires. Souvent, les structures, généralement lorsque nous avons une
structure, nous pouvons la briser. Cela signifie qu'il nous montre
quelles données il contient. Nous sommes en train de battre le résultat de la chaleur. Et nous pouvons voir qu'il y a un
tas de données ici. Ce que nous voulons, c'est porter
l'emplacement si nous le heurtons. Quelque chose que nous voulons
changer d'objectif. Parce que notre cible en ce
moment est la fin de la ligne de frappe,
le nouvel emplacement. Revenons à notre
magnifique dessin ici. dessin incroyable, au lieu d'avoir la cible
ici en ce moment, Ce dessin incroyable, au lieu
d'avoir la cible
ici en ce moment,
nous disons que nous l'avons atteinte ici ou ici. C'est notre nouvel objectif. Maintenant, pourquoi nous ne pouvons pas voir, parce que j'écris
sur le mauvais calque. Oui, si je clique sur cette couche, je peux écrire sur la
bonne couche, notre cible n'est plus ici
et elle est quelque part ici. Si nous ne touchons rien, notre cible reste
cette chose ici. Si ce n'est pas le cas,
l'objectif ne restera pas le même. Une autre information
que nous devons conserver est la chaleur. Je vais promouvoir cette
variable, cet acteur cible. Je vais
régler ça ici. Maintenant, si nous ne touchons rien, notre acteur cible
devrait devenir nul. Je pense que nul est une programmation, terme qui ne veut rien dire. En gros, c'
est quelque chose qui va revenir comme il va
retourner quelque chose. Comme cette liste est
un peu longue, nous devrions
appuyer dessus ici et masquer la plupart des
choses dont nous n'avons pas besoin. Avec cela, nous avons créé
notre système de ciblage, mais c'est une bonne chose
pour la programmation. Comment pouvons-nous montrer au joueur
que vous ciblez ? Quelque chose que nous savons qui se
trouve au milieu de l'écran. Revenons au gameplay de
notre widget dans
l'onglet Designers. Ajoutons une image. Nous allons
maintenant ajouter
quelques réticules pour le pinceau d'image que nous
avons sur les textures des fichiers Ce réticule, je vais le
creuser et le déposer sur l'image Je vais ancrer l'image au centre de l'écran. Pour ce qui est de la taille, je
dirais qu'une boîte carrée
de 100 x 100 serait bien. La position doit être de -50 sur X et de -50 sur Y. Elle est centrée vers le haut. Je vais compiler et enregistrer. Maintenant, lorsque nous
ciblons quelque chose, nous voulons cette image. Permettez-moi d'appuyer sur G. C'
est ce que maman a fait. J'ai juste dû décliquer dessus
pour supprimer le. Nous devons montrer
au joueur que le réticule
vise quelque chose ou non Changeons sa valeur par défaut à son alpha 2,50 0,5 C'est un
peu transparent Passons au graphique pair
et créons deux fonctions. La première fonction
appellera target. Nous allons cibler l'autre. Revenons au concepteur et faisons de cette
image une variable. Donnons-lui un
nom. Je souligne le réticule pour revenir au
graphique pair dans Commençons par
celui-ci. Nous allons obtenir le set d'images croisées. En fait, définissez-le, réglez,
brossez, teignez la couleur. Je vais connecter
ici ce qui dit « couleur fine ». Je ne vais pas
créer de variable car
ce sera pareil. Je vais à nouveau diviser
cette épingle de structure, car il s'agit d'une structure de couleur
ardoise Je vais le partager et
dire que la couleur sera, mettons un beau rouge. L'alpha serait de 0,5.
C'est du rouge transparent. Pour les règles, nous
conservons simplement la couleur spécifiée. Maintenant, je vais le
copier-coller. Je vais aller à Target. Nous allons le coller.
Je vais le connecter. Je vais
tout mettre sur un seul pour
qu'il devienne blanc et
transparent 0,5 alpha
0,5 Compiler et enregistrer. Je vais maintenant revenir à notre vaisseau spatial
pour en savoir plus
sur le mécanisme de ciblage Je vais faire de
la place ici. Je vais apporter
la référence au widget. À partir de la référence du widget, je vais appeler ces
deux fonctions Target. Cible. Et
connectez-les à la ligne. Peut-être le copier deux fois. Ça a déjà l'air mieux.
Je n'aime vraiment pas ça. Nous pouvons mettre tout cela dans une fonction pour ne pas avoir
tout ce gâchis à l'extérieur. Et appelez cette fonction système de
ciblage
et mettez un commentaire. Maintenant, pour la
prochaine partie de notre mécanique, nous allons avoir besoin d'
une entrée de prise de vue. Je vais cliquer avec le bouton droit de la souris
et taper le bouton gauche de la souris. Nous allons avoir
besoin d'une nouvelle variable. Je vais le créer ici. Je vais appeler cette variable. Je vais donc apporter
un setter ici,
copier-coller et connecter le
pressé et le publié sur la Je vais passer à vrai. Nous devons maintenant
parler du fonctionnement de notre
mécanicien de tir. Je pense que c'est un bon point de
rupture pour celui-ci. Et nous allons passer à
la suivante. Au revoir.
18. Créer la base du système de prise de vue: Bonjour et bienvenue dans le développement étape
par étape du
jeu Space Shooter de Real
Engine Five Blueprint développement étape
par étape du
jeu Space Shooter Dans la leçon précédente,
nous avons commencé par
le démarrage du mécanisme de
tir et nous avons terminé avec le
réticule et le résultat de la manche Comme nous l'avons dit.
Expliquons un peu. le mécanisme de tir, je ne pense pas que nous ayons besoin de
beaucoup de peinture, mais en gros,
le
concept est que lorsque le joueur appuie sur le bouton enfoncé, ce cliché aura un délai qui reprendra lorsque
le bouton est enfoncé Si le délai est actif, nous ne voulons pas prendre de nouveau photo, mais attendre que le
délai soit terminé. intérieur du mécanisme de
tir, nous vérifierons si
le bouton est enfoncé ou relevé. Je pense que c'est en gros ça. Nous continuons
la prise de vue en boucle continue tant que le bouton est le meilleur design jamais conçu. Commençons par ceci.
Nous allons créer un événement personnalisé et
appeler ce tournage. Nous allons l'appeler ici. Lorsque nous cliquons,
nous appelons l'événement de tournage laser
Now pour contrôler le flux. Si nous devons refilmer
ou s'il s'agit d'un retard, il pourrait y avoir plusieurs
façons de procéder. Il peut y avoir des barrières, des lingots, des États Avec les énumérations,
nous utiliserons un seul nœud. Cela signifie, comme nous pouvons le voir, qu'il fait quelque chose une fois
et qu'il dispose d'une entrée de réinitialisation. Dans cette entrée de réinitialisation, nous allons appeler
un événement personnalisé. Encore une fois, événement personnalisé, nous allons appeler
cela un laser de réinitialisation. Ça, ne dis pas
laser, OK, réinitialise. Lorsque nous voulons le réinitialiser, lorsque le joueur pourra à nouveau tirer, nous le réinitialiserons La prochaine chose dont ce noyau
de mécanicien aura besoin sera un délai. Car ce délai correspond à notre
délai de prise de vue, 0,2, ça me va. Je vais en faire
une variable et dire CD laser. Je vais l'apporter
ici plus tard. Après le refroidissement,
je vais procéder à une réinitialisation. Maintenant, après avoir
réinitialisé le laser, qui appelle ici,
il se réinitialise une fois Je vais mettre une branche
et lui demander si elle tire. Si on est en train de tirer. Si
nous sommes toujours en train de tirer, je vais appeler laser
laser, laser shot. Si nous ne tirons pas, je ne ferai rien. En gros, cela crée une
boucle selon laquelle chaque fois que
nous appuyons, nous commençons à
tirer le laser. Tant que nous maintenons la touche enfoncée, nous lançons le laser. Maintenant, démontrons-le
avec un son avant délai Je vais jouer le son d' tir et notre acide se
trouve dans Sounds. Celui-ci, celui-ci, certains sont des sons. Nous utilisons certains d'entre eux parce qu'ils peuvent être légèrement
manipulés. Ça sonne, je ne peux pas. Je
vais mettre ça ici. Si je fais pression en ce
moment, je suis en train de tirer. Le son est correct. Et on peut voir les héritiers croisés et l'énorme, eh bien,
ce n'est pas énorme C'est juste notre point de vue
qui le rend énorme. La sphère qui va
d'ici à là, qui est notre cible, si je peux, encore une fois, voir le milieu, je pense qu'il est temps de créer un nouvel acteur qui
sera notre solution. Passons au contenu.
Passons aux plans Et cliquez avec le bouton droit de la souris et créez une
nouvelle classe de plan. Ce sera
du type acteur. Maintenant, pourquoi acteur ? Parce que nous n'
allons pas le posséder, c' est juste une chose dans notre
monde qui fait quelque chose Je vais l'appeler
VP Bulet en fait, parce que nous allons également
avoir des balles ennemies Je vais l'ouvrir,
pour tout enregistrer. Maintenant, s'il s'ouvre comme ça, vous pouvez toujours cliquer sur
Ouvrir Blueprint Editor et il s'ouvrira normalement Cela affichait simplement les valeurs par défaut de la classe car il n'y avait rien
dans le plan Passons maintenant à Viewport. Nous allons ajouter
trois choses ici. Maillage asmatique que
nous avons ajouté dans le joueur, comme nous l'avons ajouté sur le vaisseau
spatial du joueur Parce que nous allons en
avoir besoin pour le corps. Appelons ça en dernier. Je vais maintenant ajouter une flèche à des fins d'écoute
que nous pourrions avoir besoin de connaître Où est le point fort de tout cela ? Je vais ajouter un composant de
mouvement d'objet. Celui-ci, par ici.
C'est pour les projectiles, comme nous l'avons fait pour le joueur, le mouvement flottant. Pour les acteurs, nous pouvons ajouter
de nombreux autres composants, mais l'un d'eux est le mouvement des
projectiles Cela crée un comportement
de projectile. Il peut le faire rebondir,
faire beaucoup de choses. Il y a beaucoup d'
options ici. Nous n'allons pas
tous les utiliser dans cette puce, mais nous allons
en utiliser certains, en particulier la vélocité. Compilons et sauvegardons,
passons à notre outil événementiel. Nous allons les supprimer. Nous n'allons pas
les utiliser, je pense, commencez dès maintenant. Nous n'allons pas l'
utiliser non plus. Nous allons créer des événements
personnalisés. Sélectionnons notre balle et
passons à ses paramètres de collision. Nous voulons les personnaliser. La seule chose que nous
allons changer, que nous allons tout
changer pour qu'il se chevauche plutôt que pour modifier la dynamique
du monde Nous allons en
faire un monde statique. Même s'il s'agit essentiellement d'une dynamique
mondiale, nous voulons que ce soit un monde statique. Parce que pour notre système, notre ligne de trace
recherche le sens dynamique du monde, passons au tracé linéaire. Il serait peut-être plus facile de rechercher
ce tracé linéaire dans
notre système de ciblage Nous avons dit
dynamique des balles parce que
nous avons décidé que ce
sont les objets que nous traçons pour chauffer nos
balles ne devraient pas être le même canal
parce que nous ne voulons pas elles soient tracées en tant que cibles Nous ne devrions pas tirer
sur nos balles. Nous sommes en train de changer les
deux mots « statique ». Cela prouve que les
catégories sont destinées à notre usage. Comme si nous n'arrivions pas à décider qui
fait quoi et pourquoi. Mais j'ai aussi changé le fait que cela
se chevauche avec tout. Il s'agit d'un comportement totalement
personnalisé. Le joueur peut passer à autre chose, nous pouvons le dire
non, peu importe. Il voyage bien plus vite que nous, il voyagera plus vite que nous. Cela dit, nous n'allons pas réparer la partie endommagée
de la balle pour le moment. C'est ce que nous ferons lorsque
nous créerons les ennemis. Mais pour l'instant, ce dont nous avons besoin, c'est la balle à tirer et à
parcourir à cette distance. Je vais créer
un événement personnalisé, allons-y. Ce dont nous aurons
besoin bientôt, c'
est d'une direction. Je vais sélectionner des entrées
et d'autres nouvelles entrées. Il sera
du type vector. Je vais nommer
ce paramètre,
ce vecteur d'entrée, en fait la direction du vecteur. C'est dans cette direction
que nous voulons la balle aille. Comment
allons-nous nous y prendre ? Nous allons connaître le mouvement de notre
projectile et régler la vélocité Nous allons sélectionner
celui-ci ici, pas la vélocité dans l'espace local. Je vais régler
la vitesse non pas dans l' espace
local parce que nous voulons qu'
elle se déplace dans l'espace mondial. Maintenant, je peux le connecter
directement ici, mais
comme c'est
juste une direction dans laquelle nous allons nous diriger,
il ne sait pas à
quelle vitesse il va. Je vais multiplier
cette direction. Je vais le remplacer
par un entier. Je vais taper 80 000 Parce que nous sommes dans l'espace, les
distances sont énormes. 80 000, ça me paraît bien. Je vais le promouvoir
en tant que variable. Appelez ça à la vitesse d'une balle
et connectez-la ici. C'est tout ce dont notre
balle aura besoin pour savoir où se déplacer et
à quelle vitesse. Je vais compiler et enregistrer. Remettons cette
balle à notre joueur. Lecteur Blueprint, vaisseau spatial. Plan directeur. Pas dans le système de
ciblage. Allons tirer. Nous émettons un
son et c'est bon, mais nous devons
également générer la balle Je pense que c'est un bon point de
rupture et nous allons continuer sur
le prochain Goodbye.
19. Terminer le système de prise de vue: Bonjour et bienvenue sur Real
Engine Five Blueprint. Développement étape par étape d'un jeu de
tir spatial. le dernier cas, nous nous sommes arrêtés en créant la balle. Dans celui-ci, commençons par faire apparaître la
balle que nous n'avions qu'à loisir, tirée une fois avant le son Nous allons à nouveau mettre
une séquence. Pour la séquence, nous avons dit qu'
il suffit de tirer dans l'ordre. Il n'attend pas que cette
ligne soit exécutée. Ce que nous allons
faire, c'est parce que notre arme possède des niveaux tels
que le
tir de niveau 1 et le niveau 2. Peut-être pourrez-vous créer
un niveau 3 par la suite ou ajouter d'autres armes, mais pour l'instant, nous allons juste
avoir ce niveau
1 et ce niveau 2. Je vais ajouter une
nouvelle variable et appeler cela le niveau de l'arme. Il sera
du type entier 0123 autant que nous le voulons.
Maintenant c'est un gâchis. Encore une fois, commençons à classer
certaines choses dans des catégories. Nous avons la génération Endurance. Il s'agit de la consommation d'
endurance physique. Endurance du mouvement, temps, maniabilité. Ou nous pouvons créer un sprint
et regrouper tout cela en un seul, mais je vais juste les
mettre en mouvement. Les cibles devraient aller tirer. Je vais passer à la
catégorie shooting, mouvements
rapprochés, aux entrées rapprochées. Une gamme de tir principal, de
tir par type d'objet, de tir acteur
ciblé, de tir, de tir, tir, de CD laser sur le tir et de niveau d'arme sur le tir. Peut-être un parent du corps d'origine. Je vais aussi mettre ça sur le
mouvement, c'est de l'animation. Je vais laisser
le widget comme ça. Faisons le lien entre le niveau
de notre arme et le niveau de notre arme. Nous allons effectuer
un changement de sélection. Il s'agit maintenant d'un nouveau nœud. Interrupteur Switch est un nœud intéressant. Il peut avoir de nombreux
types d'entrées comme un commutateur, ce sont des énumérations Je pense que la plupart d'entre eux s'allument. Par exemple, si nous avions
une chaîne et que nous pouvions écrire des cas ici au laser ou si nous écrire des cas ici au
laser ou si nous
avions une variable pour
changer ce mot ici, elle se déclencherait en fonction du mot.
Maintenant, nous utilisons un entier, elle se déclenche en fonction d'un nombre. Si l'application 01 est réellement 0,1,
nous n'avons que deux cas, niveau un
et les niveaux 2. En fait, vous pouvez dire que
l'indice de départ commence à partir de, disons un, il passera à 12. Si je dis que l'indice de départ
commence à 15, il passera à 15, 16. Il possède également ce code PIN par défaut
que nous n'allons pas utiliser. Mettons l'indice à partir de 00.1
en fonction du niveau de notre arme, il tirera en conséquence Maintenant, la prochaine chose dont
nous aurons besoin pour tournage, c'est d'où
allons-nous filmer ? Je vais aller dans Viewport
et je vais sélectionner le corps parce
que je veux que les points à partir desquels
je vais photographier soient
attachés au corps Lorsque le corps tourne,
ils pivotent également. Et je vais ajouter
un nouveau composant. Et celui-ci en
sera un composant. En tant que composant, ce n'est qu'un point. En gros, vous pouvez
avoir la transformation de ce point et obtenir des
informations à ce sujet. Nous ajoutons la scène
et nous allons donner un
nom à ce puzzle. En fait, je vais le
copier-coller deux
fois de plus pour les mises à niveau ultérieures. Je vais mettre
une muselière devant le nez, peut-être un peu plus bas Oui, ça a l'air bien. Et je vais mettre la deuxième
muselière ici. air bien. Je vais
copier le lieu. Je vais le coller sur le museau 3 et supprimer le signe
négatif du Y. Il sera automatiquement affiché ici Nous avons maintenant quelques
points sur lesquels nous appuyer. La prochaine chose que nous allons
faire est de sélectionner zéro. C'est le même que
nous avons utilisé spawn player. C'est le même acteur d'apparition
que nous faisons apparaître le joueur, maintenant nous allons faire
apparaître nos balles. C'est ainsi que nous
introduisons des objets, des objets dans le monde. L'une des façons dont je
vais sélectionner
la puce à transformer, c' obtenir la
scène, celle du museau Je vais me renseigner sur la position mondiale. Comme il est dit, cela renvoie la
position mondiale de la cible, qui est celle du museau En fait, ce n'est pas le lieu. Le monde se transforme, transforme. Une transformation est une structure. En gros, nous pouvons le diviser. Il ne parle pas de structure, mais c'est une structure combinée par trois vecteurs qui
sont l'emplacement, la rotation et l'
échelle d'un acteur. Si je l'écris, cliquez
à nouveau. Je peux recombiner Je vais relier la
transformation murale de Muscle One à l'apparition
des événements Sport Son Nous devons maintenant indiquer la direction
à suivre, comme nous l'avons
dit, pour indiquer d'où, parce que je suis en train de lancer la balle parce que je suis en train de lancer la balle
dans cette partie du monde Mais vers où est-ce que je vais ? Où dois-je
augmenter ma vitesse ? Vers l'endroit où nous l'avons
installé ici, à l'intérieur de la balle. Nous multiplions cette direction. Nous réglons la vitesse,
nous réglons la vélocité. Pour cela, nous allons à nouveau
avoir besoin de quelques calculs. Mettons ce calcul
dans une fonction et appelons cette fonction ciblant peut-être le calcul de direction. OK ? Je vais sélectionner
cette fonction et sélectionner ce nœud pur ici. Et sélectionnez une sortie qui
porterait le nom du type. Je vais obtenir des directives. Je vais revenir au
graphique pair et introduire cette fonction. Vous voyez maintenant que cette fonction est
différente des autres fonctions. Celui-ci possède une
ligne d'exécution comme celui-ci. C'est à cause de Pure. Lorsqu'il est pur, il n'a
pas de ligne d'exécution. Lorsqu'il n'est pas pur, il
possède une ligne d'exécution. Je vais le connecter ici. Revenons à l'intérieur de la
fonction et faisons quelques calculs. La première chose que
nous allons utiliser est le vecteur direct que nous avons introduit dans notre système de
ciblage lorsque nous avons créé
la fin de la cible. Nous avons obtenu ce
vecteur Get Forward de la caméra. Maintenant, nous n'avons plus besoin de l'
attaquant, de notre museau. Disons que nous allons
chercher notre muselière. Nous n'avons pas besoin du
vecteur avant du museau. Nous en avons besoin par rapport à l'objectif, car
nous l'avons. Je vais
localiser le museau. Ensuite, je vais également obtenir pour la cible l'
emplacement de la cible, et je vais le
soustraire à Il s'agit d'un vecteur. Le résultat est un
vecteur qui pointe du swing vers la cible. Mais en coordonnées mondiales, il s'agit que d'une direction. Il ne sait pas où se
situer dans les
coordonnées totales du monde. Il n'en a aucune idée. Il
sait juste d'ici à là. Mais où dans le
monde Pour ajouter cela, je vais simplement ajouter l'emplacement mondial
du museau En fait, cette
attraction doit être la cible à partir de
l'emplacement du mot, et non l'emplacement du mot
à partir de la cible. Il faut que ce soit le contraire. Maintenant, il semble que
nous fassions de même. En fait,
ce n'est pas le cas parce que cela nous donne une orientation et
que nous ajoutons cette direction à
la position mondiale. Cela nous donne un déplacement, disons, de cette
taille vers là. Ensuite, nous lui indiquons
où dans le monde, afin que le déplacement se produise. Donnons-le dans un exemple. Créons un nouveau tableau, nouveau tableau, le précédent. Supposons que nous n'ayons qu'un axe
x et un axe y. Nous avons un point de départ 0,1
Disons 2.1 Nous avons notre point de
départ ici, nous avons 2,1
c'est x, c'est y. Notre cible est, disons, quatre, la
cible est ici. Et 444, nous avons notre objectif ici. Ce que nous obtenons lorsque nous soustrayons le 4.1 du 2.1, c'est
combien est cette distance, en
gros, à celle où
se trouve cette distance, nous ajoutons le mot
location de
ceci, ce 2.3 de taille 2.3 devrait commencer à
1,2 sur cette distance Nous allons soustraire
le mot localisation, encore une fois, pour le donner à une échelle mondiale
basée sur le monde Ensuite, nous allons
normaliser le résultat, ce qui nous donnera une valeur 0 à 1. À partir de là, nous
obtiendrons une direction Complétons-le. Nous allons fois
faire une soustraction d'ici. Nous allons soustraire position mondiale
du point
de tir Peut-être que nous le connectons ici. Oh, tu sais quoi ? Nous
pouvons simplement copier, pas couper. Copiez-le d'ici à ici. Et dis-le comme ça
et avec des câbles normaux. Maintenant, nous allons
le normaliser et nous allons le connecter ici. Nous compilons,
enregistrons et accédons à notre graphe interne, à notre mécanisme de prise de vue, et il est déjà connecté Cela devrait
fonctionner en ce moment. Si nous affichons start
it, ce n'est pas parce que nous n'avons rien
ajouté pour nous
montrer une puce. Faisons-le très rapidement. Je vais choisir
pour un maillage statique, la forme d'une capsule étroite. Je vais le faire pivoter dans notre
direction. Je vais le redimensionner à 0,6 et 0,6. Je vais le faire aussi, donc il est un peu
étiré pour l'élément. Nous allons en choisir
un parmi nos matériaux, en passant, le treillis statique. Vous pouvez le trouver dans le dossier
statique Me ici. Pour notre matériel,
je vais utiliser le lecteur MI Bullet Globe
et nous avons un lecteur Bullet
Express. Nous le pouvons, alors partons
vers notre vaisseau spatial. Nous accédons à notre système de ciblage. Décochez cette case. Tapez
le dos sur non, cette sphère ne nous ennuie pas Nous sommes en train de tirer. Permettez-moi de baisser le son
car c'est un peu gênant. Nous avons créé un cliché. Nous nous déplaçons et
nous tournons. Nos balles vont directement
au milieu de notre cible. Comme nous pouvons le constater, lorsque je me déplace, ils font juste un suivi parce que c'est
rapide et c'est une bonne chose. Je pense que c'est tout pour celui-ci. Je te
verrai le prochain. Au revoir.
20. Composants et système de dommages de l'ennemi: Bonjour et bienvenue
sur Unreal Engine Five. Développement étape par étape d'un jeu de
tir spatial. Lors de la dernière, nous avons
commencé à photographier des choses. Nous avons créé ce mécanisme
de tir. Si nous commençons maintenant et
commençons à tirer, nous tirons en fait
des balles sur nos cibles, notre cible, sur notre cible Et nous pouvons sprinter, tirer
et sprinter en même temps. Génial. Maintenant, dans celui-ci, je pense qu'il est temps de
pouvoir tirer sur quelque chose. Mais avant cela,
complétons et testons le niveau deux. Maintenant que nous utilisons
muzzle 1 ici, nous pourrions utiliser simplement muzzle
2.3 et le recréer Mais au lieu de le faire, nous
allons simplement l'optimiser un peu et en faire
une fonction. La première chose que nous
allons faire est de saisir le calcul
de
notre itinéraire à partir de celui-ci Je vais le connecter
en entrée. Vous voyez qu'il a créé cette
entrée connectée ici. Et je vais également
connecter celui-ci. Maintenant, nous pouvons avoir une muselière fixée à
l'extérieur. Maintenant, le point commun entre les deux,
c'est une muselière. Je vais juste le connecter aussi. En fait, je vais
faire une note ronde ici, garder le museau à l'extérieur tout sélectionner
et
créer une autre fonction Je vais appeler
ça des lasers laser. Je vais le saisir
maintenant, une nouvelle entrée. Je vais le connecter
ici. Je vais appeler
ça des points de bouche. Retournez au graphique des événements. Je vais connecter
Muszzle ici. Maintenant c'est plus propre. Maintenant, je vais le
copier deux fois. Copiez-le et collez-le deux fois. Maintenant, je vais utiliser un Liplde. Honnêtement, nous n'en avons
pas besoin de deux. Il nous en faut juste un de plus. Je vais faire glisser une sélection depuis le point de départ et ramener
mes deux autres points de départ. Maintenant, je vais le
connecter ici. Qu'est-ce qu'un nœud flip flop ? Un nœud flip flop signifie qu'à
chaque fois qu' il s'exécute,
il s'exécute en premier Ensuite, un BB passe simplement des tongs entre
ces deux lignes d'exécution Nous allons les connecter
tous les deux ici. Je vais juste
connecter l'ESA ici. Maintenant, notre arme va
tirer une fois
par la bouche 11, fois par la bouche trois pour la bouche 2,1 fois
par la
bouche Si je déconnecte le
niveau de l'arme et que j'en tape simplement un ici, je peux réellement tester
l'arme de niveau 1. Comme vous pouvez le voir, ils
vont vers leur cible. Maintenant, je ne sais pas si
c'est très visible, mais la rotation des balles se rapproche un
peu de la cible, mais elle n'est pas très bonne Si nous revenons à notre plan
directeur et que nous passons au mouvement des projets Mouvement du projectile, il y a cette rotation qui suit la vitesse Nous devrions vérifier cela,
compiler et appuyer sur Play. Maintenant, nous pouvons voir que nos balles
sont bien mieux tournées. Très bien, on peut
tirer à partir du niveau zéro, on peut tirer à partir du niveau 1. Maintenant, le niveau trois serait
une combinaison de tout cela. Compilez et enregistrez. Commentons celui-ci. Appelle-le aussi, mettons ça ici. Je vais apporter
ces entrées internes. Je vais juste
baisser le commentaire. C'en est une, compilez et enregistrez. Il est temps de parler un
peu de nos ennemis. Au début, nous avons dit
que nous allions utiliser un acteur parent pour l'utiliser
avec des enfants acteurs. Cela signifie qu'en
gros, nous aurons un acteur de base qui
sera notre parent. Nous allons créer des acteurs
à partir de cet acteur. Cela aura
ses propres propriétés, mais conservera les
propriétés communes de l'acteur parent. Peut-être que cela nécessite un double M. Je ne suis pas sûr. Quoi qu'il en soit, les propriétés communes vont
à l'acteur parent, puis nous créons des enfants. C'est parent, peut-être que
l'orthographe est incorrecte. Peu importe que
nous ayons un seul ennemi. Appelons cela un ennemi du boom. Nous aurons un autre ennemi qui tirera
ce que fera l'ennemi de Boom. Boom Enemy trouvera
où se trouve le joueur et
s' en prend directement au
joueur comme une explosion En fait, lorsque l'ennemi touche le joueur,
il explose Et en plus des deux dégâts, le joueur sera endommagé et l'ennemi en plein essor
sera détruit. Maintenant,
l'autre ennemi aura un comportement qui, lorsque nous aurons le joueur, choisira un point aléatoire
autour du joueur à déplacer. S'il est à une certaine distance, il commencera à tirer. Le schéma de tir sera la position du joueur en plus et en moins par rapport à cet
endroit aux alentours. Par exemple, nous allons créer
un effet aléatoire. Maintenant, nous allons commencer par
créer les choses communes. Le plan directeur du parent. Voyons ce que
le parent aura. Les éléments courants que
tout utilisera
seraient un maillage statique pour
représenter le navire. Disons que je ne suis pas
sûre de son orthographe. Disons un maillage statique, une flèche pour nous indiquer la direction
et le système de santé. Comme vous l'avez remarqué, nous n'avons pas créé de système de santé
pour, également, pour le joueur. Ce sera un système
que nous
attacherons aux
ennemis et au joueur. C'est ce qu'on appelle un
composant de plan et c'est le même que le composant de
mouvement de projectile
ou le composant de mouvement
flottant que nous avons utilisé Mais ce sera un composant
que nous avons créé et nous voulons associer ce comportement
à d'autres plans Il s'agit de la tâche des composants à associer aux plans
et à leur donner un comportement Je pense que c'est un bon point
de départ pour ajouter ceci. Pour le créer, nous
pouvons d'abord l'ajouter au joueur, le
configurer, puis passer à
autre chose avec les ennemis. Avant de passer à
autre
chose, d'autres attributs communs du parent du plan parent seront variables en termes de
vitesse, comme la vitesse à laquelle l'ennemi va
se déplacer Une variable ponctuelle qui peut être Xp ou quel que soit le nom qu'
on lui donne, des points en ce moment. Dégâts variables. Une variable de dommage dû à une
collision, elle serait entièrement du
type float ou integer. La raison en est que ce ne
sont que des points statiques que nous voulons définir
comme valeurs par défaut. Et peut-être que
nous pouvons affronter certains ennemis seuls, comme sur le plan d'un enfant Nous
les modifierons si nécessaire. Mais si nous les avons
sur le parent, nous pouvons toujours définir
une valeur par défaut pour chaque variable de celles-ci. Fermons Paint. Revenons à notre projet. Accédez au navigateur de contenu,
accédez à Blueprints, puis cliquez avec le bouton droit sur Créer une
nouvelle classe de Blueprint Maintenant, dans cette liste, nous avons ce composant acteur. Un composant acteur est un composant réutilisable qui peut
être ajouté à n'importe quel acteur. C'est ce que nous utilisons. Composant acteur, appelons
cela le système de santé PC. En fait,
tout
ce qui en est atteint peut être endommagé et
peut parfois en perdre un peu. Disons et ouvrons ceci. Aucune différence particulière
entre un plan et
un composant de plan est qu' ici nous n'avons pas de fenêtre d'affichage Nous ne pouvons pas sponsoriser des composants, mais nous ne pouvons pas ajouter de
composants comme nous sur le plan de la
liste des composants Dans ce système, nous
allons utiliser deux variables et essentiellement
un état de santé actuel et un état de santé. Tout le reste sera modulaire. L'acteur auquel
appartient ce
composant sera automatiquement obtenu. Nous n'avons pas besoin de
référence pour cela. Par exemple, lorsque nous avons voulu afficher les
curseurs du ciblage dans
le ciblage des joueurs, nous avons fait référence
au widget Nous avons eu une référence
aux widgets. Nous pouvons donc appeler la fonction
des widgets et dire « ne pas cibler » ou « est-ce que la fonction cible exécute
la fonction cible ». Que se passe-t-il lorsque nous n'
avons aucune référence, car nous allons
associer ce plan à n'importe quel acteur ? Eh bien, pour cela, nous
allons avoir le propriétaire, ce qui signifie en gros à quel
acteur de Blueprint j'appartiens Et cela
nous donnera ce rendement. Pour spécifier l'acteur, nous
devrions choisir un acteur. Mais comme nous l'avons dit lorsque nous faisions la
comparaison dans le menu principal, si notre mode de jeu est le mode de jeu
que nous avons sélectionné, cela renvoyait un objet. C'était lors d'un
cours général d'un mode de jeu. Nous avons précisé si
vous êtes dans ce mode de jeu, nous pourrions lancer un vaisseau spatial
joueur et déterminer si notre propriétaire est le vaisseau spatial Mais lorsque nous voulons faire des choses sans préciser à qui appartient
la référence. Les techniques de valorisation
que nous pouvons utiliser pour faire passer le message aux acteurs selon lequel nous ne savons pas de
quel acteur il s'agit. Deux d'entre elles que nous allons explorer sont les interfaces
Blueprint liées aux événements liés aux dommages Mais je pense que ces
informations sont suffisantes pour celui-ci. Je pense que nous devrions nous arrêter ici, faire une
pause et passer
au prochain adieu.
21. Santé des composants et des joueurs endommagables: Bonjour et bienvenue
sur Real Engine Five. Développement étape par étape d'un jeu de
tir spatial. Dans la
leçon précédente, nous avons parlé un peu de nos ennemis et du fonctionnement du système. Et nous avons commencé à
travailler sur le BPC, le composant du plan susceptible d'être
endommagé que nous allons ajouter à notre joueur
et à nos ennemis Nous avons terminé en
parlant un peu événements
Bind et des interfaces
Blueprint Voyons ce
qu'ils font en action. Tout d'abord, créons
une interface de plan. Découvrez comment nous y parvenons, nous écrivons, cliquons, nous passons à la catégorie
Blueprint. Ici, il y a une interface de
plan. Maintenant, je vais l'
appeler I communications. Blueprint communications n'a pas
vraiment d'importance. Le nom Tu peux le nommer
comme tu veux. Ouvrons-le maintenant. voyez, cela ouvre un plan vraiment différent
de celui auquel nous sommes habitués Vous trouverez les détails ici. Il n'a que des fonctions, il n'a pas de variables. C'est ce que sont les fonctions
d'hébergement. Créons une fonction,
elle en possède une par défaut. Nommons cette mise à jour. Si nous avons activé cette fonction
appelée mise à jour, comme vous pouvez le voir, je ne peux pas
mettre de code ici. C'est parce que nous devons l'
héberger dans des plans. Dans d'autres plans, nous
pouvons mettre des entrées et des sorties comme précédemment dans
n'importe quelle autre fonction que nous avons créée C'est ce que nous allons faire. Mettons-en deux, en fait, il nous en faut 21
pour la santé. Il sera
du type float. L'autre serait du lingot. Et nous allons demander
si la cible est morte. Ça va rester des lingots. Nous avons maintenant les deux
entrées dans cette fonction, mais nous ne pouvons pas passer d'
autre appel. Comme je l'ai dit, c'est
parce que nous devons l'héberger dans d'autres plans Supposons qu'à partir d'
ici cette fonction, nous devons la compiler et la
fonction est mise à jour. Je peux envoyer ce message ici. Le propriétaire devrait y être pour
quelque chose. Si cela a
du sens. J'envoie un message à quelqu'un. Je ne
sais pas vraiment qui ils sont. J'ai juste une idée générale selon
laquelle il s'agit d'une référence à un acte ou à un
objet. Ce n'est pas le lecteur Blueprint. Ce n'est pas le modèle de l'ennemi. Ce n'est pas le modèle. N'importe quel acteur reçoit
ce message. Si l'acteur doit en
faire quelque chose,
il doit le savoir. Maintenant, comment l'
acteur est-il au courant ? Eh bien, nous allons,
disons, le vaisseau spatial BV
Player Et nous passons aux
valeurs par défaut des classes, aux paramètres de classe. En bas, il est dit interfaces, interfaces
implémentées. Je vais ajouter et je
vais ajouter le BI. Maintenant que j'ai ajouté, je peux compiler. Et quand je compile, je vois qu'une nouvelle catégorie
A est apparue. Ici, il est question d'interfaces. Si je l'ouvre, il contiendra la fonction que
nous avons créée dans B. Pour résumer, pour ajouter une
interface de plan
à un acteur, nous allons dans Paramètres de classe, nous allons dans Implémenter les interfaces, nous appuyons sur Ajouter, et
nous ajoutons notre interface De cette façon, nous exposons
les fonctions, ou nous pouvons les créer sous forme événements si elles ne
proviennent pas du
plan d'interface que nous avons créé en ce moment Cela nous permet de faire appel à
n'importe quel propriétaire qui fonctionne. Et si le propriétaire l'a,
il fera quelque chose. Nous pouvons le faire avec n'importe quelle référence à un
acte ou à un objet. Plus vous travaillerez avec
le réel, plus ces
systèmes deviendront seconde nature et vous les
comprendrez mieux. La prochaine chose que nous avons appelée,
en fait, la première
chose dont nous avons
parlé portait sur la reliure,
quelque chose qui parlé portait sur la reliure, fait référence à cette
référence générale à un acteur. S'il s'agit d'un lien, nous considérons qu'il y a de nombreux
événements à prendre en compte. Il s'agit d'événements
communs à tous les acteurs. L'acteur commence, se chevauche, se chevauche. Considérez-les comme des fonctions
prédéfinies. Comportement prédéfini écrit
sur l'acteur de classe. Pour nous, nous allons appeler Bind
Events, prendre en charge les dégâts. Nous allons l'apporter ici. Nous n'en aurons pas encore besoin
, en fait. Nous allons le supprimer. Désormais, les événements de liaison se produisent
sur des événements, des actions
ou des fonctions qui
, par défaut, existent depuis Unreal Nous pouvons également créer des éléments lors de nos événements et lier des éléments. C'est un peu
plus avancé maintenant. Comme nous pouvons le voir ici sur l'événement, il possède cette icône que nous pouvons voir commune à tous les événements. Par
exemple, si nous allons à un événement, passons au vaisseau des joueurs. En fait, comme vous pouvez le voir, c'est ici avec la chronologie. De plus, cet événement l'a. C'est également ainsi que
nous relions les événements. Je n'étais pas clair à ce sujet
lorsque nous l'avons fait. C'est ainsi que nous
associons les événements à certaines choses à partir d'ici. Si j'appelle pour un événement, vous verrez que c'est un
peu différent, car cet événement représente
un événement impliquant un quelconque dommage. Si je vais sur mon joueur
et que je clique avec le bouton droit de la souris, approchons-nous et
écrivons les dégâts causés par
cet événement, tous les dégâts. Comme vous pouvez le voir, celui-ci a le même type
Outcus que celui-ci, l'
exception de cet acteur endommagé qui fait référence à l'
acteur endommagé Créons maintenant deux
fonctions, deux nouvelles fonctions. L'un, nous l'appellerons, l'autre, nous l'
appellerons Remove Health. Ajoutez également deux variables
de type float. Le premier serait la santé des parents. Le second
serait la santé maximale. Nous aurions pu supprimer une fonction et
décider d'une
manière ou d'une autre avec un lingot ou simplement
en soustrayant
un symbole mathématique plus,
ce qui revient en un symbole mathématique plus, fait Mais pour faciliter le
débogage, nous devons exécuter deux fonctions Maintenant, pour le premier, nous allons définir la courbe de
deux moins les dégâts d'entrée. Je l'ai connecté ici et
je vais le nommer en grande partie, je suis désolée, sur l'épingle ci-dessous. Parce que si je le dis, la
subduction sera fausse. Sur celui du haut. Je vais ajouter
l'état de santé actuel. Maintenant, nous devons l'agglutiner. N'oubliez pas que nous fixons une valeur minimale et une valeur maximale comme limites du
résultat de cette action. Pour la santé maximale, je
vais définir la santé maximale. Après cela, je
vais changer de propriétaire en propriétaire. Je vais appeler le propriétaire de la mise à jour. Je vais le connecter ici et je vais connecter
l'état de santé actuel ici. Pour cela, je vais juste
comparer est égal à zéro. Si cela est vrai,
il retournera vrai, compilera et enregistrera. Maintenant, sur Add Health, nous allons faire le contraire. Nous allons accéder à l'état de santé actuel
et nous allons ajouter. Maintenant, cela n'a pas d'importance
, mais juste pour des raisons de visibilité lors de la fabrication des câbles. Bien, je vais céder le pas,
encore une fois, nous devons agglutiner Je vais le copier
. En fait, je vais tout copier à nouveau. Je vais le coller
et me connecter. Connectez-vous cette année.
Peut-être faire de la place. Oui, ça a l'air bien.
Et je vais également le
connecter ici. Ces fonctions sont prêtes à
ajouter ou à supprimer de la santé. Passons maintenant au graphique. Lorsque nous engageons quelque chose
sur Take Damage serait re. Je vais apporter le
Remove Health ici. Je vais ajouter ceci ici. Et c'est que ce
sera notre BPC endommageable. Ce sera le composant qui indiquera que cet objet a de la santé et qu'il sera
retiré de la réserve de santé chaque fois qu'il subit des
dégâts. Renommons ce Rent Find
of Damage , Compile and Save Ajoutons maintenant la santé, tout d'
abord, à
notre vaisseau de joueurs. Nous avons déjà annoncé
un événement Damage. Nous devons maintenant ajouter notre composant comme nous l'avons fait pour le mouvement à
virgule flottante. Nous allons faire de même. Nous allons passer à Components, et maintenant nous allons
écrire BPC Damageable Maintenant c'est dommageable, notre personnage l'est aussi Mais si je sélectionne le
BBC Damageable comme nous avons sélectionné l'étang
flottant et qu'il possède certains attributs ici, certains détails sont les mêmes Nous avons à nous seuls deux
variables à définir, santé
actuelle et la santé maximale. Je vais mettre les deux à dix maintenant notre personnage en a dix en direct
, peu importe les dégâts. Nous n'avons pas vraiment besoin
de faire quoi que ce soit en cas dommage, car c'est
ce que nous avons conclu ici Chaque fois que cet acteur
déclenche cela, parce que c'est une composante
de celui-ci, il le déclenchera. Passons à notre joueur.
Je vais le supprimer. Ce dont nous aurons besoin,
c'est de notre fonction d'interface car nous avons créé ici et nous avons dit que nous ne
pouvions pas mettre de code. Le code se
trouve dans le lecteur. Je vais double-cliquer dessus. Il a créé un événement
automatiquement. S'il avait une sortie
automatique, il fonctionnerait. Mais je pense que c'est
suffisant pour celui-ci. Nous allons passer
à la suivante. Au revoir
22. Architecture plan d'un ennemi: Bonjour et bienvenue sur
Annual Engine Five Blueprints. Développement étape par étape d'un jeu de
tir spatial. Sur le précédent,
nous avons terminé notre BBC, notre
volet de plan, Damageable Nous lions l'événement à tout dommage subi et
à toute perte de santé. Nous avons également créé une fonction
pour ajouter de la santé, nous l'avons ajoutée à notre joueur. Ensuite, nous avons dit que
notre état de santé actuel, valeurs de santé
maximales, il nous
restait le propriétaire de la mise à jour. Continuons. Tout d'abord, nous devons nous demander si
notre joueur est mort. Accédez à la branche ici
et créez cette branche. Nous demandons si
le joueur est mort ? C'est vrai ? Si le joueur est mort, nous allons créer une
fonction appelée Spooky Name. Nous allons connecter cette
fonction ici plus tard. Nous pouvons remplir cette fonction
quand nous en avons besoin. Maintenant que le joueur n'est pas mort, nous devons lui montrer
d'une manière ou d'une autre qu'il a
un peu de santé. Pour ce faire, passons à notre U.
Je voudrais jouer, aller dans l'onglet Designer Et copions cet
arrêt dans une barre, placons-le un
peu au-dessus, assurons-nous que c'est l'endroit où nous allons
l'ancrer comme ceci. Changeons les
couleurs en vert. L'opacité du Pilin,
également quelque chose de vert. Sympa. En fait, le fond
devrait être rouge, je pense. Vert. Oui, c'
est plus logique. L'arrière-plan est rouge et
le premier plan est vert. Maintenant, je vais renommer cette barre Health Bar B Health Park Je vais passer au graphique et au
fur et à mesure que nous avons créé un pourcentage défini, qu'est-ce qu'il met à jour ? Pourcentage d'équipe Nous allons le
dupliquer et l'
appeler « pourcentage de mise à jour ». Au lieu d'avoir de l'endurance PB, je vais cliquer dessus avec le bouton droit de la souris En fait, je ne peux pas faire ça. Arabe. Oui, je vais
le supprimer et apporter cette partie sur la santé des PB. Et cette fonction est complète. Revenons-en à
notre vaisseau de joueurs. Et sur la fausse branche
du propriétaire de la mise à jour, nous allons obtenir la
référence de notre widget. Et nous allons définir le
set, désolé, mettre à jour le pourcentage de santé maintenant 4 %. Je vais endommager la
BBC pour
obtenir un maximum de points de vie parce que le joueur n'a pas de
variable C'est à l'intérieur du composant. Je vais récupérer le composant,
obtenir la variable de santé de Max à partir de celui-ci. Je vais me concentrer sur la santé. Cela nous donnera le pourcentage. Laissez-nous un commentaire à ce sujet. Commentons, je mets
à jour tout cela. Allons tester. Appuyons sur Play. On
peut y voir un aspect sanitaire. Il n'a cependant pas été mis à jour, car nous n'avons reçu
aucun dommage. Réglons ça. Passons
maintenant à notre vaisseau où nous avons créé le widget au fur et à mesure que nous l'avons mis à jour
pour le pourcentage de piétinement Nous allons faire de même pour la santé Nous allons le télécharger
un peu ici à partir du widget. Je vais appeler Update Health. Nous allons nous inspirer de
cette subdivision. Et apportez le BPC et
obtenez la santé actuelle divisée par santé, compilez et enregistrez Amenez ça ici,
là-dedans. C'est bon. Compiler une sauvegarde. Il est enfin temps de
commencer par notre ennemi. Puisque nous avons terminé
notre ingrédient manquant, le système endommageant des points de vie, nous allons
maintenant créer un plan comportant un maillage statique,
une flèche, le composant santé et quelques variables
pour les points de vitesse ou x p. Comme vous voulez l'appeler
pour désigner les dégâts causés par une collision. Allons le faire dans le navigateur de
contenu Open
Blueprints. Cliquez avec le bouton droit. Nouvelle classe de plan
de type acteur. Maintenant, si nous avions une IA
contrôlant cet arbre d'IA, nous le ferions, cela signifierait être activé, parce qu'un contrôleur d'IA
possède p. Mais puisque nous
contrôlons les acteurs en nous basant essentiellement
sur le mouvement pour localiser le
mouvement des vecteurs, et sur quelques règles simples,
nous n'en avons pas besoin. Ils seront donc de type acteur. Appelons-le
BP Enemy Parents. Et ouvrons-le maintenant. Nous allons ajouter un Ce statique. Nous allons donner un nom
au corps ennemi. Nous allons maintenant ajouter une flèche non palmée au maillage
de rainure. Et nous allons ajouter
notre PPC endommageable. Donnons-lui une santé actuelle de huit et une santé de huit. Compilez et enregistrez.
Passons au graphique des pairs. Nous n'allons pas
avoir besoin de tout cela. Nous allons devoir
ajouter notre interface
puisque notre BPC possède cette interface
et nous envoie un message Et nous allons nous en
servir, nous
allons ajouter les fenêtres d'interface. Si nous n'ajoutions pas l'interface, la seule chose qui
arriverait, c'est que cet acteur recevrait le message
et rien ne se passerait. Je vais compiler et enregistrer. Je vais sélectionner
notre maillage statique. Sur le maillage statique, je vais passer à Je vais commencer l'événement de chevauchement des
composants. Avant de poursuivre avec le début du chevauchement des
composants, vérifions que
les collisions de ce corps sont dynamiques mais
qu'elles bloquent tout. Nous allons créer une collision
personnalisée, nous allons la configurer pour qu'elle bloque
uniquement le pion et qu'elle chevauche tout le reste que
je vais compiler, disons qu'il n'y a pas de
chevauchement sur tout n'est pas nécessaire,
car dès que nous nous retrouverons, nous
détruirons cet acteur. Superposez toutes les dynamiques du monde afin que notre système de ciblage par balles puisse les détecter et c'est fait. Maintenant, comment savons-nous que nous avons
superposé le personnage ? Il s'agit d'un événement qui se chevauche. Cela nous donne un composant superposé, un
autre autre composant. Le composant de superposition
concerne notre composant, autre acteur acteur,
nous nous chevauchons L'autre élément est le
composant de l'autre acte. Maintenant, il y a plus de
détails sur ce que nous voulons nous embêter avec eux parce que nous
n'allons pas les utiliser. Fait ce composant, ce tag. Si c'est vrai,
alors fais quelque chose. Si ce n'est pas vrai,
alors ne faites rien. Nous apportons une
déclaration « si » ici. Nous allons avoir besoin d'une valeur invariable, celle que nous avons indiquée, Colision, Damas, pour définir une valeur par défaut ou le montant des
dégâts dont nous aurons besoin en
cas de Nous allons le mettre à flot
et le nommer Collision Nous allons compiler pour
lui donner une valeur par défaut. Et la
valeur par défaut doit être un. Compilez à nouveau, nous sommes entrés en collision avec le corps du
joueur. Que se passe-t-il ? Maintenant, nous appliquons des dégâts. Il s'agit d'un nœud prêt créé à partir d' Unreal pour transmettre des informations sur
les dégâts C'est celui que nous avons
utilisé lorsque nous le
fixons au composant, en cas de dommage subi,
de dommage. Lorsque nous
infligeons des dégâts à un ennemi, cela déclenche celui-ci. Nous allons relier les dommages causés par la
collision ici. Pour l'acteur des dégâts, nous allons connecter
l'autre acteur. Si un instigateur est un moyen de
transmettre des informations, par exemple, qui a causé le dommage
ou qui l'a causé, vous pouvez
également transmettre des
informations supplémentaires, deux informations différentes Le contrôleur
responsable de ces dommages et l'objet réel à
l'
origine des dommages. Il s'agit de moyens de transmettre d'autres
informations et types de dommages. Si nous avions des cours de type
Damas, mais nous
ne les utiliserons pas Encore une fois, valeur de retour,
les dégâts réels ont pris fin,
comme s' il s'agissait d'
une fonction avec un
nœud de sortie sur notre joueur, nous aurions quelque chose en
retour une fois cela fait. Après avoir infligé des dégâts, nous allons créer
une autre fonction hold death, et nous allons l'ajouter ici. Entrons dans la fonction mort. Ce que nous allons faire
lorsqu'un ennemi est dunk, faire apparaître un
émetteur sur place. Pour l'emplacement, nous
allons trouver une colocation. Si nous voulions créer
un système Niagara, nous utiliserions le
système d'apparition sur place Vous voyez que c'est aussi sur le Niagara. Alors que Span Meter
fonctionne sur les effets. Nous allons sélectionner
l'explosion. Nous allons augmenter un peu l'
échelle. Nous allons détruire l'acteur. Compilons et sauvegardons. Je pense que ce
serait pour celui-ci. Nous avons dit beaucoup de choses
lors de la prochaine, nous allons créer
le premier ennemi. Au revoir
23. Design et mouvement d'un ennemi: Bonjour et bienvenue sur
Engine Five Blueprints, un jeu de
tir spatial développé
étape par étape Dans le dernier cas, nous avons créé le parent ennemi et
nous avons créé le système. Que se passe-t-il lorsque l'ennemi chevauche le corps de notre joueur ? Créons maintenant un système
lorsque l'ennemi meurt réellement. Quand il est là, c'est la santé ici. Quand il s'agit de santé ici,
elle est tombée à zéro. Dans notre BBC Damageable
, nous pouvons ajouter tout ce que nous
voulons pour obtenir des Lorsque nous supprimons des points de vie, nous appelons le
propriétaire de la mise à jour sur le parent ennemi. Nous avons ajouté cette
interface et nous
allons l'utiliser en
double-cliquant
dessus pour créer cet événement. La seule chose que nous
voulons vraiment vérifier, c'est si ce truc est mort ? Je vais ouvrir une succursale
et je vais connecter ça ici, les morts. Si c'est vrai, je
vais appeler la mort. Nous sommes maintenant prêts à
créer l'ennemi, le premier enfant de
ce plan Je vais enregistrer et compiler. Faites-le, je vais sélectionner PP,
Enemy Parent, cliquez dessus avec le bouton droit de la souris. Et en haut, il est écrit
Create Child Blueprint Class. Maintenant, je vais l'appeler Ennemi. Je vais l'ouvrir. Vous pouvez maintenant voir que ce plan a
hérité de la flèche, du corps ennemi, du BPC, des valeurs dommageables et des valeurs par défaut Maintenant, en fait, il y a deux autres choses que nous devons
ajouter à l'ennemi parent. Nous devons ajouter deux
autres variables. L'un d'eux
s'appellera Speed, il sera
du type entier, et l'autre sera
composé de points. Ce sera également le type entier. Maintenant, nous en avons fini
avec l'ennemi parent, revenons à l'ennemi du boom. Maintenant, nous avons besoin de rapidité, bien sûr, car cet ennemi
va se déplacer. Mais avant cela,
utilisons le moi statique que nous
avons comme ennemi. Je vais prendre des mesures statiques. Et je vais sélectionner
l'ennemi B et l'ajouter ici. Maintenant, si cet ennemi se dirigeait
juste vers nous, il serait un peu périmé Pour le rendre un
peu plus intéressant, nous allons simplement ajouter un composant
rotatif. Nous indiquerons que la rotation
se fait sur l'axe y, sur moins 180 au lieu de l'axe Z. Il tournera de cette façon. Maintenant, l'utilisation d'un
composant de rotation possède de nombreuses capacités
et attributs. Nous voulons utiliser l'espace
local parce que nous ne voulons pas qu'il alterne
en fonction du monde. En fait, nous voulons uniquement faire
pivoter le corps au début du jeu. Je vais me procurer ce composant de mouvement
rotatif. C'est un composant, tout comme le BPC, qui
est dommageable,
mais il existe Nous allons passer à
cette mise à jour de composant pour définir le composant mis à jour. En le connectant pour
commencer à jouer pour le composant, je vais choisir
le corps de l'ennemi. Maintenant, cela ne fait pas pivoter
l'ensemble de l'acteur, cela ne fait que faire pivoter ce corps. Ce ne sont que des marchandises,
mais elles ne bougent pas. Faisons-le bouger, car c'est le parent qui subit des
dégâts et inflige des dégâts en entrant subit des
dégâts et inflige des dégâts en entrant en
collision Ici, nous n'avons besoin que du mouvement. Nous allons le faire au bon moment. Il déplace donc chaque image et le mouvement
semble plus naturel. Nous ne pouvons pas être définis à l'emplacement pour
définir l'emplacement de l'acteur, et le nœud définir l'emplacement de l'acteur. Maintenant, le nouvel emplacement sera
interprété pour notre cible. Nous allons obtenir la position de
nos joueurs. Comment faire cela lorsque nous n'
avons aucune référence au joueur ? Ici, nous allons appuyer sur le bouton
droit de la souris et accéder au joueur. Peu importe le personnage
que nous avons. Il peut s'agir de n'importe quel personnage. C'est le
pion contrôlé à ce moment-là. Nous allons nous rendre sur place. À partir de là, nous allons
le connecter à Target. Maintenant, notre ennemi se dirige
vers le joueur. Maintenant, nous devons nous
connecter à cette heure-là. Je vais le connecter à
l'événement. Cela dépend de images de
l'acteur due
à la vitesse intermédiaire. Nous voulons que la
variable de vitesse des parents n'ait pas de valeur par défaut. Définissons une
valeur par défaut de 500. Et définissons également la valeur par défaut de deux points.
Réglons-le sur un. Nous compilons et sauvegardons
maintenant ces variables. Nous les voulons dans notre personnage, mais dans notre premier ennemi, mais nous ne pouvons pas les voir. Il y a une option là-haut où il est dit Ajouter mes plans, et cette icône apparaît ici Voici les options de cet onglet , les variables héritées. Si je clique dessus, nous pouvons voir toutes les
variables héritées en fonction de cela. Mais il contient également la
réplication, le rendu et bien d'autres variables héritées des variables
de type acteur. Nous pouvons maintenant voir les tapis de
collision, la vitesse et les points, et nous pouvons réellement les manipuler. Nous voulons les manipuler, nous utilisons simplement la vitesse pour
les connecter ici. Avant de tester,
examinons nos collisions. Passons à la dynamique
mondiale de mes parents. Cela peut être non,
cela n'a pas vraiment d'importance. Les requêtes personnalisées et la dynamique
du monde de la physique se chevauchent. Ici, tout devrait être
pareil car il hérite. Très bien, passons maintenant à
notre lecteur, cochez la case. Maintenant, la boîte doit être personnalisée. Encore une fois, la statique devrait tout
recouvrir, peut-être sauf une statique qui
devrait bloquer la physique des requêtes. Maintenant, sur le corps, le corps doit tout recouvrir
et doit être un pion En fait, pas ceux qui étudient, parce que notre corps est un pion. Il devrait donc avoir un objet de
type p (physique coréenne). C'est peut-être non,
tout semble aller bien. Allons tester Start Game. Et il n'y a aucun
ennemi sur la carte. Amenons un ennemi sur la carte. Disons aussi tout. Jouons. Voici l'ennemi. Je pense qu'il est assez clair
que cela se dirige vers nous. Mais pas dans la bonne
rotation. Si je vais dans cette direction, elle ne tournera pas en nous regardant. C'est quelque chose que nous
allons corriger lors de la prochaine leçon. Si nous le tirons, nos
balles ne feront pas de dégâts. Nous ne l'avons
pas encore programmé, et ils
ne sont pas détruits. Mais si vous voyez que leur
chemin semble droit, ce qui n'est pas
le cas, ils
pénètrent en fait notre ennemi Et on dirait que c'est droit. Vous voyez Shoot Down ici. On dirait qu'il augmente, ce qui revient en fait à suivre l'ennemi. Et
ça en a l'air. Maintenant, si nous laissons l'
ennemi nous attaquer, nous subissons des dégâts, non ? Oui, je pense que c'
est tout pour celui-ci. Maintenant, il y a un tas d'erreurs. Pourquoi ces erreurs se produisent-elles ? Disons l'accès,
sans essayer de lire la propriété, la position de l'acteur
sur notre ennemi BP Boom. Toutes ces erreurs sont identiques. Ce sont les erreurs
qui sont créées parce que nous
n'avons pas fait apparaître l'ennemi, nous l'avons simplement placé dans le niveau et il
recherche un joueur Et nous n'avons pas encore
appuyé sur Démarrer le jeu, il ne trouve pas de joueur. Et il indique que l'erreur
ne peut pas trouver le joueur. Lorsque nous commençons, cette
erreur cesse de se produire. Mais nous ne placerons pas d'
ennemis comme ça, et ces erreurs ne se
produiront pas. Laissez-moi éliminer l'ennemi. Oui, je choisis l'ennemi. Supprimer la sauvegarde. Et c'est tout pour celui-ci. Je vais t'envoyer ensuite. Au revoir.
24. Fonctions ennemies courantes: Bonjour et bienvenue sur Unreal
Engine Fight Blueprint. Développement étape par étape du jeu Space
Shooter. Dans la dernière leçon
que nous avons terminée, en
fait, nous ne l'avons pas terminée, mais nous avons créé notre ennemi mais nous n'avons pas pu l'
endommager. C'est ce que nous allons faire. Passons à joueurs
et sélectionnons notre maillage statique et l'événement On
Begin Overlap. Maintenant, une dernière chose que nous
devrions faire à nouveau au parent ennemi de BP
est de tirer. Nous allons passer aux
classes par défaut du parent ennemi de BP,
rechercher un remorqueur et utiliser un remorqueur Nous allons le copier. Nous en avons besoin pour nos balles. Si nous passons à nos balles, nous allons nous demander si l'
autre acteur possède ce remorqueur Pas le composant cette
fois, mais celui de l'acteur. Je vais coller l'ennemi ici. S'il y a un T, nous
voulons appliquer des dégâts, l'acteur des dégâts
sera l'autre acteur. Créons de véritables nœuds sortants. Supposons que nous
infligeons 18 points de vie, huit tirs et que l'
ennemi meurt. Pour rendre les choses un
peu plus sophistiquées, repoussons à
nouveau le compteur, un emplacement. L'emplacement serait celui
de l'acteur. Nous pourrions en fait trouver un moyen de déterminer avec précision la chaleur. Mais puisque nous allons détruire
l'acteur par la suite,
ce sera une mince affaire.
Laissons-le sur l'un d'eux. Sélectionnez l'explosion de particules. Ensuite, nous allons
compiler ou enregistrer. Jouons. En fait, je
dois amener un ennemi, disons un peu plus loin. Et baissez le volume. Jouez. Démarrez le jeu. Nous pouvons voir notre ennemi. La cible devient également rouge. Je n'ai pas vérifié avant d'avoir
notre ennemi. Il nous arrive
avec une mauvaise rotation. Lorsque nous le frappons,
il est détruit. J'ai raté quelques photos là-bas. OK, l'ennemi était un
peu petit quand on l'a vu. Nous voudrions peut-être qu'ils
soient un peu plus grands. Maintenant,
nous avons un autre problème notre ennemi ne fait pas face à nous lorsqu'il
vient vers nous. Nous avons besoin d'un moyen de faire pivoter
l'ennemi vers nous, car nous allons l'utiliser sur l'autre ennemi pour,
eh bien,
ce n'est pas idéal. Mais c'est une bonne
façon de démontrer notre fonction de bibliothèque,
une bibliothèque de fonctions. Qu'est-ce qu'une bibliothèque de fonctions, comment avons-nous les communications, l'interface de plan
que nous avons créée fonctions à
l'intérieur permettent de partager les plans, mais la fonction était
remplie dans les
autres plans Maintenant, c'est tout le contraire. C'est une bibliothèque avec des
fonctions que nous
ressentons dans la bibliothèque. Ils ont certaines limites. Ensuite, ces fonctions
peuvent être partagées entre tous les plans que
nous allons accéder au plan avec le bouton
droit de la souris et dans la bibliothèque de fonctions du
plan Il existe également des
différences entre ces deux bibliothèques de macros , mais nous allons utiliser
la fonction pour le moment. Je vais appeler
ce jeu spatial P L. Je l'ai ouvert et il
a déjà créé une fonction pour nous. Renommons cette fonction. Fait pivoter vers la couche. Nous allons maintenant avoir
besoin de quelques informations ici. Permettez-moi d'expliquer certaines
des règles ici lorsque nous obtenons un contrôleur de couche par
exemple. Il a besoin d'un objet de contexte mondial. Cela signifie à qui
cela appartient ? Dans quel contexte obtenons-nous une manette de jeu comme le sont
ces fonctions, je ne sais rien de
quoi que ce soit. Nous devons leur
donner un contexte mondial. Je vais l'apporter
en externe et je vais nommer
cette manette ici. Nous connectons
le contrôleur maintenant, parce que c'est un objet, nous pouvons connecter à
peu près tout. Il ne serait pas judicieux de connecter autre
chose qu'une
manette ici Cela pourrait considérablement soutenir l'ensemble
du système et l'anéantir. Nous allons vérifier si c'est valide,
parce que si
ce n'est pas le cas,
cela ne devrait pas être une
vérification des rotations ou quoi que ce soit d'autre, car notre
joueur est peut-être mort Cela nous permettra également de
savoir vers qui nous tournons. Cela nous donnera
essentiellement le contrôle. Nous allons l'acheminer vers le
joueur à partir d'ici, obtenir la position du mur,
la position de l'acteur. Nous avons maintenant vers quoi nous
devons créer des personnes qui pivotent. Nous allons donc avoir
besoin d'une autre contribution. Celui-ci sera acteur. En fait, nous allons nommer
cet acteur. Maintenant, à partir de là,
nous allons également obtenir une rotation. Nous allons procéder à une rotation
sectorielle. Nous allons régler la rotation de cet acteur
en fonction du joueur. Ici. Nous allons faire un stage, deux
cette fois, ce
n'est pas constant. Plus il est éloigné, plus il tournera vite. Nous avons besoin d'une cible,
en fait, nous devons également connecter heure
delta et la vitesse inter-vitesse. À quelle vitesse
allons-nous tourner ? Comment trouver la
cible de la rotation ? En réalité, il existe un
joli nœud appelé point. Regardez la rotation. Nous avons un point de départ et un objectif, et cela nous donne une rotation. Le point de départ de la
cible est la localisation. Notre emplacement cible
est l'emplacement de notre étang. Notre point de départ
serait celui de l'acteur. Emplacement de l'acteur. L'emplacement de l'acteur, l'emplacement du
contrôle activé, nous indiquent, avec ce nœud, notre cible, où nous devons regarder. Maintenant, comme il s'agit
d'une bibliothèque commune, comme nous l'avons dit, d'une bibliothèque de fonctions, bibliothèque fonctionnelle
commune, nous pouvons appeler cette fonction de n'importe où. Nous pouvons l'appeler parent ennemi. On peut dire que c'est un
joueur en forme. Cliquez sur le joueur et tapez « vers l'
avant », faites pivoter vers le joueur. Nous pouvons obtenir cette fonction. Vous pouvez voir que c'est un
peu différent. Il a l'air un peu
différent des autres. C'est plus fin ici. Cela nous donne l'esthétique de cela, c'
est quelque chose de différent. Une fonction, une fonction de bibliothèque. Nous ne voulons pas
faire appel à notre joueur,
nous voulons l'appeler à notre ennemi en plein essor, lors de notre événement,
tourner vers le joueur. Faisons de la place ici. Connectons-nous au contrôleur. Nous allons fournir une
manette de jeu à notre acteur. Nous allons nous consacrer
à l'heure delta. Nous allons utiliser des secondes
delta. Et pour Inter Speed
, c'est une question de jugement. J'aime bien le chiffre dix. Il m'a semblé qu'
il pivote bien. Voyons si notre
joueur pivote. Cela devrait constamment nous
regarder. On va plus vite, on suit le rythme. L'ennemi
regarde constamment notre joueur. Nous ne pouvons voir les
côtés que lorsque nous en voyons réellement les côtés. OK, on l'a tué. Je pense
que c'est suffisant pour celui-ci. Je te
verrai le prochain. Au revoir.
25. Développement de shooter ennemi: Bonjour et bienvenue sur le développement étape
par étape du
jeu de tir spatial Unreal
Engine Five Blueprint par étape du
jeu de tir spatial Auparavant, nous en avions fini
avec notre ennemi en plein essor, l'ennemi qui se déplace près de nous. Et quand il entre en collision
avec nous, il explose. Et dans celui-ci, commençons
par notre ennemi tireur. Mais avant cela, j'ai remarqué que sur Puck, nous avions un réticule plus petit
lorsque nous Ça n'a pas l'air si gros. En fait, je l'ai
déjà modifiée. Mais nous allons également
le réduire. Il doit y avoir un
ennemi sur la carte. Oui, c'est ça. C'est
pourquoi nous avons tant d'erreurs. Passons à WG Gameplay et changeons le curseur
en petit curseur Après cela,
nous devrions changer
sa position en -25, la position y en -25
et la taille en 50 X et 50 Y. Compilez
et enregistrez. Allons appuyer sur Play. Sauvegardez également le niveau, sans l'ennemi, cette cible
semble un peu meilleure. Bien mieux en fait.
Parlons maintenant de notre nouvel ennemi. Parlons un peu
de notre nouvel ennemi. Imaginons que nous
avons notre joueur ici. L'ennemi va apparaître
quelque part ici. Maintenant son comportement. Nous aurons une zone. Imaginez une zone autour
du joueur avec maximum moyen
réel dans cette zone. Colorions tout ça en jaune. Que va faire l'ennemi ? L'ennemi prendra une
position aléatoire à l'intérieur de cette zone. Ce sera son objectif de déménagement. Lorsque l'ennemi se déplace ici, il s'arrête et commence à tirer en
direction de notre joueur. Après cela, il choisira une nouvelle position n'importe où
et s'y installera. Même si la position passe par ici et qu'elle doit
passer par le joueur, elle va passer par le joueur et
non par le joueur, elle essaiera de passer par là. Maintenant, ce sera
notre IA pour l'ennemi. Allons le créer.
Passons à notre navigateur de contenu. Passons aux Blueprints. Cliquez avec le bouton droit de la souris et sélectionnez
Blueprint Class. En fait, nous
allons faire un autre enfant du parent ennemi de
BP. Je vais faire un
clic droit sur Enemy Parent et créer une classe de
plan pour enfants Maintenant, je vais appeler ce
BP comme ennemi et l'ouvrir. Je vais également
en parler ici. Enregistrez-le et accédez à
Viewport. Maintenant, sélectionnons Body et
passons à nos maillages statiques. Et sélectionnez l'ennemi A et le dragon. Déposez-le sur un maillage statique. Maintenant, ce vote ennemi est un peu plus élevé
que ce que nous souhaiterions. Je vais baisser un peu. Nous allons maintenant passer à un vaisseau
d'occasion, le voici. Lorsque nous utilisons les points de départ
du joueur, certains composants de la scène ne sont en
fait qu'un point Comme nous l'utilisons pour faire
apparaître des balles, nous allons
faire de même pour notre ennemi Je vais ajouter un, je vais l'appeler muselière, je vais le coller, le copier, coller encore deux fois Premièrement, nous irons ici. Nous y sommes presque. Ça ne claque pas exactement au milieu, peu importe Mais si nous le voulons,
nous pouvons fermer ici les points de capture et
simplement les déplacer manuellement Oui, c'est parfait. Passons au numéro deux. Amène-le ici. Très bien, je vais copier l'emplacement
et passer à trois. Collez-le. Supprimez le X cette fois moins, car nous sommes sur l'axe X, nous pouvons le voir ici
depuis la ligne rouge. Nous allons le déplacer ici. C'est prêt maintenant. Nous n'allons pas l'utiliser. Allons à notre événement Tick. Nous allons utiliser
Begin, jouer ensuite. Tout d'abord, soudez, tournez vers le
haut selon notre fonction commune. C'est l'une des raisons pour lesquelles
nous l'avons rendu courant, afin que nous puissions l'utiliser plusieurs fois. Ici, je vais vous expliquer, en règle générale, fonction
courante
serait de fonctionner sur tick. Mais celui-ci est petit et
notre jeu est très simple. Ce sera tout simplement une bonne chose. Par exemple, pour l'acteur, je vais me sélectionner
pour le temps delta. Je vais me connecter à
Delta Seconds Interspeed. Mettons un
montant différent cette fois. Mettons-en un, 15 en fait. Maintenant, la prochaine chose à faire, demander si c'est le cas, nous allons utiliser une branche et si nous allons
utiliser une condition. Je vais prendre cette
valeur sur false, puis la
transformer en variable. Parce que si c'est
vrai et que je le promeut,
cela enregistrera par défaut
la vraie valeur. Je vais le rendre
faux et le promouvoir, la valeur par défaut est false. Et je vais
appeler ce lingot déménagement parce que nous avons une scène mobile et
une scène de tournage Cela permettra de faire la
différence car comme nous
avons deux étapes, nous ne pouvons poser qu'une seule
des questions : est-ce que cela
bouge ou ne bouge pas ? S'il bouge, nous allons
définir l'emplacement de l'acteur. Maintenant, nous allons
à nouveau interpréter. Nous allons choisir l'interprétation
constante est une interpolation vectorielle,
ou l'interprétation est une interpolation par
rotateur Il y en a quelques autres. Pour le moment, nous allons trouver la localisation de
l'acteur.
Elles sont actuelles. Pour la cible, nous allons
devoir
la calculer . Comme nous l'avons dit à propos du joueur, nous ne le ferons
pas ici. Nous allons créer une fonction pour cela car elle doit être
exécutée à des moments précis. Comme ici, quand c'est vrai, il devrait déjà
connaître notre cible. Nous allons promouvoir
ce nom de variable. Cet emplacement cible, je l'
avais déjà fait. Il y a eu un crash
dans le moteur pour redémarrer la position de la
cible à variable vectorielle .
Nous allons
relier le temps
delta aux deltasecondes du tic-tac pour
la vitesse. Nous allons obtenir la vitesse variable de notre
parent et le connecter ici. N'oubliez pas que si cela ne s'affiche pas, nous pouvons toujours
le trouver d'ici. Afficher les variables héritées. Maintenant, disons que nous sommes également en train de
balayer. Les collisions sont importantes. Nous nous
dirigeons vers cet endroit. Que se passe-t-il lorsque nous
arrivons à destination ? Mettons une condition de branche. Nous obtiendrons que la position de l'acteur soit égale à notre position cible. Maintenant, cette petite chose
ici est une tolérance aux erreurs. Comme nous
comparons à des vecteurs, nous pouvons avoir une tolérance aux erreurs. On peut le mettre sur l'un d'entre
eux ou sur n'importe quoi d'autre. Nous pouvons également l'avoir au
hasard avec de grandes valeurs. C'est un peu plus de
R & D à partir de là. Donc, qu'il atteigne
la cible ou non, mais peu importe pour le moment,
nous l'aurons comme ça. Si nous avons atteint
notre destination, nous devrions arrêter de bouger. Je vais passer immédiatement
aux trous. Lorsque cela s'exécute, il
cesse de fonctionner. Cela ne passera pas d'ici. Nous avons maintenant besoin d'une autre fonction, mais je vais
en faire un événement. Nous avons besoin d'un événement ici, donc je vais créer un événement
personnalisé et le nommer. Mince, je vais l'appeler ici maintenant parce que nous voulons être sûrs que
cela ne se reproduira pas. Nous allons le faire une fois, notez
ici qu'il ne tire qu'une seule fois. Je vais faire un
événement personnalisé pour le réinitialiser une fois. Je vais réinitialiser le nom. Donc, parce que nous voulons compliquer les règles ici,
que nous voulons filmer une fois et que nous
pouvons les réinitialiser chaque fois que nous
tournons à partir d'ici. Parlons maintenant du tournage, mais parlons de
ce que nous ressentons . Créons une fonction. Appelons cette fonction «
sélectionner un emplacement ». Lorsque nous sélectionnons le lieu
suivant, cela signifie que nous
avons déjà pris la photo. Donc, la première
chose à faire est réinitialiser, réinitialiser, tirer, tirer. Maintenant, la prochaine chose que nous
devons faire est de jouer. C'est notre objectif. Nous avons besoin de notre cible. Tout d'abord, nous
allons demander si c'est valide ? Parce que si le
joueur n'est pas valide, cela signifie qu'il est mort. Et si le joueur est mort, nous ne devrions pas chercher
un endroit proche du joueur. Cela créerait un
problème, c'est valide. Maintenant, la prochaine chose dont nous avons besoin est de localiser le joueur. À partir de cet endroit, nous
allons définir
l'emplacement cible. Mais nous n'allons pas entrer directement
dans le vif du sujet, car lorsque nous l'avons fait avec l'ennemi précédent, car lorsque nous l'avons fait avec l'ennemi précédent, l'ennemi
s'
adresse directement au joueur. Créons un carré
hypothétique. Peut-être, oui, peut-être
un
carré hypothétique autour du
joueur parce que ce que nous allons faire, c'est obtenir une unité, en fait juste un vecteur unitaire
aléatoire Non, cela
nous donne un vecteur unitaire aléatoire
d'une longueur de un. Nous pouvons considérer cela, notre orientation en
fonction de cet emplacement. Si j'ajoute ces deux points, si j'ajoute ceci aussi, si
c'est le centre, j'obtiens un point autour de lui, une direction aléatoire autour de lui. Maintenant, si je le multiplie
par un entier, peux obtenir un point d'ici avec une direction allant de là à une distance de l'
entier que je multiplie, je vais utiliser here et range, je vais sélectionner
un minimum de 10 000
15 000 . Cela
nous donne en fait un point dans
n'importe quelle direction autour de notre
joueur dans cette plage Nous allons le définir
sur l'emplacement cible. Après avoir défini l'emplacement
cible, nous allons définir le
déplacement sur true. À l'heure actuelle, nous sommes prêts à déménager. Cette fonction doit maintenant
être appelée au début de la partie. Je vais le connecter à
Begin Play. Lorsque l'ennemi commence,
lorsqu'il est sur le pont, il obtient une position
qui lui permet de se déplacer. Lorsqu'il atteint sa
destination, il cesse de bouger. Et des coups de feu. Maintenant, nous pouvons réellement le
démontrer
en mettant un délai ici. Faisons en sorte que ce soit un délai de
deux secondes. Ensuite, nous allons
sélectionner le lieu de déménagement. Cela se reproduira, en fait, parce que je vais également
mettre un délai ici. Je vais en faire
un de cinq secondes. Parce que lorsque vous jouez, cela
fonctionnera instantanément puisque nous avons sur la carte mais le
joueur ne sera pas sur la carte. Cela va se déclencher, ce n'est pas valide. Jouons. Il
devrait commencer à bouger. Oui, ça l'est. Je ne bouge pas. Il bouge mais il ne me
regarde pas. Regardez-moi. J'ai expérimenté un peu par
moi-même et j'ai découvert
quel est le problème Le problème est que ce maillage va également dans la
mauvaise direction. Si on fait face à 90
degrés, où est la flèche ? 90 degrés. Dans l'autre
sens, j'ai fait pivoter la flèche, ce serait -90. Je pense que
cela résoudra notre problème Ouaip. Et notre problème est réglé. Il nous fait toujours face. Il s'agissait du pivot
du maillage statique.
Ce n'est pas un gros problème. Maintenant, il se déplace tout seul. Nous n'aurions pas beaucoup de points de référence si nous en avions 23. Laisse-moi apporter un peu plus jeu. Écoute, ça fait un
peu peur maintenant. Ils bougent tous. Ils obtiennent des points
au hasard, dessous, en haut,
ils sont partout. Si nous en obtenons davantage, ils
seront partout. Je pense que c'est tout pour celui-ci. Je te
verrai le prochain. Au revoir.
26. Mécanique de tir des ennemis: Bonjour et bienvenue
sur Unreal Engine Five, jeu de
tir spatial développé
étape par étape Dans le précédent,
nous avions terminé avec notre ennemi, notre ennemi tireur. En fait, nous avons terminé le
mouvement de l'ennemi qui tirait. Dans celui-ci, nous allons
continuer avec le mécanisme de
tir. Passons au plan et passons à notre tournage.
Je vais le supprimer. En fait, je vais le garder, je vais le déconnecter parce que nous allons
utiliser ces nœuds. Je vais supprimer
le délai par rapport au début de la partie,
puis retourner au tournage. Maintenant, ce que nous allons
créer ici est essentiellement une
boucle personnalisée avec un délai. Il fonctionne à des intervalles spécifiques. Ce que nous allons
utiliser, c'est une branche. Nous allons créer
un comment créer un. Nous allons créer
deux variables, toutes les deux
seront des entiers, pas 64. Je joue juste des nombres entiers.
Je vais l' appeler Shots, Shots. Je vais compiler et je
vais en faire six plans. Six c'est peut-être trop,
peut-être trois. Je vais demander si les
tirs et les tirs sont égaux ? S'ils sont égaux,
réglez les prises de vue actuelles à zéro et sélectionnez un
nouveau point de déplacement. Maintenant, s'ils ne sont pas égaux, nous devrions augmenter
les tirs actuels. Je vais le
copier-coller ici. Maintenant, cela peut être fait pour obtenir un
set de plus un point pour les tirs actuels, mais cela peut aussi être fait
avec une augmentation Eh bien, j'ai déjà eu quelques problèmes
avec ça. Je ne sais pas pourquoi je n'aurais pas dû toujours me préparer de cette façon. Maintenant, que faisons-nous lorsque
nous augmentons la dose ? Tout d'abord, il faut se demander
si le joueur est toujours vivant. Récupérons le
contrôleur de couche tel qu'il est valide. Je voulais acheter une manette parce qu'un joueur
a toujours une manette valide même si elle n'est pas valide. Si le pion n'est pas valide, si le joueur ne
contrôle aucun pion, la manette sera Je vais le
connecter ici en cours de validité et
passons à notre tournage. Pour cela, nous avons besoin d'un nouvel acteur. Nous avons besoin de la balle de l'ennemi. Je vais aller au cours
Blueprint, sélectionner un nouvel acteur, et je vais
nommer cet ennemi PP Mais maintenant, nous pourrions utiliser la balle du joueur en
tant que parent, garder certaines choses
inchangées et changer certaines choses. Mais je préfère avoir une solution
différente pour l'ennemi, car nous voudrons peut-être l'améliorer plus tard pour passer à
autre chose. Je vais l'ouvrir, je
vais ajouter un maillage statique. Je vais ajouter le mouvement des
projectiles. Maintenant, en ce qui concerne le mouvement des projectiles, est-ce que j'ai fait ça au joueur Nous devons désactiver la gravité. Je vais ouvrir le mouvement des
projectiles du joueur en gris clair.
L'échelle de gravité
du projet devrait être nulle avec notre vitesse Cela ne l'
affecte pas vraiment, mais cela devrait être nul. Je vais compiler et enregistrer. Passons à la balle ennemie
et activons également la gravité. Remettre à zéro, compiler et enregistrer. Maintenant, notre maillage statique devrait être, par défaut, dynamique sur le mur. Ce que nous allons faire, c'est personnaliser et sélectionner le mur
statique et le superposer. Tout est compilé et sauvegardé. Cela devrait suffire, nous n'avons
rien d'autre à faire. Revenons-en à notre page
réservée aux joueurs. Copions cet événement ici. apparition de la balle, mouvement du projectile
et vitesse de
la balle Passons à Bullet
et collons-le ici. Vous voyez maintenant qu'il n'a pas
la vélocité qu'il peut obtenir avec le mouvement d'
un projectile Comme vous pouvez le constater, cela
existe, mais à la vitesse d'une balle, cela n'existe pas
dans ce plan L'événement vient d'être
créé par copier-coller. Pour créer cela,
nous allons écrire click et créer une vitesse de puce
viable. Il crée pour nous une variable qui n'a pas de
valeur par défaut. Je compile, c'est zéro. Réglons-le sur 8 000
Compilez et enregistrez. Combien coûtent nos joueurs ? 8 000 Oui, c'est la même vitesse. Nous avons maintenant l'événement
qui a besoin d'une orientation. Et nous le multiplions par la vitesse d'
une balle et cela donne de la vélocité au mouvement
du projet. Maintenant, le prochain comportement dont
nous avons besoin, nous pouvons
le trouver chez le parent
du parent ennemi ennemi. Ici, c'est lorsque nous
entrons en collision et que nous transférons que les dégâts ont été
infligés au joueur Je vais copier
tout ça aller dans Enemy Bullet
et le coller ici. Maintenant, il demande la mort parce que sur le parent ennemi,
nous avons la fonction de mort. Nous allons vous dire de ne rien faire. Comme vous pouvez le constater, cela
peut nous montrer que cette fonction n'existe pas
parce que nous nous en fichons. Nous allons le supprimer
et nous allons juste passer à un
acteur. Maintenant, pour les dégâts de collision nous allons juste en mettre
un dans les dégâts de base. Et c'est tout. Nous avons ce composant qui commence à
se chevaucher avec le corps ennemi. Nous n'avons pas de
maillage statique appelé corps ennemi. Je vais sélectionner notre maillage
statique sur le composant, commencer le chevauchement,
sélectionner cet événement. Je vais tout transférer ici et supprimer celui-ci. Nous allons en parler. Je pense que c'est le cas lorsque
la balle cible un joueur. Il fera des dégâts
et se détruira tout seul. Un autre problème avec
ces balles, c' problème avec
ces balles est que lorsque nous partons dans le monde, si nous commençons à tirer, laissez-moi baisser un peu le
son Si nous commençons le tournage, vous pourrez voir les
acteurs ici. Qu'ils
augmentent constamment. Si cela dure longtemps, nous
aurons un problème. Tout va
commencer à prendre du retard parce que ces acteurs continuent à
jouer pour toujours, comme si rien ne les arrêtait. Ce que nous allons faire, c'est leur
fixer une durée de vie. Un moyen simple serait
de retarder le début du jeu. Disons un délai de 15
secondes et détruisons l'acteur. Nous savons que les balles sortent 15 secondes, puis
elles sont détruites. Il existe une autre façon de
faire exactement la même chose. Si nous optons pour les valeurs par défaut du cluster
et que nous recherchons la vie, nous avons une durée de vie initiale Comme indiqué dans l'infobulle, il s'agit de la durée de vie de l'
acteur avant de mourir. Zéro, c'est pour toujours. Réglons ça 2
secondes, peut-être cinq. Faisons de même pour
la balle du joueur. Passons à la vie des sondages
et fixons-le à cinq. Compilez et enregistrez.
Maintenant, nos balles dureront 5 secondes et elles se
détruiront d'elles-mêmes. Dans un jeu plutôt prêt à l'emploi, vous créeriez
un système de traction lequel vous faites apparaître
les balles au début
du
niveau, puis vous réutilisez un certain nombre de
balles. Au lieu de détruire les acteurs, vous les cachez
et vous les
renvoyez quelque part dans le vide Poursuivons
notre événement maintenant que nous
avons tout terminé. Nous avons notre
événement de vitesse et nous avons la partie des dégâts,
qui laisse un certain temps. Maintenant, nous allons avoir besoin d' une séquence parce que nous
allons filmer à
partir de trois points. Il pourrait y avoir un moyen de
le faire avec un tableau, mais nous avons certaines règles pour le point numéro un et
le point numéro deux. Cela rendrait les
choses un peu plus complexes. Peut-être que pour certaines personnes,
il est plus facile de déboguer. Je préfère que les choses soient un
peu plus étendues visuellement, mais comme tout doit être compressé
en même temps, nous n'avons pas un
graphique infini. Nous allons créer
une fonction et appeler ce shot bullet
pour cette fonction. Nous allons créer des acteurs,
faire venir des acteurs dans le
monde que nous sommes en train de créer. De plus, je vais
sélectionner la balle ennemie, voici pour la transformation. Je vais partager ça. En fait, ce que je vais faire c'est chanter ici, me munir d'une muselière et me faire
une idée de la position
mondiale Et connectez ceci
à la cible. Je vais l'apporter comme épingle de
saisie sur la fonction. Je vais supprimer la muselière. Nous avons maintenant le même événement
marqué par une balle. Donc, on a
besoin d'une direction. Maintenant, nous n'avons pas de cible. Nous n'avons aucun objectif. Il est maintenant plus facile de
trouver la direction car la seule cible que
nous avons est le joueur. Je vais utiliser le point, regarder la rotation, nous connaissons
la position du joueur. Mais parce que nous voulons tirer non pas directement sur le joueur uniquement, mais autour de lui. Je vais également apporter
ceci en tant que contribution. Je vais donner un nom à cette cible. En fait, je vais
nommer la première cible et
celle-ci. Je vais maintenant
sélectionner cette cible. Connectez-le à la
cible pour commencer. Ce sera le mot « emplacement » du composant de
scène. Nous allons fixer
le composant du museau. Maintenant, après un
examen approfondi de la rotation, je vais passer
directement à cette étape. Et je vais le connecter à
la direction pour laquelle ce
serait une fonction. Revenons donc au graphique
maintenant. La première est facile. Je vais apporter
la grenaille,
disons la muselière Lequel est celui du milieu ? Oui, ça a
un peu changé parce que
j'ai changé d'acteur. Remettons-les en place, cela prouve
que cela aurait
dû être transmis au corps Et ne pas être libre comme
ça dans le plan. Vous pouvez les élever dans
le corps si vous le souhaitez. Si tu es
content de leurs places. Je vais les laisser
comme ça, c'est bon. Celui du milieu est celui du museau. Je vais me connecter à partir de
Muszzle 1 que serait la cible. Jouons sur localisation de
l'acteur et
connectons-le ici. Cela projette une balle
du milieu vers nous.
Créons le second. Je vais le copier-coller. La seule chose que nous
devrions changer, c'est que nous devrions tirer de cela, cela s'appelle Random Point. Dans une boîte de sélection, nous créons
une boîte autour du joueur, disons que nous marquons un point
autour du joueur En gros, nous fabriquons une boîte de 500 500. Je pense que
ce serait suffisant. Je vais le connecter
à Target. Je vais changer la première
muselière en la muselière deux. Je vais le copier-coller. En fait, je n'en ai pas besoin. Si je le connecte ici, cela fonctionnera deux fois et
donnera une valeur. Chaque fois que cela est demandé, cela donne une valeur différente. Si nous voulions que cela donne
la même valeur aux deux, nous aurions dû passer
à une variable et utiliser cette variable sur
ces deux cibles. Parce que si nous le connectons,
cela donnera toujours
un montant différent. Maintenant, le museau deux doit être
supprimé de celui du bas. Et le museau trois doit être
ajouté à partir du museau deux.
À partir de la troisième bouche Maintenant, je vais vérifier, créer une autre sur la séquence. Et je vais
appeler un nœud de retard. Le délai doit être de 0,2, ça sonne bien. Et je vais, encore une fois, tout
cela va fonctionner simultanément. Dans 0,2 seconde, la prise de vue
recommencera Si la prise de vue en cours n'est pas maximale, elle en ajoutera une à
la prise de vue en cours. Tirez à nouveau jusqu'à ce
qu'il atteigne des tirs. Lorsqu'il atteint les prises de vue, il met les prises en cours à zéro, sélectionne un
point de film, active
le mouvement et gère le reste. Je vais compiler,
enregistrer et tester. J'ai supprimé le délai depuis le
début afin que nous ne puissions pas tester. Allons chez l'ennemi. Mettons un délai ici, 30 secondes, 123 commencent à bouger. Ils tourneront tous
en même temps, ne sauront-ils pas à peu près au
même moment parce qu'ils se déplacent dans des lieux différents ou parce qu'ils ne vont pas
tirer du tout ? C'est également une option. Ils s'
éloignent vraiment de moi. Voyons pourquoi
cela se produit. Je vais aller voir les plans de
l'ennemi. Je vais sélectionner n'importe lequel d'entre eux. Peu importe. Il est en
train d'atteindre sa destination. Il n'atteint pas sa
destination. Il a dit qu'il avait tiré. Je pense que la raison
est très simple. Si nous passons à notre puce, nous n'avons pas sélectionné de maillage
statique ici. Je n'ai pas sélectionné
de mesure statique. Nous allons sélectionner une
mesure statique pour notre puce. Nous allons passer aux maillages et aux formes
statiques, et nous allons utiliser cette forme de
sphère ici Maintenant, c'est un
peu gros pour une balle. Nous le réduisons un peu. Je vais le
baisser un peu. Disons que la taille devrait
être au moins la moitié de cette taille, voire plus petite,
mais faisons-en la moitié et voyons comment cela
nous mènera. Pour le matériau. Nous devrions changer le matériau. Mais c'est le matériau est
ici un matériau. J'ai juste besoin de me rafraîchir. Passons aux matériaux
et sélectionnons-le. Mon ennemi Bullet Glow. Maintenant, nous devrions
pouvoir voir des balles. Je pense que 123 Tous les
ennemis bougent. Devraient-ils ne pas encore avoir
atteint leur position. Ils avancent un
peu lentement dans cette situation. Ils sont si loin. On a tiré, on
est en train de mourir. Ouais. Peut-être que nous pouvons réduire un
peu la distance parce que c'
est un peu loin. Je pense que si je me
rapproche d'eux, disperse vraiment après
qu'ils aient tiré, celui-ci m'a tiré dessus. Je pense que même si nous arrivons à zéro, nous n'avons aucun
programme sur la mort. Peu importe si je me fais tirer dessus. Oui, ça passe en dessous de zéro, donc ça ne se met même pas à jour. Je suis probablement déjà mort. Oui, ils sont un peu
loin. Réglons ça. Passons à l'ennemi où nous sélectionnons
le mouvement ici. Abaissons les 1 000 à
1 500 C'est peut-être peu. Faisons en 2000. Vérifions-le encore une fois. C'est un peu trop près. Tu n'auras pas le temps
d'y échapper. Portons-le à 5 000 8 000 8 500 Je pense que
cela suffirait Je pense que c'est tout pour celui-ci. Je te verrai
dans le prochain. Au revoir.
27. Mécanique de reproduction des ennemis: Bonjour et bienvenue sur a
Engine Five Blueprint. étape par étape d'un jeu de tir spatial Développement étape par étape d'un jeu de tir spatial sur le précédent. Et elle a été longue.
Je ne vais pas mentir. Nous avons terminé de tirer sur notre ennemi. Supprimons maintenant
ces ennemis. Et j'ai supprimé la sphère céleste. Supprimons ces ennemis. Aucun autre ? Commençons par notre système de
reproduction. Allons à notre vaisseau spatial. Passons au graphique des événements. Allons dans une nouvelle zone. En fait, nous avons besoin de minuteries parce que nous allons les
avoir sur une minuterie Créons un événement chronomètre. Réglez le chronomètre par événement. Maintenant, ce ne sera pas un chronomètre comme celui-ci. Ce chronomètre, nous
allons l'appeler en interne, il fonctionnera tout seul. Pourquoi allons-nous
le faire ? Parce que nous voulons une heure aléatoire. Je vais faire une plage de blocage
aléatoire. Je vais sélectionner 2 secondes
et disons 6 secondes. Entre 2 secondes et 6 secondes, ce chronomètre se déclenchera tout seul. Je vais maintenant créer un événement personnalisé et
appeler ce span. Ou à partir de là, je vais
refaire une séquence. Maintenant, nous devons
appeler ce chronomètre. Je vais donc créer
un autre événement client
et l' appeler spawn way Je vais le connecter ici.
En fait, ce minuteur
ne devrait pas être connecté
aux minuteries car il
n'a pas besoin d'être activé Il suffit de l'appeler une fois. Je vais l'
avoir séparément ici. Il n'a pas besoin de s'exécuter
car s'il fonctionne avec cela, il commencera à
apparaître immédiatement Nous devrions peut-être mettre un délai
entre le moment où nous voulons apparaître et le début du jeu
et le début du jeu Nous allons probablement être retardés. Pour cela, je vais
ajouter une autre branche. Et voilà, on passe au retard. Disons que le délai
sera de 3 secondes. Le joueur se familiarise, les commandes
lui
seront données pendant 4 secondes. Ensuite, nous allons passer
à Spa Spawn Wave. Cela démarrera cette minuterie
interne. La première chose que nous
allons encore économiser. Lorsque le chronomètre fait apparaître un ennemi, il recommence à faire apparaître un autre ennemi en 2 Nous allons maintenant
créer des compteurs. Encore une fois, je vais créer une branche et
ajouter deux variables. Appelons le premier.
En fait, nous allons
passer au niveau
1. Il est plus probable que le courant soit de type entier un, ce sera également
un entier. Je vais comparer
cela à s'ils sont égaux S'ils sont égaux,
ne faites rien. Cependant, s'ils ne sont pas égaux, nous allons faire apparaître l'
acteur de la classe Nous allons sélectionner notre ennemi du
boom à transformer. Je vais partager ça. Je vais trouver la position de l'acteur, obtenir un vecteur unitaire aléatoire. Multipliez cela par une portée que je veux faire
apparaître à nos ennemis. Ce serait,
disons, peut-être trop. 25 000 à 25 000 sons de porc. Et je vais ajouter les deux. Je vais le configurer
pour générer une transformation. Maintenant, ce que nous avons fait
encore une fois, c'est
obtenir notre position, obtenir notre direction aléatoire depuis notre position
avec cette année plus. Et multipliez
en fait, plus année, ce qui est complètement faux. Nous voulions multiplier par un entier et relier cela Ici, nous multiplions la portée par rapport à une direction et, en fonction de
cet emplacement dans le monde, nous créons un ennemi Maintenant, quelle est la nouvelle partie ici ? nouveau, c'est
que nous allons nous
lier à la mort, à la destruction. Lorsque cet acteur est
détruit, on assiste à nouveau à un
événement que nous
imposons mais qui est
général pour les acteurs. Ce n'est pas que nous ayons
une fonction qui consiste à détruire
l'acteur. Nous allons à un événement personnalisé. Nous allons dire ceci,
c'est le niveau 1 de la mort. Maintenant, au niveau 1 de la mort, réglez notre
ennemi actuel à moins un. Nous pouvons faire de la place
quand c'est un maximum,
T moins un, nous pouvons faire
réapparaître des ennemis. La prochaine chose que nous devons
faire, c'est qu'après le blocage, nous devrions faire le
contraire. vais connecter ceci
ici moins et je vais faire plus un. nous sommes contraignants en cas de décès, lorsque
cela nous lie, nous en
réduisons un, le décompte. Ensuite, nous augmentons
le nombre d'une unité. Maintenant, si nous voulions être
un peu plus malins, nous pourrions ajouter une
vague d'apparition instantanée lorsqu'un ennemi meurt Si nous l'ajoutons ici, cela déclenchera instantanément le chronomètre d'apparition d'une vague de
scie,
par exemple, dès qu'un ennemi meurt, il se
recréera lui-même Nous n'allons pas le faire
car le jeu pourrait être un
peu plus difficile de cette façon. Nous allons déplacer cela
un peu plus haut. Nous allons copier-coller
ce code exactement de la même manière. Nous allons le
connecter ici. Au lieu du courant ennemi de niveau
1, nous allons promouvoir
cette variable, courant ennemi de
niveau 2. Nous allons
également
promouvoir cette variable pour les ennemis de niveau 2 maximum. Nous allons
supprimer ces deux ennemis et cliquer
avec le bouton droit de la souris pour remplacer l'ennemi
variable l'ennemi
variable de niveau 1 par le niveau 2
actuel et le maximum. Remplacez-le également
par le niveau deux maximum. Cela restera le même, la classe deviendra
un jeu de tir. Nous devons refaire cette impasse
mortelle de niveau 2. Nous allons également remplacer ces
variables par le niveau 2 actuel, le niveau 2 actuel, et aussi les deux variables sur
lesquelles vous avez cliqué du mauvais côté Ceci complète notre système de
reproduction. Maintenant, allons le tester.
Appuyons sur Play. Commencez dans 3 secondes. Nous devrions voir des acteurs apparaître
ici, ce qui n'est pas le cas. Allons voir pourquoi. Une vague. C'est très simple car nous
n'avons pas défini de valeurs par défaut. Fixons le nombre maximum d'ennemis à dix, et au niveau deux, le nombre maximum d'
ennemis également à dix. Compilez et enregistrez. Recommencez. Des ennemis apparaissent.
Je ne vois pas où, mais je peux voir les cors. Oh, ça y est. Je pense
que oui, c'est un ennemi. Nous l'avons détruit. C'est
un autre ennemi. Beaucoup de HP. Peut-être qu'il bougeait et que je
n'arrivais pas à le toucher aussi bien. En fait, comment nous attribuons des
PV au tireur ennemi. Allons voir le tireur ennemi et vérifions le BPC Damageable Nous en avons huit, c'est
une valeur par défaut. Il est en bonne santé.
Oui, ça marche. Nous avons un système. Voyons s'il faut recruter
le bon nombre d'acteurs. Nous en avons 15. Il devrait passer à 35 sans que les
ennemis ne tirent. S'ils commencent à tirer,
ils iront plus loin. Mais il y a toujours
un autre moyen de le tester, car nous ne
détruisons aucun ennemi. Nous pourrions appuyer pour éjecter. Nous pourrions consulter la liste
ici et dire dix acteurs. On pourrait dire dix acteurs. Il y a un acteur ici. C'est sur les racines. Oui. Les acteurs sont
un peu plus petits et il
nous manque plein de balles Rendons les acteurs
un peu plus grands. Je vais aller dans
le système de spawn et sélectionner l'échelle 333 Pareil pour l'autre, peut-être que le spawn est un
peu trop loin. Je vais le faire, peut-être
15 000, c'est un peu plus. Action : la
règle des trois secondes agit. Ils sont plus grands, on peut les
photographier facilement, non ? Il s'agit en fait de
détecter nos balles, ce qui n'est pas un gros problème pour résoudre un tel type
d'erreur, nous allons juste en
faire une qui soit valide ici Je pense que cela va régler
le problème. L'acteur est-il valide ? Parce que, comme le
décrivait l'erreur que nous décrivons, elle était en attente d'
élimination ou elle était nulle. Il a donc été détruit.
Mais pour une raison ou une autre , cela nécessitait un événement. Il a demandé un événement, un événement de collision, la mort d'
ennemis, la mort d'ennemis. Voyons voir, pas d'erreur. Je pense que c'est bon. Je pense que c'est tout pour celui-ci. Je te
verrai le prochain. Au revoir.
28. Mettre en œuvre un score et la mort d'un ennemi: Bonjour et bienvenue sur Unreal
Engine Five Blueprint, développement étape par étape d'un jeu de
tir spatial Dans la
leçon précédente, nous avons créé un système d'apparition et nous tirons
sur les joueurs. Pas des joueurs. Nous, les PNJ, ils
ripostent. C'est qu'il n'y a pas d'autre point. Créons un point. Ce que nous allons
créer, c'est un système de points. Passons au joueur maintenant. Puisque nous y avons accès
lorsqu'un ennemi meurt, nous devrions créer une
fonction pour ajouter des points. Je vais appuyer sur le signe
plus pour les fonctions, et nous allons faire en sorte qu'
une fonction ajoute des points. Pour cela, nous aurons
besoin d'une nouvelle variable. Créons une nouvelle variable
et appelons-la points. Nous allons définir
ces points ici. Nous allons ajouter
les points actuels, qui sont en fait des
points vers une variable. Cette variable doit
venir de l'extérieur car chaque ennemi a ses propres points. Appelons également ces points
variables dans les points entrants. Nous avons besoin d'un moyen de démontrer
ces points à notre joueur. Nous allons passer à notre widget. Nous allons ajouter notre
variable de texte sur le canevas. Réglons sa position dans
le coin supérieur droit. Réglons la position x.
Agrandissons-la un
peu. En fait, fixons-le
ici à 120. Ça a l'air bien. 50, 50 pourrait être une bonne option
pour la position x. Déplaçons-le vers,
ça a l'air bien. Moins 150 sur le y 50 pour le texte. Mettons-le à zéro. Pour l'instant, nous allons faire une
justification au centre. Voyons à quoi ça ressemble. Et s'il s'agit de
123 chiffres à trois chiffres ? Oui, ça a l'air bien. Ça a l'air d'aller bien.
Définissons maintenant cette variable, nommons les points de
soulignement de ce texte Passons à notre graphique et créons une nouvelle fonction
variable
et appelons-la points de réglage. Dans cette fonction,
nous allons obtenir notre variable de texte et définir le texte. Connectez ceci ici
et dans le texte, nous allons le
connecter ici. Cela met à jour
nos points, notre santé comme objectif
et tout ça. Passons maintenant à notre plan de
jeu,
à notre gameplay sur Widgit
et à nos points de set Nous allons connecter
cela d'ici à ici. Chaque point que nous obtenons
met à jour notre score. Maintenant, comment obtenons-nous
les points entrants ? Allons-y, bordel. Nous avons une référence à
l'acteur détruit, mais nous ne savons pas de quel
acteur il s'agit. Que faisons-nous si nous ne savons pas exactement
qui est cet acteur ? Nous avons indiqué que nous avions des moyens de
communiquer des messages qui ne
sont pas spécifiques à un acteur Ce que nous allons utiliser,
c'est une interface de plan. Nous allons utiliser celui
que nous avons actuellement. Nous allons entrer ici
et créer une nouvelle fonction. Et nous allons appeler cette
fonction « request hot ». Nous allons donner une
sortie, la
rendre entière et
appeler ces points. Maintenant, nous allons
compiler et enregistrer, et passer à notre parent,
ennemi, ennemi, parent. Nous allons passer aux interfaces, vous voyez qu'elles contiennent les
points de requête que nous venons de créer, mais leur
couleur est différente de celle-ci. Cela est dû au fait qu'il s'agit d'une
fonction avec une sortie. Si j'en prends deux fois la grippe, on obtient cette fonction. Je vais connecter les points ici et c'est fait.
Compilez et enregistrez. Retournez au joueur Spaceship Bind Death Points pour obtenir des points J'ai juste oublié comment on l'a appelé. Quels sont les points de demande BI ? Je demande les points. Combien de points
cela me rapporte-t-il ? Je vais appeler notre service des
points publicitaires par la suite. Je vais relier
ces points ici. Comme vous pouvez le constater, il y a une différence. La cible ici est l'acteur
détruit. Parce que nous
demandons des points à l'acteur détruit, comme l'a fait un objectif de
points. Je vais compiler et enregistrer. Voyons cela dans le travail. Trouvons un ennemi. J'
aurais dû supprimer le zéro, les zéros supplémentaires, car pour
le moment cela ne dit rien Il devrait en dire un. Nous ne l'avons pas fait pour le
deuxième ennemi. C'est pourquoi. Copiez-collez ceci ici. Connecter ce clic par accident. Connectez-le ici, plus
bas, compilez, sauvegardez, jouez. En fait, avant de
jouer, supprimons également les zéros supplémentaires sur le widget Lorsque vous en avez 10, cela
devient un pour atteindre
00h01 .
Certaines règles régissent l'ajout de
zéros supplémentaires Ajoutez la manipulation d'
un nœud de variable de chaîne. Je tue des ennemis, je
vais marquer des points. Le score fonctionne bien. Nous avons un score.
Nous avons maintenant un moyen de nous dire combien d'ennemis nous
avons tués, par exemple. Nous pouvons utiliser notre système de génération et dire que lorsque notre point, Let's get points, est
supérieur à huit, branchez ici, connectez-le ici Si cela n'est vrai que dans ce cas, alors
seulement, faites apparaître instantanément le niveau
à l'ennemi Sur la base de nos points, nous
avons un mécanisme d'
apparition plus intéressant Et si nous faisions de
même pour nos armes ? Nous avons fait de même pour les mises à niveau. Je pense que nous devrions nous arrêter
là pour le prochain. Nous devrions créer un
système pour de nouvelles armes. Au revoir.
29. Introduction du système de missile: Bonjour et bienvenue
sur Unreal Engine Five. Développement étape par étape du jeu Space
Shooter. Dans la leçon précédente,
nous avons terminé avec notre système de notation et nous avons parlé de la création
d'un système de mise à niveau. Mais en fait, avant de
passer au système de mise à niveau, nous devrions créer notre
arme finale, le missile. sera une arme un peu avancée
car ce sera un missile autodirecteur.
Permettez-moi de le supprimer. Parlons un
peu du missile autodirecteur. Il sera composé d' un maillage statique qui
représentera notre missile et d'une particule qui
représentera la
fumée du missile. Maintenant, en plus de cela, nous
allons avoir une collision. Faisons-le tourner
autour du missile. Lorsque le missile explose, tout ennemi pris dans
le cercle meurt. Nous aurons un deuxième cercle. Peut-être que ce
n'est pas une bonne représentation
d'un dessin, n'est-ce pas maintenant ? Mais de toute façon, ça ira. Nous aurons un deuxième cercle, beaucoup plus grand en fait, que nous utiliserons pour indiquer au missile si un ennemi
se trouve à l'intérieur de ce cercle. Si vous ne vous êtes pas disputé, alors allez-y, c'est votre cible. En fait, faites-en une cible. C'est une cible de toute façon. Si le missile n'a pas de cible à cause du autoguidage, en fait, j'aurais peut-être dû
commencer par ça Lorsque le joueur tire, le missile acquiert une cible si nous en
avons sur la lunette. Si nous n'avons
rien sur la lunette, elle n'aura pas de cible. S'il se déplace,
le deuxième cercle détectera la présence d'une cible à proximité. En gros, ce serait ça. Allons le faire. Nous
allons suivre des plans Pour écrire,
cliquez sur Créer un acteur de type bleu en classe appelez-le missile BP et ouvrez-le. Commençons à construire.
Je vais appuyer sur Ajouter. Je vais ajouter, pousser pour un maillage statique. Je vais utiliser Tilt. Je vais utiliser le tube profilé. Je pense que l'avant est le
x. Ajoutons une flèche. Oui, l'avant X. Je
vais le faire pivoter. Il n'a pas de cône,
mais la livraison de
la charge utile n'a pas vraiment d'importance livraison de
la charge utile n'a pas vraiment d' Je vais aussi supprimer la parentalité de la flèche, pour réinitialiser sa
rotation sur la route Je vais ajouter un composant de
particules Niagara à ce système. Nous allons utiliser
la piste des missiles. Je vais le redéplacer ici. Je pense que c'est centré,
ça a l'air bien. Nous avons maintenant le visuel de nos missiles. La prochaine chose que je vais
ajouter est un composant sphérique. Composant Sphère.
Collision de sphères. C'est quelque chose que je n'ai pas
dit dans la peinture. Nous allons avoir
cette collision
devant pour vérifier si nous avons chauffé
quelque chose que nous voulons faire la collision
se chevauche sur le maillage. Nous allons venir de
la sphère d'en face. C'est une autre façon d'
obtenir des chaleurs dues à une collision. Sans utiliser le maillage, je vais créer la
sphère à partir de l'Aga. Je dois cliquer sur Par défaut
avant d'ajouter quelque chose. Parce que si j'ai
cliqué sur autre chose, cela l'ajoute comme dans la hiérarchie Cela fait de
celui sur lequel vous avez cliqué le parent. Je vais cliquer sur Par défaut. Et je vais en fait, je vais copier-coller
cette sphère, ajouter quelque chose. Je vais réinitialiser son emplacement, peut-être un peu plus haut. C'est très bien. Je vais monter en gamme, en fait.
Je ne vais pas le redimensionner. Je vais étendre
le rayon à 5 000. Ce sera la sphère qui détectera
notre système de guidage Et je vais donner un
nom à cette collision. Je vais copier-coller
la première sphère, encore une fois zéro, les
appels x au centre. Et je vais
changer son rayon à 3 000. Peut-être que c'est
un peu grand. C'est bon, c'est trop gros pour 2000. C'est ainsi que ce sera la sphère qui tuera tous les
ennemis aux alentours. Encore une fois, c'est peut-être un
peu trop grand, mais le monde est vaste. Nous devrions vérifier que
les collisions sur
les sphères recoupent la
dynamique du monde. Personnalisons-le,
rendons-le statique sur le mur
et superposons-le. Et faites la même chose ici sur un mur personnalisé statique,
superposez tout. Aucune
compilation par collision physique. Même. Passons en fait à
un autre composant. Nous allons ajouter un
mouvement de projectile parce que nous voulons ce missile se déplace ou qu'il désactive
la gravité Pas à cause du
maillage statique, je suis désolée, mais à cause du composé
composant le projectile Enregistrer. Passons au graphique des pairs. Commençons par créer
une fonction permettant de tuer
tous les ennemis qui se trouvent à l'intérieur du. Appelons cette sphère
la zone endommagée. Je vais appeler cette
fonction Damage area. Non, appliquez beaucoup. Je vais obtenir une grande surface. Je vais faire en sorte que tous les acteurs
se chevauchent. Maintenant, ce nœud regroupe
tous les acteurs qui se trouvent
à l'intérieur de cette sphère. Nous pouvons le filtrer par classe, mais les classes ne nous intéressent pas. Nous voulons tout ce
qu'il y a à l'intérieur. À partir de cette liste, nous
allons monter à bord, rechercher chaque boucle et la
connecter ici. Cela est renvoyé sous forme de référence à un objet
acteur. Et nous allons demander si cet
acteur a un tag qui l'était. Passons à Parent-Enemy. Trouve ça, voici un
parent ennemi. C'est ici. Par défaut, le tag était ennemi
avec une majuscule E. Rappelez-vous que
cela distingue les majuscules et minuscules Revenons à notre
missile et tapons ceci. Ici, nous allons nous installer ici, nous allons poser une question. Si l'acteur a un ennemi, nous allons en
appliquer une grande partie. Je n'aurais peut-être pas dû parler
de cette fonction, des dégâts
infligés.
Appliquez des dégâts AOE. Connectons l'élément
pour l'endommager. Donc, si l'acteur a un ennemi, nous lui
infligeons des dégâts. Après avoir
infligé des dégâts, nous devons détruire. Mais faisons une véritable
explosion visuelle. Ici. Faisons apparaître un
compteur sur place Parce qu'un missile n'
explose pas, n'est-ce pas amusant ? Je vais utiliser l'
explosion comme balance. Mettons 2010 20, je
pense que ce sera bien. Emplacement. Nous allons déterminer la position Maintenant,
revenons au graphique pair. La prochaine chose à
faire est de passer au mouvement de nos
projectiles Dans le mouvement des projectiles,
il existe certaines options. L'option que nous voulons
est de nous diriger
ici, que nous soyons, que le
projectile soit dirigé ou non. C'est ce que nous voulons définir au moment de l'exécution. Il possède des propriétés supplémentaires telles que le guidage, l'
accélération, la magnitude Mais comme le dit l'info-bulle, cela est limité par la vitesse maximale, qui est définie ici. Maintenant, la vitesse et la vélocité
sont deux choses différentes. Ils sont tous deux utilisés pour
décrire la cinématique. Mais la vitesse fait référence à un changement de distance d'un objet
par rapport au temps, tandis que la vitesse fait référence
à un changement
de déplacement de l'objet par
rapport au temps. Bref, détails, je pense que c'est tout pour
celui-ci et nous allons définir ces
paraboles pour le suivant et faire fonctionner ce
système, d'accord ? Au revoir.
30. Mécanique des missiles de recherche: Bonjour et bienvenue dans le développement étape
par étape du
jeu de tir spatial Unreal
Engine Five par étape du
jeu de tir spatial Dans le dernier, nous avons terminé la configuration de notre missile. Nous avons créé des collisions pour détecter les autorepères ou
pour endommager une zone Nous avons ajouté le mouvement du
projectile. Nous avons également créé une
fonction qui endommage tout ce qui se trouve
à l'intérieur de la zone endommagée. Réglons maintenant les détails
de notre projectile. Nous allons sélectionner le mouvement
du projectile. Nous utiliserons 20 000 pour la vitesse
initiale et
également pour la vitesse maximale. Maintenant, en dessous, il y a
cette catégorie de homing. Il a la capacité de cocher. Ce lingot qui,
selon elle, se dirige ou
non en dessous de lui correspond à l'amplitude de l'accélération du repérage. Cela signifie, par
exemple, la
rapidité avec laquelle nous nous tournons, en termes déplorables vers l'objectif que
nous nous sommes fixé, un autoguidage Maintenant, pour que le guidage fonctionne, nous devons également avoir une cible
que nous définissons en utilisant le mouvement du projectile
et une cible définie Maintenant, avant de définir l'objectif, mettons également 20 000 points sur
l'amplitude de l'accélération ici. Mais nous n'allons pas prendre ça à partir de maintenant. Dès le début, nous allons créer une fonction qui permettra
cela. Sélectionnons ces deux options,
créons une fonction,
nommons cet ensemble homing. Entrons maintenant dans cette fonction.
Avant de régler le guidage, nous devons régler la vélocité à zéro, quelle que soit la vitesse demandée par le
projectile Cela commence par le homing. Puisque notre
magnitude est de 2000, il essaiera instantanément d'atteindre notre cible et d'acquérir
la vitesse maximale. Maintenant, la prochaine chose que
nous devons faire est que le set set soit le projet homing C'est là que nous prenons lingot
que nous avons
trouvé dans les paramètres catégorie « homing projectile » C'est ainsi que nous l'activons
car nous voulons qu'il soit désactivé par
défaut. Si nous voulons être désactivés par
défaut, c'est parce que lorsque nous n'avons pas de cible, le missile doit fonctionner directement jusqu'à ce que quelque chose entre en collision avec le détecteur et
qu'il atteigne ensuite une cible Rendons ça un
peu plus joli. Connectez-le comme ici, et je vais le mettre ici. Oui, c'est bon. Composant cible de repérage. Maintenant, c'est une
question intéressante car si nous passons la souris au-dessus, nous verrons qu'elle nécessite
un composant, un objet faible. Il existe de nombreuses définitions à ce
sujet, de ce que signifie un
objet faible et tout le reste. Mais restons sur le composant, il en faut un. Ce que nous avons sur notre joueur
lorsque nous ciblons quelque chose, c'est une référence à un acteur. Nous avons cet acteur cible,
nous n'avons pas de composant. Mais créons cette référence d'
acteur sans la renseigner ici
sur le missile Plan pour créer
une nouvelle variable. Nous allons l'appeler Target. Je vais sélectionner le
type d'acteur parmi les acteurs. Ce sera notre
référence pour le moment, c'est vide, mais nous le
remplirons bientôt Mais peu importe qu'
il soit vide ou non. Comme pour les événements contraignants, nous pouvons faire certaines
choses aux acteurs qui s'appliquent
à tous les acteurs. L'une des choses est
composante par classe. Nous pouvons spécifier ici la
classe qui sera considérée comme un composant. Maintenant, nous pouvons nous connecter ici. Comme vous pouvez le constater, il
fonctionne correctement. Mais si je choisis try, il ne le veut pas
car cela indique que la référence à un objet
acteur n'est pas compatible avec les composants sin. Nous savons maintenant que nos acteurs ont un composant syn
parce que notre parent,
ennemi, oui, parent, a cette
racine vue par défaut, car de nombreux
plans ont des racines par défaut comme Maintenant, nous pouvons toujours annuler cela, mais encore une fois, la plupart du temps,
il aura un composant racine Nous pouvons maintenant voir que cette valeur de
retour, telle qu'elle est indiquée recherche le
tableau de composants et renvoie premier composant rencontré dans
la classe spécifique. Habituellement, le premier
est toujours un composant, la racine est un composant. Compilons et sauvegardons. Cela fixerait
notre objectif de repérage. Avant de partir, nous devons
expliquer qu'il existe un certain problème avec cibles de
guidage utilisant le composant de cible
de guidage Si notre missile est suffisamment rapide et disons que c'
est notre cible, il est toujours possible que le missile
se déplace
ainsi et veuille
atteindre sa cible. Qu'il va si vite qu'
il n'atteint pas sa cible. Et essaie de revenir et de rentrer n'atteint pas la
cible et continue de tourner presque en orbite autour de la cible jamais vraiment l'
atteindre. Pour éviter cela, lorsque
nous ciblons quelque chose, nous créerons un système
distinct pour le missile
atteigne directement cette cible. Lorsqu'il détecte une cible, il utilise ce système de
guidage pour le faire Nous allons passer au graphique des événements. Nous allons cocher un événement, créer une branche, rendre la condition négative, promouvoir au rang de variable
et l'appeler tempête. Maintenant, nous allons
effectuer un mouvement avec emplacement
défini pour l'emplacement. Nous le ferons en permanence avec une vitesse de
50 000 dans ce cas, je pense que 50 000 dans ce cas parce que c'est basé sur le
delta, ce serait mieux. La cible serait notre variable
cible pour laquelle nous obtiendrons l'emplacement. Notre emplacement actuel sera celui
de l'acteur. L'emplacement des acteurs est
compilé et enregistré. Maintenant, juste au cas où
notre cible serait morte, nous allons vérifier
si c'est valide, si l'acteur est valide. Parce que si l'acteur n'
est pas valide, cela signifie probablement qu'ils
ont été détruits. Maintenant, si ce n'est pas valide, nous allons le faire, une fois que le guidage personnalisé, nous allons activer le
détecteur de collision, car nous allons le désactiver
lorsque nous aurons une cible La façon dont nous allons
le désactiver ne générera
pas d'événements de
chevauchement. Alors que maintenant, si nous n'avons pas de cible, allez en chercher une. En gros,
créons cette partie laquelle, lorsque quelque chose
entre dans la sphère, nous définissons la cible
qu'il dirige vers
cette cible au début du chevauchement de la collision avec le
détecteur de autoguidage Nous allons poser une question : est-ce que l'acteur a
le tag ennemi ? Un ennemi était orthographié
avec un E majuscule. Si c'est le cas, nous devrions vérifier. En fait, nous pouvons poser la question
une fois s'il s'agit déjà d'un autoguidage. S'il s'agit d'un homing personnalisé, si nous avions la cible
dès le début, si nous avions la cible
dès le début,
nous ne devrions pas en trouver de nouvelle, puisque nous allons passer à la cible
personnalisée, pour être honnête Nous devrions créer
un événement personnalisé, appelé
collision, et
appeler cet événement ici. Donc, si nous avons une cible, sera réexécutée car nous allons
créer un événement personnalisé ici, Réinitialiser la recherche ou la cible. Si nous trouvons une nouvelle cible, nous appelons reset search ou target. Si cette cible que nous avons acquise
ici est également détruite, la recherche sera réinitialisée. Maintenant, la prochaine chose que nous devons faire est de définir
notre objectif de repérage Nous allons fixer notre
objectif à cet acteur. Faisons en sorte que certains nœuds rouges se connectent comme ça
et ça aura une meilleure apparence. Et après avoir défini l'objectif, nous devrions définir le repérage, non ? Allons-y une seconde à
l'intérieur et infligeons des dégâts AOE. Il y a un set home ici. Pour une raison ou une autre, je
vais le supprimer. C'est cette dernière partie que nous faisons exploser la particule
et la détruisons Il se peut que nous en ayons encore besoin. Faisons-en une fonction qui deviendra une fonction
de réduction. Appelez cette fonction.
Notre missile a maintenant une cible que nous pouvons
définir de l'extérieur. Ou il peut acquérir une cible
qui l'atteint lorsqu'il voyage. Et il est doté d'un système de
détection de collision par autoguidage. La cible entre en collision avec un
autoguidage. Je pense que c'est un bon point
d'arrêt ici. Dans la prochaine, nous
allons terminer ce qui se passe lorsque nous
atteignons réellement la cible. Et nous allons envoyer
les informations
au missile
lancé par notre joueur, afin qu'il puisse rechercher une cible ou décider qu'il a
déjà une cible. Au revoir.
31. Finaliser l'intégration des missiles et des joueurs: Bonjour et bienvenue sur
Engine Five Blueprints. Développement étape par étape d'un jeu de
tir spatial. Dans la leçon précédente, nous avons terminé notre mécanique de guidage Si nous avons une
mécanique de cible dès le début que nous
réinitialisons au cas où
cette cible mourrait, nous réinitialisons la détection du
guidage Et lorsque la détection du guidage
entre en collision avec un objet, nous le définissons comme cible Et nous activons le mécanisme
de guidage hérité du
mouvement des
projectiles Créons maintenant le mécanisme. Nous sommes le missile
du joueur. Je vais le supprimer. Je vais créer un événement
personnalisé et l'appeler ainsi, je pense que c'est l'orthographe. Je peux vérifier ça. C'est ça de toute façon. Missile de lancement de missiles. Nous allons avoir besoin de
deux contributions ici. Le premier
serait notre vitesse vers l'endroit, juste au cas où
nous n'aurions pas de cible. Le second serait la cible. Je vais nommer cette cible. Ce sera du type, la
référence de l'objet de référence. Nous allons maintenant promouvoir cette variable O, en fait. Je vais l'appeler
Target Velocity. Et je vais en faire la promotion. En fait, je n'ai pas
besoin d'en faire la promotion, nous avons déjà un objectif. Je vais
régler ça ici. Maintenant, encore une fois, je vais
demander si c'est valide. La prochaine chose à
faire est de dire
au missile que faire est de dire
au missile si vous entrez en collision avec
quelque chose, vous explosez Nous allons utiliser
la sphère que nous n'avons pas nommée. Je vais appeler cela une détection
d'explosion. Je ne sais pas, des missiles. C'est quelque chose comme impact us, quelque chose comme
ça, ça s'appelle. Quoi qu'il en soit, nous allons utiliser des détections d' explosion, de début de
collision, Nous allons demander si l'
autre acteur a le tag ennemi. Si l'acteur a l'
autre tag ennemi, alors nous le ferons une fois
sans réinitialiser celui-ci Nous allons
appeler notre fonction, infliger des dégâts de zone d'attaque, cela
provoquera notre mort Maintenant compilons et sauvegardons. Je pense que nous en avons terminé
avec ce plan. Passons maintenant à notre vaisseau de joueurs. Parce qu'avec un graphique, passons aux entrées. Parce que pour tirer
le missile, nous avons besoin une nouvelle entrée ou d'une entrée. Nous allons utiliser la souris, le bouton
droit, le bouton droit, le bouton
droit de la souris. Il
va nous falloir de l'espace supplémentaire. Je vais augmenter le commentaire. Je vais l'apporter ici. Lorsque nous appuyons,
nous utilisons une succursale pour poser une question. Nous allons désactiver la condition et la
transformer en variable. Nous allons nommer cette
variable « missile ». Maintenant, si nous avons un missile, nous devons d'abord dire que nous n'en avons plus
parce que nous le tirons. Ensuite, nous allons
reporter un pair
de classe , qui est notre missile parce que nous le faisons connaître
au monde,
nous réagissons
et, à juste titre, nous escroquons, le transformer et le
diviser pour l'endroit où
nous allons
utiliser le museau 1, cet emplacement
mondial Je vais le connecter ici
pour la classe, notre missile. Maintenant, une fois que nous aurons créé le missile, nous devrions le lancer en
tant que missile Pour la vélocité et l'acteur cible, nous allons utiliser l'acteur cible parmi nos variables
de tir. Pour la vitesse, nous avons une fonction appelée calcul de
direction. Nous allons utiliser cette
fonction pour la cible. Nous allons utiliser
la muselière. Il s'agit de la fonction
qui permet de compenser notre vélocité en fonction du canon que nous
photographions et non en fonction l'appareil photo après le
lancement du missile Sonnez Actually ou avant
et posez notre missile. Un son que je pense que
nous pouvons trouver. Des sons. Non, non, celui-ci qui
n'a pas de clé, nous allons l'utiliser aussi facilement que possible. Maintenant, après avoir
joué Sound, nous pouvons effectuer un delay, promouvoir cette variable. En fait, faites-en
un point pour les tests. Et faites la promotion de la variable
et dites « missile CD ». Ensuite, nous allons
régler son missile pour qu'il fonctionne. Encore une fois, nous pouvons maintenant
tester notre missile. Maintenant c'est un peu plus grand. Faites le commentaire
ici et c'est bon. Oui, compilez. Allons jouer. Ils tirent un missile. C'est une balle. Je n'ai pas
réglé le missile sur true. Réglons le missile sur
vrai. Nous avons un missile. Nous allons le
configurer par le biais de notre système de montée de niveau. Au cours de la leçon suivante, je suis
probablement en train de tirer un missile. Ça va complètement dans le
mauvais sens, d'accord ? Nous avons un ennemi dans les parages, mais le temps de refroidissement fonctionne
vraiment comme ça. Et le missile, je crois que j'ai
vu quelque chose de faux, d'accord. C'est pour les ennemis. La rotation est un
peu bizarre. Si j'ai une serrure,
elle s'enclenche directement et ne cause aucun
dommage. Probablement. Je n'ai pas défini de nombre de dégâts. Oui, allons voir ça. Passons aux missiles. Voyons la vitesse cible. Ici, j'ajoute, multiplions, cela devrait être un entier de
multiplication. Disons 20 K.
C'est pourquoi il
allait dans une
direction étrange, car nous augmentions
la vitesse cible. C'était donc et toujours une certaine direction
par rapport à nos dégâts. Nous avons l'application AOE. Oui, c'est zéro. Faisons en sorte que ce soit dix.
Compilez et enregistrez. Je pense que nous devrions y remédier. Oui,
mais pas la rotation. Mouvement du projectile. Nous avons une variable appelée la
rotation suit la vitesse. Nous allons l'utiliser
. Nous allons utiliser cette variable
et rejouer. Ouais. Il semble avoir la
bonne vélocité. Je vois que l'ennemi est passé à l'ennemi. Si je ne cible pas l'ennemi. Oui, ça va à l'ennemi. Génial. Ciblons-en
un directement. Il n'y a plus d'ennemis, alors voilà, directement. Louis
trouve ça génial. OK, je pense que c'
est tout pour celui-ci. Je te verrai la prochaine fois. Au revoir.
32. Interface utilisateur et système de mise à niveau de missile: Bonjour et bienvenue sur
Unreal Engine Five Blueprints, jeu de
tir spatial développé
étape par étape Dans la leçon précédente, nous avons
terminé avec notre missile. Mais il
reste une chose à propos du missile. Nous devons indiquer au
joueur quand il a un missile et quand il
n'en a pas. Passons au gameplay de notre widget. Et nous allons ajouter une image. Nous allons apporter
cette image ici. Nous allons bien l'ancrer. En fait,
sélectionnons d'abord notre image. Appelons cette
image un CD de missiles. Pour le pinceau, nous avons dans
nos textures une icône de missile. Nous allons l'utiliser ici. Nous allons faire en sorte que son alpha soit de
0,5. Agrandissons
un peu l'image, je pense qu'elle est de bonne taille. Voyons à quoi ça ressemble. Jouez. Oui, on peut le voir. Revenons au widget. Maintenant, nous allons en faire
une variable,
passer au graphique et
créer deux fonctions. L'une des fonctions comporte un missile et l'autre fonction se
situerait à un kilomètre de missile. Nous allons maintenant obtenir l'
image que nous venons de créer. J'aurais dû utiliser un devant et souligner
la visibilité ici Nous devrions le cacher, car nous ne commencerons pas
par les missiles. Ce serait une
mise à niveau qui se produirait. Je vais compiler et enregistrer. Je vais retourner au lecteur,
au widget et dans
la
fonction de Missile, je vais me procurer le CD du missile. Et je vais définir, je vais diviser
cette structure. Je vais sélectionner une
couleur quand nous serons absents. Ça va être rouge. L'alpha sera de 0,5 Je vais le copier, aller dans
Has Missile coller, changer la couleur blanc et enregistrer la
compilation alpha de 0,5 Et je vais
revenir au poste de joueur. Je vais appuyer sur le bouton
droit de la souris. Ensuite, je vais obtenir la référence de
notre widget. Je vais partir avec un missile. Lorsque nous tirerons avec un missile, je copierai le widget et passerai à la fin après le délai. Et en tant que missile,
créons le système de mise à niveau. Nous activons notre missile. Désactivons cette option par défaut. Passons à notre système de points car nos points
définissent l'XP. C'est un système courant, celui-ci n'a pas de bulle. Passons à notre
fonction par points. Après avoir ajouté des points, nous
allons les utiliser. Je vais
les amener ici. Une copie collée. En fait, je ne vais pas
le faire à partir de points, mais
à partir de la ligne d'exécution que
je vais activer. Maintenant, une chaîne est un caractère, caractère numérique ou non,
ou peut être un symbole comme un point d'
interrogation ou une explication Mark peut être n'importe quel caractère, mais pour nous en ce moment,
il ne s'agira que d' un entier lors de l'activation d'une chaîne. Nous pouvons proposer quelques options ici. Nous avons juste besoin de les nommer comme nous voulons. Le premier, disons que
ce sera au niveau cinq, je crois au niveau huit. Oui. S'il est supérieur au niveau
huit. Niveau 9, probablement. Nous allons ramener le deuxième
ennemi aux points. Disons qu'au niveau
11, nous faisons quelque chose. Disons qu'au niveau 5,
nous activons le missile. Nous allons donc transformer ce missile en réalité. Nous allons obtenir
le widget un CD de missiles et régler la
visibilité sur true. C'est pourquoi nous l'avons rendu visible par défaut
avant de le tourner Maintenant, au niveau 5, nous obtenons le missile et
nous voyons le widget. Nous devrions également émettre
un son sur D. Le son que nous pouvons trouver sur les sons. Celui-ci ressemble à
un son de mise à niveau. Nous allons utiliser celui-ci maintenant. Un niveau sur 11, nous devrions
augmenter le niveau de notre arme. Je vais obtenir un
niveau d'arme variable. Nous l'avons dans la catégorie tournage, je vais vous en faire plus un aussi. Je vais le régler en même temps que
le
connecter au son. Alors testons cela,
compilons et sauvegardons. Jouons. Voilà nos ennemis. Voici notre ennemi. Un seul ennemi. N'avons-nous
pas de missiles Je vais lancer un
missile. Il n'y en a aucune. Deux ennemis à terre. L'ennemi est à terre.
Quatre ennemis à terre. Laissez-moi baisser le
son pendant une seconde. Cinq ennemis à terre. Et
nous avons obtenu le missile. Maintenant, je peux tirer des missiles longtemps. Rafraîchissez-vous. OK, huit ennemis. Maintenant, à neuf heures, cela devrait commencer à faire apparaître
les opérations de tir sur les ennemis, nous avons atteint le niveau 11, nous avons les nouvelles balles Voici les nouveaux ennemis. Nous les détruisons également. Je ne leur donne aucune
chance de tirer. Donnons-leur une
chance de tirer. En tirant sur ces ennemis, ils commencent à tirer maintenant. Le jeu est un peu facile. n'y a pas beaucoup de
design là-dedans, mais je suppose
qu'avec assez de temps, vous pouvez probablement perdre dans
n'importe quelle partie Oui, tout fonctionne. Oh, très bien. Maintenant, je pense que ce
sera pour celui-ci. Je te
verrai le prochain. Au revoir.
33. Interface utilisateur et animation: Bonjour et bienvenue sur Unreal
Engine Five Blueprints. Développement étape par étape d'un jeu de
tir spatial. Dans le précédent, nous avions créé notre système de mise à niveau
par points avec notre interrupteur activé par une chaîne. Maintenant, rendons le jeu un peu plus intéressant en faisant
d'eux X ennemis, également un peu
plus grands, plus grands. Lorsque nous améliorons notre arme, nous devons améliorer nos
ennemis à 13 ou 15. Connectons-le ici. En fait, nous pouvons
également changer notre CD laser. Non pas obtenir mais régler entre 0,2 et 0,15, nous devrions être
un peu plus rapides Pourquoi cela change ?
Parce que d'une manière ou d'une autre nous devrions être capables de perdre. Parce que je pense qu'avec
la configuration précédente, nous ne pouvions jamais perdre quand
nous perdions. Que se passe-t-il ? Nous avons un jeu à l'écran. Commençons par notre
jeu à l'écran. Passons au navigateur de contacts. Passons au dossier UI. Nous n'avons pas visité
le dossier depuis longtemps. Faisons un clic droit et
créons un nouveau widget. Il s'
agira d'un widget utilisateur. Et appelons-le G Game Over. Entrons-le. Maintenant, pour cela, nous aurons besoin d'un canevas. Nous aurons besoin d'une image. Faisons en sorte que cette image
s'étende sur tout l'écran. Ancrez-le sur l'ensemble de l'écran. Passons sa couleur au noir. C'est bon Maintenant,
il va nous falloir un texto. Mettons ce texte en haut. Réglons sa taille sur 500. Ça a l'air bien. Réinitialisons la position à moins 50 pour savoir pourquoi nous voulons qu'elle soit un
peu plus basse, peut-être. En fait,
écrivons-moi le texte disant que c'est un peu
petit, qu'il faut l'agrandir. Disons 100. Ça a l'air cool, d'accord, mettons-le au centre. Faisons la taille y 100. Oui, on peut en sentir 100. Mettons la position Y. 200. Ouais. Ça a l'air d'être un bon endroit
pour terminer notre partie. partie est terminée. Très bien, maintenant nous allons avoir
besoin d'une boîte verticale. En fait, une boîte horizontale. Mettons-le dans le canevas. Mettons-le également au milieu. Fixons la même taille pour le jeu
de plus de 500,100. Position moins 250
positions, disons 380. Dans cette boîte verticale, nous allons utiliser
deux variables de texte. Je ne vais pas copier-coller
car il y a beaucoup de paramètres ici et nous en voulons moins. Je vais le copier-coller. Je vais nommer une
partition et l'autre
serait une nouvelle partition. Et vu la façon dont ils
seraient classés, je vais me mettre à
sentir le premier à
un et le second tomber
à 0,5. Maintenant, quatre alignements. Le second doit être aligné horizontalement
au centre. Central, aligné verticalement. Et le second doit être ressenti horizontalement,
aligné verticalement. Maintenant, tapons ici, je marque. Définissons en fait
la justification à gauche, à droite. Dans celui-ci, nous allons
taper le double zéro. Nous allons définir la
justification. Il est déjà réglé sur la gauche. Mettons
un espace après cela. Ce symbole ici. Oh, je l'ai déplacée. J'aimerais que ce soit un
peu plus à gauche, mais c'est trop. Ça pourrait apporter de la place ici. De plus, mettez-le entre les
deux et faites-le peler et 0,1 peut-être moins 0,05 100 points Oui, je pense que ça a l'air mieux. Maintenant, je vais utiliser
une autre boîte horizontale. Je vais le mettre
dans la toile. Nous allons l'agrandir un
peu car il hébergera nos boutons. Je vais en faire 800. Je peux en acheter 100. Y va bien. Je vais l'ancrer
au centre de l'écran. Pour X, je vais faire moins cent
F, peut-être -100 150 Passons aux boutons un
pour démarrer et un pour le rapide. Mettons du texte
dans ces modèles. Appelons ce menu principal
dans l'autre bouton. Appelons ça arrêter de fumer. Maintenant, dans les deux cas, le texte devrait être défini par défaut,
mais les boutons, mettons un espaceur entre
ces deux boutons et donnons-leur ces deux boutons et impression qu'ils sont
déjà plus beaux Maintenant, la case horizontale à score élevé devrait être une variable car
nous voulons la masquer. Disons que je vais marquer la barre de score, masquons la
visibilité. Le score devrait également être capable. Soulignons maintenant. Nous allons avoir
besoin d'une animation pour que l'arrière-plan s'estompe. Je vais ouvrir les animations. Je vais sélectionner
une animation. J'ai sélectionné l'image extérieure parce que c'est ce que
je veux animer. J'ajoute un pad d'animation. Je vais sélectionner cette
animation et ajouter un camion. Maintenant, lorsque j'ajoute un camion, j'obtiens la variable image parce que je l'ai sélectionnée. Voici notre camion d'animation. Pour cela, je vais
appuyer sur Plus et ajouter une piste d'opacité de rendu Au début,
il devrait être nul, disons qu'en 0,75
il devrait être un Ceci complète notre animation. Je vais cliquer sur le
camion Render Opacity, accéder à
ses propriétés et définir que
lorsque vous aurez terminé, conservez l'état Lorsque cette animation aura
fini de jouer, elle restera assombrie, elle ne redeviendra pas transparente Commençons le codage.
Faisons faillite. Nous n'aurons pas besoin
de la préconstruction, nous aurons besoin de la construction. Lorsque nous construirons, j'apporterai notre animation. C'est dans la catégorie animations. Je vais jouer à l'animation. Maintenant, je vais le mettre
sur une séquence, mais avant de passer
à la première étape
de la séquence, car la seconde
sera consacrée à l'animation. Nous conservons les valeurs ici. Par défaut, ils vont bien. Nous allons créer ces
modèles ici. Nous allons
créer un menu et c'est une variable que je vais
faire. Je vais également
quitter le modèle et c'est aussi une
variable pour les deux. Nous allons utiliser
l'événement non pressé. Nous allons apporter
le premier. Je vais aussi apporter le
second pour arrêter, nous allons simplement quitter le jeu. Pour le menu principal, nous allons
simplement recharger le niveau. Pour ce faire, nous utilisons une commande nommée open level par son nom. Comme il s'agit du même niveau,
nous pouvions obtenir nom du niveau
actuel
et le connecter pour nous assurer que la case Supprimer le
préfixe est cochée, nous quittons et que notre
menu principal est terminé La prochaine étape concerne la
manière dont nous obtenons le score. Comment
connaît-on un score élevé qui nécessitera un système d'
économie de charge ? C'est tout pour celui-ci. Je te
verrai le prochain. Au revoir.
34. Système à score élevé et épargne: Bonjour et bienvenue dans le développement étape
par étape du
jeu Space Shooter de Real
Engine Five Blueprint développement étape
par étape du
jeu Space Shooter Dans le dernier, nous avons créé
le widget Game over,
qui contenait les textes les mieux notés et les boutons
que nous avions programmés. Et nous avons dit que pour utiliser la
nouvelle fonctionnalité des meilleurs scores, nous avions besoin d'un jeu sécurisé. Passons à Even Graph
et lançons ce processus. En fait, avant de
passer à Even Graph, nous devons créer un objet de sauvegarde. Qu'est-ce qu'un objet sûr ? Un objet de sauvegarde est un plan, un plan spécial
qui représente le fichier qui sera enregistré sur le disque dur de
l'ordinateur Si nous écrivons, cliquons et
passons à la classe Blueprint, nous recherchons le même objet En fait, il suffit de sauvegarder le jeu, nous pouvons voir le jeu de sauvegarde d'objets. Nous allons sélectionner
celui-ci et le nommer, exemple game object hops,
SGO, space Ouvrons maintenant ce plan. Vous pouvez voir ici, comme dans les plans de
composants, nous n'avons pas de fenêtre
ou quoi que ce soit d'autre, car cela enregistre
simplement les
données que nous voulons Nous allons créer une nouvelle variable
ici et l'appeler points. Il sera du
type entier qui sera, est ce
que nous économisons. Juste un entier avec
le nom des points. Passons à la fin de notre
jeu en J Avant que l'animation
ne
joue, nous devrions nous demander s'il existe le même jeu. Ici, il faut un
nom de slot et un index utilisateur. Pour nous, l'index des utilisateurs est nul car nous n'
avons qu'un seul joueur. Nous avons, nous n'avons pas plusieurs
utilisateurs sur cet ordinateur. Pour le nom du slot, il
doit être le même partout où
nous utilisons le nom du slot. Je vais appeler ce jeu spatial G One en fait SGO
sans le souligner Au final, SGO Space Game One. Je vais le promouvoir en tant
que nom de slot variable. Cela semble être un bon nom
pour cette variable. Maintenant, je vais créer deux
événements, un événement personnalisé, que je vais appeler sauvegarde du jeu, l'autre que je vais appeler événement personnalisé d'abord, je
vais l'appeler lot. Maintenant, est-ce que la
sauvegarde existe ? Je vais appeler une agence.
S'il existe une sauvegarde, je vais charger le jeu. S'il n'existe pas,
je vais sauvegarder le jeu. Passons maintenant à ces deux événements. Commençons par un jeu de chargement. Comme cela va être plus simple, je charge le jeu depuis la machine à sous. Je vais utiliser notre
variable de nom de machine à sous. Ensuite, je vais passer
au jeu spatial GO. Je veux voir si le
jeu que j'ai chargé provient de notre classe. Si ce n'est pas le cas, nous ne
faisons rien car nous n'
avons pas d'autre cours. Mais si c'est vrai, nous
allons le promouvoir une variable qu'elle a baptisée
pour nous sous le nom de GO Space Game. À partir de là, je vais
obtenir des points, obtenir des points
et passer à une variable dans laquelle nous avons
stocké les points. Je vais maintenant
comparer si ces points
sont inférieurs aux points de
nos joueurs. Je vais maintenant lancer le
casting cette fois pour voir s' il
s'agit de notre vaisseau spatial P Player Je vais lancer un vaisseau spatial pour
le joueur. Nous pouvons nous connecter ou simplement cliquer avec
le bouton droit de la souris et
convertir en pure diffusion. À partir de là, je vais passer aux points. Je vais le connecter ici. Maintenant, si les points de jeu sécurisés
sont inférieurs à nos points, alors je vais créer une
branche et appeler Safe Game. Ce sera tout pour
notre fonction de jeu de lots. Maintenant, pour notre jeu sécurisé, nous allons créer
un objet de jeu. Parce que même s'il existe déjà un
jeu sécurisé, nous
utiliserons le nouveau. La classe d'objet devrait
être notre jeu sûr. Maintenant,
nous allons
promouvoir la valeur de retour en tant que variable,
mais puisque nous l'
avons, nous allons simplement
définir la variable que nous avons déjà ici. Nous n'avons pas besoin de lancer car
nous savons que la classe que nous créons et que la valeur
en retour est notre jeu sûr. Le casting ne sert à rien. Lors du chargement,
nous ne savons pas quelle classe de
jeu sécurisé nous chargeons. Nous sommes juste en train de le charger.
C'est pourquoi nous faisons du casting. Maintenant, je vais obtenir des points. En fait, je ne
vais pas obtenir de points. Je vais fixer des points parce que nous
économisons ces points. Je vais fixer des points. Je vais copier-coller
ceci depuis le
vaisseau spatial de nos joueurs pour obtenir les points du vaisseau spatial des
joueurs Je vais en
faire un pur casting. Encore une fois, je vais
connecter des points. Ici, nous mettons en jeu
les
points de notre joueur en toute sécurité. Je vais définir les
points variables que nous avons. Également sur ces points. Pour terminer le processus de sauvegarde de la progression du
jeu, je dois enregistrer le jeu dans la machine à sous. L'emplacement que nous
allons utiliser est le nom d'emplacement que nous avons enregistré dans ce nom d'emplacement
variable. Maintenant, cela va
sauver notre jeu en toute sécurité. Ceci est Supprimer le jeu dans la machine à sous. Enregistrez le jeu dans la machine à sous. Une machine à sous. Oui, ce n'est pas dans un
emplacement, c'est dans deux emplacements. Mais l'anglais peut être source d'erreurs. Comme vous pouvez le voir, cela nécessite un objet de jeu sécurisé ou
un objet de jeu sécurisé. Nous allons obtenir notre variable, un jeu sûr parce que
nous en avons fait la promotion. Voici le jeu sécurisé
que nous sommes en train de créer. Et nous transmettons cette
information au joueur, pointons ce même objet, enregistrons dans la machine à sous. Maintenant, même si la machine à sous
contient déjà une partie sûre, elle la remplacera La prochaine chose que nous devons faire
est de mettre à jour notre meilleur score. Parce que s'il
y a un score élevé, nous devons le montrer à l'écran. Créons une fonction, appelons-la high score. Nous allons obtenir notre score variable de
texte et définir texte à partir d'ici. Nous allons
connecter nos points dans le texte allons transformer automatiquement notre
entier en texte. Nous allons également obtenir
la barre du meilleur score, la case verticale, laissez-moi nommer la barre du meilleur
score ici, et la rendre visible. La partie par défaut est
visible, nous ne la modifierons pas. Et nous revenons au graphique des événements. Et après avoir joué en toute sécurité, nous allons appeler notre
fonction « nouveau meilleur score ». Cela complète notre jeu sécurisé
et notre système de meilleurs scores. Allons tester notre système. Compilons et sauvegardons. Appuyons sur Play.
Commençons. Trouvons un ennemi. Ce délai est de 3 secondes. Je dois baisser le
son. C'est trop haut. J'ai tué deux ennemis. Je devrais vraiment mourir. heure actuelle, je vais précipiter sur les ennemis
pour leur infliger des dégâts. C'est là le problème.
Je ne peux pas mourir. Nous n'avons pas traité le
système de mort dans la fonction mort. Du plan de joueur
que nous avions créé. Faisons en sorte que quelque chose se produise. La première chose qui devrait arriver, est de désactiver les entrées. Nous allons acheter une manette de
joueur, nous allons appeler les entrées
désactivées. Le joueur ne peut rien
appuyer. Je vais le connecter à manette
du joueur et
les cibles doivent être elles-mêmes. Maintenant, la prochaine chose que nous devons
faire est de démarrer le tournage, juste au cas où
il serait activé. La troisième chose à faire est de placer
un acteur caché dans le jeu. Maintenant pourquoi nous allons créer
le jeu caché de l'acteur ? Parce que nous ne
voulons pas détruire l'acteur. Parce que nous voulons obtenir
la variable
de score de cet acteur dans
le jeu plutôt que sur le skin. Au lieu de détruire l'acteur, nous
allons simplement le cacher. Passons maintenant à une explosion
sur place. L'emplacement sera celui de
notre acteur. Après cela, nous
devrions créer notre widget. Créez un widget pour la classe. Nous allons sélectionner
notre jeu par joueur. Nous allons acheter une manette de
joueur, que
nous allons ajouter au port. Nous allons également définir une collision de porte sur Désactivée. Cet acteur n'a plus de
collision. Nous compilons et sauvegardons. En fait, nous pourrions
détruire l'acteur ici. Parce que puisque nous créons
le widget et que nous ajoutons à Viewport lors de sa création, il obtiendra toutes les
informations nécessaires et exécutera la même charge Mais si vous voulez
être sûr que cela
se produise à 100 %, nous pouvons également rendre sur le vaisseau spatial de notre joueur
et promouvoir l'arrivée d'un Supprimez le setter ici. Je vais connecter
cette variable
partout où nous devons
trouver le vaisseau spatial Dans cette variable, je vais être exposé
au moment de l'apparition et définir une intensité modifiable en
tant que vaisseau spatial du joueur BP Lorsque nous lançons
ce jeu, lançons le joueur, sélectionnons la
classe de jeu. Vous voyez, lorsque je le crée,
il demande que cette
variable soit remplie Comme j'ai sélectionné
Expose on spawn ici, je vais mettre self, cette classe est référencée ici et elle contiendra
les informations En fait, installons le réacteur et partons jouer. Tuons un ennemi. Notre meilleur score
sera donc de un et allons mourir. C'est trop. Nous
aurions pu abaisser son nouveau record, dix. Nous avons un nouveau record. Nous ne sommes pas en train d'espionner la souris,
c'est quelque chose à réparer. Je vois qu'il y a
un tas d'erreurs. Définissez également la
rotation des acteurs lorsque nous mourons. Ils ne
trouvent probablement pas l'acteur. La rotation présente ce problème qui se trouve dans la bibliothèque de
fonctions communes de. C'est pourquoi, parce que nous
achetons une manette et je
demande si elle est valide. Si je connecte le pion
contrôlé, cela
supprimera notre erreur Jouons à nouveau,
commençons le jeu. En fait, avant de commencer, fixons une durée de vie maximale
à quelque chose de plus petit. Voici le pion. Nous avons la vie, nous avons sur les objets dommageables Oui, fixons la durée de vie à
un, maximum à un. Appuyons sur Play. Commencez
le jeu avec zéro score. Voyons si nous mourrons
instantanément. Le score est attribué à un. Si nous avons un nouveau score élevé, non, pas de nouveau score élevé. Maintenant, nous allons
tricher un peu et fixer le nombre de points à 11 Ils deviendront 12. Quand je meurs à cause du premier ennemi, il y a l'ennemi. Il y a peut-être un ennemi dès le
début. C'est parce que le score était de 11. Nouveau meilleur score, 11.
Notre système fonctionne. Il mémorise le score
précédent et enregistre un nouveau score élevé. Maintenant, nous ne donnons aucune chance
au joueur de survivre, même s'il en esquive une, nous ne pouvons pas rendre le jeu infini Pour ce faire, nous allons
créer un
système de régénération pour le joueur. Et c'est
ce que nous allons faire lors de la prochaine. Au revoir.
35. Touches finales et correction des erreurs: Bonjour et bienvenue sur Unreal Engine Five
Blueprint, développement étape
par étape du
jeu Space Shooter Lors de la dernière leçon, nous avons
terminé notre jeu à l'écran. Et moi, nous avons terminé notre système
de meilleurs scores. Dans celui-ci, nous allons
ajouter une régénération
au joueur. Pour cette régénération, nous allons
avoir deux règles simples. Si le joueur
ne tire pas ou s'il ne bouge pas,
régénérez sa santé Si le joueur
tire ou se déplace, ne régénérez pas sa santé Nous allons passer à
nos chronomètres et aller un peu plus loin et régler le chronomètre par événement Nous allons maintenant créer un événement personnalisé et l'
appeler par région. N'oubliez pas que nous utilisons notre chronomètre
dès le début du jeu, la régénération
commencera à se dérouler en boucle, car ce
sera un chronomètre en boucle dès le début, une fois que nous aurons 0,1
dix fois par seconde Nous allons mettre
une branche après un événement de
la région de la vie,
à condition que nous ayons un lingot d'or Cela signifie que si l'un est vrai ou l'autre est
vrai, donnez-nous la vérité. Si c'est faux, nous
allons flotter,
flotter pour notre BBC Damageable Nous allons appeler Health. Quel était le nom « santé » ? Pour le montant, nous
allons en mettre un. Maintenant, ce serait
pour la région, mais nous avons besoin de conditions. La première condition
serait la vélocité. Nous vérifions si
l'acteur bouge, sa vitesse est nulle, alors nous ne
devrions pas nous régénérer En fait, nous devrions
être en train de
nous régénérer, nous allons mettre
un nœud ici. Si c'est zéro, cela renvoie faux parce que
nous avons mis le nœud, si zéro renvoie vrai,
knot le rend faux, il s'exécute à partir d'ici Maintenant, si nous tirons, je pense que nous avons une variable pour laquelle cela renvoie également vrai,
Ne pas régénérer Cela complétera
notre système de régénération. Recommandons-le, ajoutons
quelques bulles et
quelques commentaires supplémentaires C'est l'apparition d'étoiles,
et c'est le début. Réduisons-le à deux. Mettons ici des plats à pâtisserie et des casseroles. Je pense que c'est faux. L'orthographe
est peut-être meilleure, peut-être pas. Allons tester notre système. Allons-y Plearly avec le jeu. Appuyons sur Recommencer. Le son. Les ennemis devraient apparaître. Laisse-moi faire un plein écran. J'ai triché avec le score, n'y a-t-il pas eu de tricherie ? Et je n'ai qu'une seule vie. Ce n'est pas bon. Tuons
des ennemis. Nous n'avons pas obtenu les améliorations nécessaires pour le moment, car nous avons commencé avec
le maximum de points. OK, réglons ça.
Tricherie et handicaps Niveau d'arme zéro, passe à 0,0 points de dégâts Disons santé. Compilons et sauvegardons. Avons-nous reçu des
messages d'erreur ? Je n'ai pas pu le voir. Je vais accéder au journal des messages
Windows. C'est une bonne chose. Si un message
d'erreur devait apparaître, c'est probablement au moment de notre mort, ce que nous pouvons appeler une erreur
contrôlée. Comme une erreur dont on sait d'
où elle vient. Cela n'a pas
vraiment d'incidence sur quoi que ce soit. Oui, parfois ces
erreurs peuvent se produire. Non pas qu'ils soient prêts à partir, mais oui, cela
n'affecte pas le nom. Mais il est toujours préférable d'
avoir un code exempt d'erreurs. Ils, nous sommes en train de tuer
des choses. Nous avons un missile. Allons-y, faisons quelques dégâts. Nous avons lu autre chose.
Faisons des dégâts. OK, la régénération
est assez rapide. Nous aurions pu dire
un
montant légèrement inférieur pour le moment. Je suis immobile. Oui, c'est assez rapide. Tu vois, je suis en pleine santé. Voyons si cela me permet de savoir quelle vitesse cette
génération générale est comparée
aux dégâts causés par
les armes tirées. Cela avance un peu lentement. Nous pourrions augmenter sa vitesse. Oh, je vois des balles
passer. J'étais probablement bien plus
loin que moi, c'est pourquoi. OK. Ils n'étaient pas à portée. Je pensais qu'ils avaient été détruits. Peut-être que notre portée pour l'
explosion est un peu petite sur notre carte. Oui, peut-être qu'on pourrait l'
agrandir. Que se passera-t-il si je devais venir ? OK, alors que s'est-il passé là-bas ? L'ennemi l'était plus que ceux de
devant derrière moi. Le missile à balles. Essayez d'abord de passer derrière. Oui, nous avons besoin d'une
souris à la fin du jeu. Réglons ces problèmes. Nous avons quelques erreurs. Vous voyez que c'est l'emplacement de l'acteur défini. Probablement quand nous sommes morts,
balle après apparition en attente, tuez quand nous sommes morts Certaines choses, on peut
toujours y aller, aller dans ce lieu défini par l'acteur. Il veut probablement
demander si p est valide. Nous avons dit que c'était
un nœud valide et connecté. Cette erreur disparaîtra. Ce n'est qu'une question de temps pour
trouver où cela est nécessaire. Ne perdons pas de temps là-bas. Passons à la fin de notre match. Commencez à jouer et à construire. Allons chercher la
manette du joueur et la régler. Donc, le curseur de la souris. Connectons cela à la vérité. Je clique dessus pour résoudre le problème du curseur,
compiler et enregistrer. Une dernière chose à
faire
serait d'ajouter un composant audio. Sélectionnez ce composant audio, et parmi nos sons, sélectionnez
celui-ci, celui de la musique. Maintenant, notre jeu propose un test de lecture
musicale. Lorsque nous commençons, la musique commence. Félicitations pour
le régime suivi jusqu'à présent, et j'espère que vous avez
apprécié ce cours. Il existe de nombreuses
façons d'optimiser contourner les mécanismes
et de mettre à niveau les systèmes. Fabriquez peut-être d'autres balles. Fabriquez un autre système d'arme. Il y a beaucoup de
choses que tu peux faire, te faire plus d'ennemis. Peut-être que le défi
serait de faire larguer aux
ennemis une quantité de
missiles, comme Drop Amo. Et tu as une certaine
quantité d'Amo. Vous aimeriez remettre à plus tard les
acteurs du monde entier. Et ce que vous faites, ce sont collisions lorsque le
joueur entre en collision avec lui, lorsque le joueur finit par
entrer en collision avec lui, lorsque le joueur tire dessus Fais ce genre de choses. Vous pouvez expérimenter et apprendre,
élargir vos connaissances. Merci beaucoup de nous avoir
suivis. Au revoir