Plans d'Unreal Engine 5 : développement de jeu de tir spatial étape par étape | 3D Tudor | Skillshare
Recherche

Vitesse de lecture


1.0x


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

Plans d'Unreal Engine 5 : développement de jeu de tir spatial étape par étape

teacher avatar 3D Tudor, The 3D Tutor

Regardez ce cours et des milliers d'autres

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

Regardez ce cours et des milliers d'autres

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

Leçons de ce cours

    • 1.

      Développement de jeux de tir dans l'espace avec Unreal Engine 5 Blueprints étape par étape

      4:02

    • 2.

      Introduction au développement et au pack de ressources UE5

      9:00

    • 3.

      Mode jeu et design d'interface utilisateur

      16:05

    • 4.

      Fonctionnalité du menu principal

      9:45

    • 5.

      Les bases du plan d'action du joueur

      15:05

    • 6.

      Mécanique et commande de la caméra

      10:08

    • 7.

      Aperçu des mouvements de personnages

      11:17

    • 8.

      Développement de fonction de mouvement

      18:20

    • 9.

      Visualiser un mouvement avec des sentiers accidentés

      7:58

    • 10.

      Animation et maîtrise des navires

      13:53

    • 11.

      Introduction au système d'endurance

      14:11

    • 12.

      Mettre en œuvre la mécanique du sprint

      21:14

    • 13.

      Gestion du système Sprint et de l'endurance

      14:42

    • 14.

      Finaliser le système Sprint

      7:58

    • 15.

      Les bases du système de ciblage et de prise de vue

      9:15

    • 16.

      Développement de mécanicien de tir

      12:34

    • 17.

      Améliorer le ciblage et le croisement

      10:11

    • 18.

      Créer la base du système de prise de vue

      12:57

    • 19.

      Terminer le système de prise de vue

      17:04

    • 20.

      Composants et système de dommages de l'ennemi

      14:51

    • 21.

      Santé des composants et des joueurs endommagables

      13:57

    • 22.

      Architecture de plan d'un ennemi

      14:00

    • 23.

      Design et mouvement d'un premier ennemi

      11:03

    • 24.

      Fonctions ennemies courantes

      11:16

    • 25.

      Développement de shooter ennemi

      17:52

    • 26.

      Mécanique de tir des ennemis

      23:13

    • 27.

      Mécanique de reproduction des ennemis

      14:58

    • 28.

      Mettre en œuvre un score et la mort d'un ennemi

      9:30

    • 29.

      Introduction au système de missile

      13:02

    • 30.

      Mécanique des missiles de recherche

      14:09

    • 31.

      Finaliser l'intégration des missiles et des joueurs

      10:06

    • 32.

      Interface utilisateur et système de mise à niveau de missile

      9:25

    • 33.

      Interface utilisateur et animation

      12:48

    • 34.

      Système à score élevé et épargne

      17:21

    • 35.

      Touches finales et correction d'erreurs

      10:00

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

Généré par la communauté

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

113

apprenants

--

projet

À propos de ce cours

Cliquez ici pour [Resource Pack]

Commencez un voyage de développement de jeu transformateur avec « Unreal Engine 5 Blueprints : développement étape par étape de jeu de tir spatial » !

Plongez dans le monde passionnant du développement de jeux avec Unreal Engine 5 Blueprints : développement de jeux de tir dans l'espace étape par étape », un cours Skillshare de premier plan destiné aux développeurs en herbe et aux vétérans chevronnés.

Guidé par Markos, un expert avec une vaste expérience dans le codage et le design de jeux, ce cours promet non seulement de vous éclairer, mais également de vous responsabiliser. Grâce à l'utilisation du puissant Unreal Engine 5, nous allons transformer vos rêves de développement de jeu en réalité.

Aperçu du cours

Ce cours démystifie le processus de création de jeux, en offrant une voie claire et étape par étape, de l'idée initiale à un jeu entièrement réalisé. Il est parfait pour ceux qui débutent dans le développement de jeux ou qui cherchent à améliorer leurs compétences avec Unreal Engine 5. Vous créerez un jeu de tir dans l'espace engageant, en apprenant à combiner un gameplay dynamique avec un storytelling captivant.

Les plans d'Unreal Engine 5 : développement de jeux de tir dans l'espace étape par étape :

  • Pack de ressources complet exclusif : démarrer votre développement de jeu avec un pack de ressources, y compris tout ce qui est jouable, des navires uniques, en créant une expérience de jeu immersive.

  • Approche adaptée aux débutants : commencez par les bases du système Blueprint d'Unreal Engine 5, et abordez progressivement des techniques de développement plus complexes, en établissant des bases solides pour votre parcours de développement de jeux.

  • Maîtriser la mécanique du joueur Space 3D : découvrez les mouvements de caméra dynamiques, les commandes intuitives, les mouvements robustes, les systèmes de prise de vue complets et l'intégration d'effets particle pour une expérience de jeu attrayante.

  • Conception et mise en œuvre d'interface utilisateur : créer une interface utilisateur unique qui améliore l'interaction des joueurs par des affichages de santé et d'endurance, des systèmes de scoring et des fonctionnalités de sauvegarde, y compris le menu démarrer et des séquences de gameover.

  • Débogage et optimisation : aller au-delà du codage de base avec des leçons de débogage, d'optimisation des performances et d'application des touches finales pour peaufiner votre jeu, compétences cruciales pour tout développeur de jeu en herbe.

  • IA intelligente de vaisseau ennemi : créer un gameplay immersif avec l'IA ennemie intelligente, y compris un système de schéma directeur parent pour créer des comportements uniques d'ennemi.

Ce que vous recevrez :

  • Accédez à un vaste ensemble de ressources pour démarrer votre projet.
  • Orientation par un parcours d'apprentissage structuré, des bases d'Unreal Engine 5 aux mécaniques de jeu avancées.
  • Compétences en animation de vaisseaux spatiaux, en développement de systèmes de prise de vue et en intégration d'un système de scoring pour un gameplay amélioré.
  • Techniques avancées pour ajouter des fonctionnalités sophistiquées et créer une séquence de game-over polie.

Votre parcours d'apprentissage :

  • De l'architecture d'Unreal Engine 5 à la mise en place de votre mode de jeu et de votre système d'apparition des joueurs.
  • Progresser dans les mécanismes du jeu, améliorer l'interaction avec les joueurs et donner vie à votre vaisseau spatial et à vos ennemis.
  • Se plonger dans le débogage, l'optimisation des performances et l'application des touches finales pour démarquer votre jeu.

 À qui s'adresse ce cours ?

« Unreal Engine 5 Blueprints : développement de jeux de tir spatial étape par étape » accueille tous ceux qui aiment le développement de jeux. Ce cours offre des informations précieuses et une expérience pratique. Que vous soyez un débutant désireux de vous plonger dans le développement de jeux ou un développeur expérimenté qui souhaite perfectionner vos compétences avec Unreal Engine 5.

Commencez ce voyage exaltant et commencez dès aujourd'hui à transformer vos idées créatives en un jeu de tir dans l'espace entièrement réalisé !

 

Gardez le blueprint, tout le monde, et rendez-vous dans le cours !

Markos

 

Rencontrez votre enseignant·e

Teacher Profile Image

3D Tudor

The 3D Tutor

Top Teacher

Hello, I'm Neil, the creator behind 3D Tudor. As a one-man tutoring enterprise, I pride myself on delivering courses with clear, step-by-step instructions that will take your 3D modeling and animation skills to the next level.

At 3D Tudor, our mission is to provide accessible, hands-on learning experiences for both professionals and hobbyists in 3D modeling and game development. Our courses focus on practical, industry-standard techniques, empowering creators to enhance their skills and build impressive portfolios. From crafting detailed environments to mastering essential tools, we aim to help you streamline your workflow and achieve professional-quality results.

We're committed to fostering a supportive... Voir le profil complet

Level: All Levels

Notes attribuées au cours

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

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

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

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

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

Transcription

1. 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