Transcription
1. Introduction: Bonjour à tout le monde, Chris ici. Et ce cours, je vais vous présenter le moteur de jeu de ghetto en vous
aidant à créer un prototype de jeu de plateforme 2D à partir de zéro. L' un des grands axes du cours est de créer une plate-forme,
un contrôleur qui peut gérer nombreuses actions classiques de plateforme comme le double saut tout en sautant et rebondissant attaques. Pour les ennemis, nous pouvons mettre en place motifs réutilisables
simples comme le mouvement des points de cheminement et les attaques de projectiles. La gestion des couches physiques, des collisions et des déclencheurs de zone entrés ou de gauche est une autre zone de codage importante, de sorte que les bons objets déclenchent certains événements à se produire. Par exemple, l'ennemi RB ne tire que sur le joueur grâce à l'utilisation physique pour construire des niveaux sur que les outils de carte de tuiles et Godot sont très utiles pour nous. Vous pouvez utiliser la tuile automatique pour construire rapidement des niveaux pour les tests. Dans l'ensemble, j'ai essayé de faire en sorte que le cours couvre la plupart de ce que pourrait faire faire à l'emploi, y compris les signaux, la création d'
interface utilisateur, la gestion des arbres d'animation, héritage en tant que brevet de codage, et les données globales via Scripts singletons. Donc, si vous voulez commencer avec Game Development, voulez apprendre un moteur de jeu gratuit Mais actuellement en évolution, besoin d'aide pour construire un jeu de plateforme 2D classique ou vous voulez juste avoir du plaisir, alors j'espère vous voir dans la première vidéo est mon cours où nous allons commencer par configurer nos paramètres de projet, puis sauter dans la création de cartes de tuiles.
2. Configurer des Godot et importer des objets d'aventure Pixel: Donc, dans cette vidéo, nous allons passer par les étapes de la mise en place de Godot, l'acquisition de nos actifs et de les importer dans notre nouveau projet. Donc, d'abord, si vous n'avez pas déjà Godot, peut ramasser Godot à Godot Engine.org slash télécharger. Et vous pouvez voir qu'il existe des versions pour Windows, Mac et Linux. Alors allez-y et téléchargez et installez la Virgin dont vous avez besoin, comme vous le feriez n'importe quel autre programme. Aussi, si vous avez de la vapeur, c'est un autre endroit que vous pouvez l'obtenir, comme vous le feriez pour télécharger un jeu sur Steam. Vous pouvez également installer Godot à partir de là. Donc, juste pour souligner dans ce cours, nous allons travailler avec Godot 3.3.3. Et j'utilise personnellement la version universelle 64 bits de Godot sur le silicium Apple. Donc à part ça, nous allons avoir besoin d'un peu d'art pour le projet. Donc une excellente option que nous pouvons utiliser pour créer un jeu de plateforme simple comme nous allons faire est l'aventure pixel. Ainsi, vous pouvez l'obtenir sur chaque point io si vous recherchez l'aventure de pixel, ou si vous allez à un pixel grenouille Dash Assets point, barre oblique de
point, tiret de pixel, tiret d'aventure un. En plus de cela, il y a aussi 20 personnages ennemis que vous pouvez télécharger avec pixel aventure, ce qui est une seconde, et vous pouvez ramasser les deux de ceux sur chaque point io. Donc je vais importer les deux dans le projet. C' est juste pour que vous sachiez, d'où nous obtenons nos actifs. Mais en fin de compte, c'est exactement ce que j'utilise pour démo pour le cours. Vous pouvez utiliser ce que vous voulez à la fin, peut-être vous prototypez avec nous et ensuite le mettre sur votre propre art plus tard. Donc, lorsque vous lancez la fenêtre pour la première fois, vous pouvez voir certains projets, mais nous allons créer un nouveau projet. Donc, ici sur la droite, vous avez un nouveau bouton de projet. Je vais cliquer dessus et puis je vais naviguer où mon ordinateur je voudrais créer ce projet. Alors appuyez sur ce petit bouton Parcourir ici et je vais utiliser, et j'utiliserai ce chemin pour mon projet, mais vous pouvez fondamentalement le stocker où vous voulez. Maintenant, notez qu'ici j'ai mon projet de référence, les projets d'aventure pixel. Donc, je vais juste l'appeler la même chose et lancer un tutoriel de tiret à la fin, puisque ce sera la version suivante de ce même projet. Alors allons de l'avant et sélectionnez le dossier actuel. Et maintenant, nous devons lui donner un nom de projet et créer un dossier à l'intérieur de ce répertoire pour le projet. Alors appelons ça l'aventure pixel, projet Dash tutorial. Et je vais faire créer un dossier. Tu peux l'appeler comme tu veux. Et j'utilise OpenGL ES 3 est le moteur de rendu, ai pas eu de problèmes avec cela jusqu'à présent. Alors allons de l'avant et appuyez sur créer et modifier. Et voici à quoi Qdot va ressembler la première fois que vous démarrez votre projet. Et vous remarquerez qu'il s'agit évidemment d'une vue 3D. haut, nous pouvons réellement passer à 2D, ce
qui est ce que nous allons utiliser pour le reste du projet. Donc, avant d'importer tout l'art dans le jeu, nous devons définir les paramètres par défaut de toute œuvre que nous importons dans le jeu afin qu'elle s'affiche correctement. Donc, si je devais cliquer sur cette icône point PNG et chaque projet Godel qui est dû à un logo. Nous pouvons passer à l'onglet importation et nous pouvons voir qu'il s'agit d'importer comme une texture. Nous voulons donc définir les valeurs par défaut pour que la texture soit un pixel, notre paramètre par défaut. Donc, si nous cliquons sur préréglage ici, vous remarquerez les pixels 2D, l'une des options. Donc, si vous cliquez là, vous verrez que certaines options comme le filtre vont s'éteindre. Donc, le filtre rendrait normalement vos images floues sur les bords afin que vous ne voyiez pas les pixels comme nets et que tout serait un peu floue ensemble. Donc, nous ne voulons pas que pour le jeu en pixel que vous voulez que chacun
des pixels soit clairement reconnaissable comme la couleur qu'il a été coloré. Nous voulons donc que le pixel 2D soit la valeur par défaut pour toutes les images que nous apportons dans le jeu. Donc, nous n'avons pas besoin de frapper V important pour cette icône particulière. Probablement pas l'utiliser comme un véritable atout ici. Mais nous voulons changer la pré-configuration en haut, puis définir comme valeur par défaut pour la texture. Donc, cela va signifier que ces paramètres que nous avons ici viennent d'être copiés
aux valeurs par défaut qui vont charger pour chaque image que nous apportons dans le jeu par défaut. Et notez que même dans un jeu d'art pixel, il peut y avoir certaines images que vous ne voulez pas avoir ces presets. Donc, je voudrais juste définir le préréglage comme quoi que ce soit sera la majorité de votre art. Dans ce cas, ce sera un pixel 2D pour l'art pixel, personnages et les jeux de tuiles et tout cela. Alors allons-y et apportons nos dossiers. Et maintenant, nous pourrions vouloir ajouter un dossier dans ce projet pour stocker tous les éléments d'art. Donc, nous pouvons en créer un dans le système de fichiers en bas à gauche
en cliquant avec le bouton droit sur ce dossier de ressources, qui est fondamentalement où nous avons créé notre projet et autre chemin vers cela. Donc, faisons un clic droit là et faisons un nouveau dossier. Et je vais juste appeler cet art et frapper OK. Maintenant, nous pouvons naviguer à l'endroit où nous avons nos actifs que nous voulons utiliser pour le jeu. Je suis déjà allé de l'avant et extrait l'aventure pixel 1 et note de Tupac aventure pixel que lorsque vous extrayez pixel aventure un, le dossier pourrait être appelé libre. Je l'ai renommé en pixel aventure 1. Et l'aventure de pixel à est appelé cela par défaut. Donc maintenant, nous voulons essentiellement les copier dans le projet afin que nous puissions les utiliser. Une façon serait juste de faire glisser et déposer de votre Explorateur de fichiers dans Godel. Et vous pouvez simplement le glisser sur ce dossier là, mais il est possible de le mettre au mauvais endroit en cas d'accident. Et chaque fois que vous déplacez des dossiers et Godot, il va devoir réimporter. Tous ces éléments sont des actifs qui peuvent prendre un peu de temps, il est
donc préférable de les mettre au bon endroit et à la première tentative, donc je vais les sélectionner et je vais les copier. Vous pouvez simplement faire glisser une zone, puis cliquer avec le bouton droit et copier, ou vous pouvez les sélectionner et appuyer sur Contrôle C Si vous avez besoin. Et passons au dossier du projet Godot. Donc, j'ai cela stocké et ce dossier Tutoriels, et puis nous avons le projet ici. Nous pouvons donc voir le dossier d'art que nous venons de créer. Ils vont y aller et ensuite je vais coller les nouveaux actifs ici. Donc maintenant, dès que je clique sur Godel, on peut voir qu'il va réimporter. Ce sont des actifs appliquant les valeurs par défaut pour la façon dont il devrait afficher et Godel par exemple. Donc, si nous ouvrons l'aventure arche et pixel maintenant, nous pouvons entrer dans les personnages principaux. Je vais utiliser Ninja grenouille comme personnage principal de ce cours. Donc, si nous faisons glisser une de ces feuilles de calcul sur l'écran maintenant, nous devrions être en mesure de le voir avec les paramètres appropriés pour Pixar il. Alors faisons glisser ce ralenti. Je vais contrôler la roue du milieu de la souris et zoomer beaucoup et je m'assure que ces pixels s'affichent net. Donc, quand vous êtes très zoomé comme ça, vous ne devriez pas voir de flou. Vous devriez être en mesure de dire clairement chaque couleur que sont
ces pixels et où se trouve le placement de chaque pixel. C' est le look que vous voulez généralement lorsque vous faites des jeux de style pixel art. Donc, je vais zoomer et nous pouvons également confirmer que les paramètres sont corrects parce que si nous cliquons sur inactif et si vous allez dans l'onglet d'importation en haut à gauche, vous pouvez voir que cette idole, 32 par 32 PNG est-il importée avec filtre désactivé ? Maintenant, lorsque vous créez le projet et Godel, c'est activé par défaut. C' est donc une façon dont nous savons que nous avons défini la valeur par défaut pour les pixels 2D pour l'importation d'images. Donc, à ce stade, nous avons créé un projet et nous avons introduit l'art pixel avec les paramètres d'importation corrects. Donc, dans la prochaine vidéo, nous allons juste faire quelques autres exigences de configuration pour ce projet avant de commencer à créer nos niveaux de jeu.
3. Projet de configuration pour l'art du Pixel (taille de fenêtre, étirement): Donc, avant de commencer à travailler sur les niveaux de notre jeu, nous allons devoir changer quelques paramètres de la fenêtre de jeu afin que lorsque nous testons le jeu, il s'affiche un peu plus correctement. Donc, d'abord, nous allons devoir créer une scène pour pouvoir charger cette scène comme point de départ du jeu. Donc maintenant j'ai l'image de sprite que nous venons d'apporter dans cette fenêtre principale ici. Et vous remarquerez que dans la scène en haut à gauche, qui contient le sprite. Donc, une scène va être n'importe quel nœud et Godel plus tous les nœuds imbriqués en dessous de cela. Ainsi, un personnage peut être une scène, un niveau peut être une scène et des scènes peuvent avoir des instances d'autres scènes. Ainsi, vous pourriez mettre un tas de scènes ennemies dans un tas de personnages, scènes dans une scène de niveau pour que tout se réunisse. Et une fois que vous commencez à utiliser, il devient assez intuitif. Donc, nous allons juste prendre ça brillant et le sauver comme une scène pour que nous puissions charger ça comme point de départ de notre jeu. Donc je vais frapper Control S ou Command S. et nous allons mettre ça comme niveau un, et je vais le créer dans un nouveau dossier. Donc, disons Créer un dossier en haut à droite. Et ce nouveau dossier va être des cartes ou des niveaux, quelle que soit votre tête. Ok, et gardons cette scène à l'intérieur de là. Donc pour l'instant, cela n'a pas vraiment de sens comme un dicton de niveau, ne vous inquiétez pas à ce sujet. On changera ça plus tard. Et montons au bouton de lecture en haut à droite. Donc vous pouvez, donc juste ici et nous pouvons aller de l'avant et appuyer sur Jouer le projet. Mais si nous n'avons pas défini de scène, nous pouvons choisir une scène comme point de départ de notre jeu. Alors sélectionnons le joueur une scène. Donc, c'est dans le répertoire Maps et je charge juste ce n. Vous pouvez également monter d'un niveau si vous avez besoin de sélectionner le bon dossier. Donc, nous allons juste double-cliquer dessus. Ok, et maintenant le jeu devrait commencer par cette scène. Et notre feuille de sprite s'affiche ici assez bien. Le sentiment qu'il n'y a pas de flou des pixels. Donc c'est toujours ce qu'on veut voir. Mais c'est assez petit les tailles de ce personnage. Donc, nous voulons vraiment le faire paraître plus grand sur l'écran. Maintenant que nous l'avons testé, nous connaissons le problème. Allons dans le menu du projet en haut à gauche et dans les paramètres du projet. Et nous pouvons aller de l'avant et trouver les paramètres pour cela. Donc, comme vous pouvez le voir, je suis déjà là et la fenêtre d'affichage. Mais si vous ne le voyez pas immédiatement, vous pouvez cliquer sur la zone Rechercher ici en haut à gauche et taper dans la fenêtre qui filtrera les catégories vers le bas afin que vous ayez moins de choix. Alternativement, si vous êtes ici à l'application, il suffit de faire défiler vers le bas pour afficher la fenêtre. Et ici, nous allons avoir les paramètres que nous devons changer. Donc pour l'instant, va prendre la largeur et la hauteur et régler cela à 320 largeur par un 180 pixels de large. Donc, cela peut sembler vraiment faible parce qu'ils pensent que la plupart des gens vont avoir des écrans qui sont au moins 1920 sur 1080 pixels ces jours-ci, peut-être plus grands que cela. C' est donc une très faible résolution. Donc, ce que vous faites est que vous avez réellement la largeur et la hauteur de test, une résolution plus élevée. Ensuite, vous prenez cette largeur et cette hauteur et l'échelle jusqu'à la largeur et la hauteur de test. Et parce que nous avons les paramètres de pixel 2D pour nos sprites importés, bien que nous le redimensionnons, il ne devrait pas être flou ou déformé ou quoi que ce soit du genre. Prenons donc la largeur et la hauteur du test et faites-le 12, 80, puis 720 pixels. Donc, cela devrait être une taille de test décente, fenêtre de quatre heures. Ensuite, un dernier réglage que nous devons changer ici en bas est l'étirement. Aspect est défini pour ignorer. C' est en bas, sous étirement. Le mode est donc défini sur désactivé. On veut changer ça en 2D. Donc, il va faire l'étirement 2D par défaut de notre petite taille jusqu'à la grande taille. Donc, si nous fermons ceci maintenant, appuyez sur Control S pour tout enregistrer et revenons au bouton Play à nouveau. Cliquez dessus. Et quand nous chargeons le jeu, cette fois, vous verrez que les personnages sont beaucoup plus grands. Je pense que nous avons pris l'image et l'avons mise à l'échelle quatre fois à l'écran. Donc, il s'agit d'une fenêtre de 1280 par 720 pixels, mais il affiche essentiellement le jeu réel à quatre fois la taille. Donc, sur un grand moniteur, cela a beaucoup plus de sens. Donc, vous pouvez réellement voir les personnages. Cela devrait donc être la dernière configuration de base de notre projet dont nous allons avoir besoin. Dans la vidéo suivante, nous pouvons commencer à travailler sur la construction d'un arrière-plan pour le niveau.
4. Faire un arrière-plan retenu: Donc, dans cette vidéo, Commençons à créer notre niveau en commençant par une texture d'arrière-plan répétée. Ainsi, lorsque vous allez utiliser une image comme texture d'arrière-plan répétitive, il y a un indicateur que vous devez activer pour cette illustration. Donc, si nous allons dans le répertoire d'art et pixel aventure un ou partout où vous avez que sauvé. Et puis nous allons en arrière-plan, vous verrez quelques textures différentes que nous pouvons utiliser pour l'arrière-plan. Je peux en amener un ici et vous pouvez voir que cette tuile va se répéter encore et encore. Donc, ce que nous voulons faire pour cette image et toutes
les différentes versions de couleur de l'image
descendant au jaune est de passer à l'onglet importation. Et ici, nous pouvons voir lire sur le filtre. Il y a une case à cocher pour répéter. Nous voulons activer cette option. Et lorsque nous faisons cela, cet indicateur est automatiquement vérifié afin que nous puissions réimporter ces actifs. Donc maintenant, ceux-ci fonctionneront comme des textures reproductibles. Donc, pour obtenir une texture à répéter sur l'écran, vous devez cliquer sur la texture. Ensuite, vous allez dans la région, et ensuite nous allons vouloir activer la région ici. Donc, cela va maintenant essentiellement prendre la tuile de texture et l'étirer à travers une région. Et comme le drapeau de répétition est activé pour ces textures, il va l'attacher plutôt que de simplement l'étirer. Donc maintenant, nous avons juste besoin de définir une taille pour l'arrière-plan. Donc la largeur et la hauteur ici à droite, W
et H. Et donnons juste une taille qui devrait être assez bonne pour notre niveau. Vraiment aussi grand que tu veux, c'est bon. On pourrait juste le faire 1000 par 1000 pixels. Et ils sont fondamentalement, vous avez une base d'arrière-plan répétitive que vous pouvez utiliser pour votre niveau. Donc maintenant, nous allons juste glisser ça dans la position dont nous avons besoin et nous serons à peu près bons à partir. Une chose à noter lors de la création de l'arrière-plan de cette façon est que vous ne voulez pas utiliser les outils de mise à l'échelle si vous avez besoin d'étendre l'arrière-plan plus loin. Si vous prenez sur l'échelle, sur le bord de ce sprite et que vous l'étirez,
il va encore étirer l'image. Donc, si vous avez besoin d'une longue carrière, vous devriez venir ici à la région et ajouter quelques pixels supplémentaires ici. Donc 1200 avec, vous pouvez voir l'élargi sans avoir aucun étirement. Il ajoute juste plus de tuiles et qui est ce que nous voulons. Alors nettoyons le niveau un peu plus. Donc, je vais maintenant faire un clic droit sur le sprite initial, que nous allons supprimer dans une minute et ajouter un nœud enfant. Et ce nœud enfant va juste être aussi simple nœud 2D. Donc, c'est fondamentalement un nœud générique et nous pouvons l'utiliser comme la racine de notre scène. Donc, tout ce qui va réellement dans la scène serait juste imbriqué en dessous. Créons ça. Et maintenant, nous pouvons prendre ce nœud et en faire la racine de cette scène de niveau. Donc, je vais faire un clic droit ici et je vais faire racine de scène. Donc maintenant, cette image de sprite d'idole est imbriquée sous le nœud 2D et le fond bleu est imbriqué en dessous de cela. Donc je vais prendre le fond bleu. Je vais faire un clic gauche et le faire glisser et le mettre au-dessus du nœud 2D. Donc maintenant il n'y a pas d'enfants de cette feuille de sprite d'idole. Et nous pouvons supprimer cela en cliquant avec le bouton droit dessus et en faisant couper ou supprimer des nœuds. Allons-y et débarrassons-nous de ça. Et maintenant enfin, nous pouvons prendre le nœud 2D et je vais juste renommer ceci au niveau 1 pour correspondre au nom du fichier enregistré. Et peut-être l'arrière-plan. Je vais juste renommer cet arrière-plan pour que nous puissions peu près nous mettre en place au point où nous pouvons commencer à
ajouter un terrain réel pour un personnage sur lequel se tenir debout, des plates-formes et tout ça. Alors allons de l'avant et appuyez sur le contrôle ou la commande S, sauvegardez le niveau, et ce sera tout pour cette vidéo. Et dans le prochain sera de construire le terrain où les personnages peuvent se tenir.
5. Tilemaps et tableaux pour créer des niveaux: Dans cette vidéo, nous allons travailler avec des cartes de tuiles et des jeux
de queue afin de créer le terrain sur lequel notre personnage va se tenir. Donc, à l'intérieur de notre scène de niveau 1, en haut à gauche, je vais cliquer avec le bouton droit ici et ajouter un nouveau nœud enfant. Celle-ci va s'appeler une carte de tuiles. Vous pouvez donc simplement taper la carte de tuiles pour trouver cela et appuyer sur Créer. Donc, cette carte de tuiles est, nous pouvons voir sur le côté droit, va avoir besoin d'un jeu de tuiles. Donc, le jeu de queue va être créé à partir des images de notre projet, et ce sera spécifiquement les images de taille de tuile. Il y a donc le fichier de titre qui existe ici et Godel. Et puis c'est l'image réelle où ce jeu de queue tire de ses tuiles. Donc, nous allons cliquer sur la section vide pour tuile certains hit nouveau Tulsa. Donc, nous pouvons cliquer sur, et quand nous le faisons, il y a une nouvelle fenêtre ici en bas appelé jeu de tuiles. Nous devons donc ajouter une image ici afin de commencer à choisir les tuiles de cette queue. Donc image, de sorte que nous pouvons trouver les images appropriées pour créer
les tuiles de la catégorie de terrain à l'intérieur de notre pack d'aventure de pixel. Donc nous pouvons voir à partir de la vignette il y a en fait tout
un tas de terrains différents que nous pouvons utiliser ici. Et il existe dans une seule image. Allons de l'avant et faites un clic gauche maintenez et faites glisser ceci dans la liste de notre jeu de tuiles. Quand nous le ferons, et nous verrons que l'image se développe un peu plus ici. Et vous pouvez maintenir la touche Contrôle et faire défiler la molette du milieu de la souris pour effectuer un zoom avant et arrière. Bien sûr, il peut également zoomer sur la droite. Donc, nous voulons que ce soit assez grand sur l'écran pour pouvoir identifier clairement les tuiles avec lesquelles nous travaillons. Il y a donc trois types de tuiles que nous pouvons créer pour notre ensemble de tuiles. Il y a la nouvelle tuile unique, qui va essentiellement définir une région ici, qui est une tuile que vous pouvez faire un clic gauche sur la droite ici lorsque vous peignez vos tuiles, puis juste un clic gauche et la mettre sur le carte. C' est donc l'option la plus simple. Il y a aussi un nouvel art ou une tuile va travailler avec cela dans cette vidéo. Ainsi, la tuile automatique, vous pouvez essentiellement définir un ensemble de tuiles. Ensuite, vous pouvez créer un masque de bits pour ces tuiles dans le BitMask détermine quelles tuiles doivent border les autres tuiles. Donc, dans un sens, vous pouvez faire en sorte que celui-ci ici sur la gauche, vous pouvez voir que c'est évidemment une tuile d'extrémité gauche. Donc, vous pouvez faire en sorte que ce soit celui qui est
toujours à la fin en mettant en place des masques de bits, ce qui crée essentiellement les règles pour la façon dont ces tuiles devraient être à côté de l'autre. Et puis il y a aussi un nouvel Atlas, que vous pouvez définir tout un tas de tuiles. Et puis vous aurez une liste sur la droite. Vous pouvez simplement sélectionner celui que vous voulez. Avant de commencer à faire cela cependant, nous allons cliquer sur la carte de tuiles. Donc, sur la scène de gauche ici. Et nous voulons aller vendre et nous assurer que la taille de la cellule est fixée à 16 par 16, puisque c'est la taille de nos tuiles et le jeu. Donc, nous avons réglé le 16 par 16 ici pour correspondre à la taille de tuile conçue de l'œuvre afin que tout corresponde correctement. Donc, nous pouvons cliquer sur le jeu de tuiles et nous pouvons réellement voir qu'il a perdu sa référence au terrain ici puisque nous ne l'avons pas exactement sauvegardé. Donc, une idée décente pourrait en fait être de cliquer sur la carte de tuiles ici. Et puis avec cette tuile sur la droite, nous pouvons cliquer sur cette petite liste déroulante et enregistrer le jeu de tuiles dans un fichier. Donc, cela le fera de sorte que vous pouvez le référencer dans n'importe quelle carte de tuiles. Et les données seront fondamentalement sauvegardées dur à l'intérieur du projet. Donc je vais aller de l'avant et sauver ça ici. Et je suppose que je vais le mettre dans la catégorie des cartes. Et je vais aller de l'avant et appeler ce terrain d'aventure pixel. Donc, nous allons voir que le nom de ceci a changé pour le nom
du fichier enregistré comme un point ici, extension IaaS. Donc, nous pouvons toujours l'ouvrir et l'éditer. Et je pense que si vous allez dans le dossier maps, vous pouvez aussi double-cliquer dessus ici pour ouvrir la même chose. Donc, fondamentalement, le côté queue est sauvegardé à son propre emplacement maintenant et il n'est plus incorporé directement dans la carte de tuiles. Donc nous pouvons ajouter le terrain ici. Je vais juste faire glisser ça et encore,
et cette fois, allons de l'avant et frappons une nouvelle tuile auto. Donc, nous allons devoir définir une région pour ce sont
l'une des fonctionnalités vraiment utiles est cette activer Snap ici. Donc, nous pouvons voir que cela nous permettra de nous accrocher dans la grille. Donc, si nous faisons un clic gauche ici une fois, cela va définir une région, et ensuite nous pouvons changer les paramètres afin que nous puissions réellement obtenir les tailles désirées. Donc, sur la droite, nous avons des options de capture ici. Donc, il s'agit du nombre de pixels que vous voulez qu'il accroche en termes d'étapes que vous pouvez faire 16 par 16. Je pense que je vais te montrer, disons quatre par quatre cette fois. Donc, vous pouvez voir que la queue est fondamentalement brisée dans cette petite grille de pixels. Et chaque fois que nous devons faire des ajustements, comme, par exemple, créer les formes de collision plus tard, il peut s'accrocher à n'importe laquelle de ces intersections sur cette grille de quatre pixels par quatre. Donc je pense que ça marchera assez bien. Et puis nous avons sélectionné la tuile. Nous voulons changer la taille des sous-titres à 16 par 16 ici. J' ai également remarqué le mode OTA ou masque de bits, sorte que je n'ai pas de mode de masque de bits va être important lorsque vous déterminez. Fondamentalement, lorsque vous décomposer votre tuile, combien de coins sont là que vous pouvez affecter un masque de bits sur ou hors valeur deux. Donc, si vous avez deux par deux, cela signifie que chaque tuile est divisée en quatre BitMask potentiels. Et il y a aussi trois par 33 par trois minimum, ce qui vous donne neuf sous-titres de masque de bits par tuile réelle. Donc pour ça, on va travailler avec un deux par deux. Ce sont des tuiles plus simples ici. Et je crois que c'est aussi le cas. Mais quand nous arriverons ici à droite, ils auront besoin, je pense que trois par trois minimum, mais je vérifierai cela plus tard. Donc maintenant, nous devons redéfinir la région quatre, Notre premier. Maintenant, nous devons redéfinir la région pour nos premières tuiles automatiques. Donc, nous pouvons voir ici que nous avons quatre carrés ici, et ils sont de la bonne taille, 16 par 16, grâce à la taille des sous-titres. Mais nous allons vraiment avoir besoin de faire un clic gauche ici en haut et ensuite faire glisser cela sur toute notre région de blocs de pierre. Donc, je vais zoomer un peu, assurer que tous les coins correspondent pour que vous puissiez voir ce qui est défini comme la région parce que c'est cette ligne verte qui décrit tout. Vos tuiles sont essentiellement partout où ces lignes vertes se croisent. Et ça devrait être comme ça en ce moment. Donc, nous faisons un BitMask deux par deux. Donc ça va être très simple. Donc, je vais passer en mode masque de bits et cela va configurer la tuile automatique. Donc, pour cette tuile, on va en avoir besoin pour ressembler à ça. Vous pouvez donc simplement cliquer avec le bouton gauche de la souris et maintenir et faire glisser la boîte rouge là où vous en avez besoin. Donc, ma compréhension du masque de bits dans Godel est que lorsque vous
avez un masque de bits activé avec le carré rouge va
déterminer où cette tuile bloque à d'autres tuiles pour voir si elle correspond au masque de bits afin de déterminer s'il devrait être la tuile qui est choisie. Donc, dans ce cas, étant un coin supérieur gauche, il en a un en bas à droite. Donc, il va chercher à la fois à droite et vers le bas pour voir s'il y a des tuiles là-bas. Donc, dans ce cas, si elle correspond à la fois vers le bas et vers la droite, alors cela peut être une tuile d'angle sur cette pièce. Donc, dans ce cas, s'il trouve une tuile vers le bas et vers la droite, alors il peut être enregistré comme la tuile correcte pour être automatiquement sélectionné. Mais il y a aussi les zones où le BitMask est désactivé qui doivent être prises en considération. Donc, dans ce cas, il ne serait sélectionné que si vers le bas et vers la droite une demi-tuile. Mais aussi dans ce cas qu'il n'y a rien à gauche. Comme vous le voyez, le masque de bits en haut à gauche et en bas gauche sont désactivés et aussi rien ci-dessus. Donc, si nous avons deux masques de bits activés dans une direction pour un masque de bits deux par deux, alors cela va signifier que vous allez regarder directement vers le bas plutôt que vers la droite et vers le bas. Et si vous avez tous les masques de quatre bits activés, alors cette vague carrée a essentiellement un fond noir ne sera sélectionné que si elle est entourée dans toutes les directions par d'autres tuiles de ce titre auto spécifique. Ainsi, seules les tuiles sélectionnées à partir de cette vignette automatique vont tenir compte de la sélection de la tuile sélectionnée. Donc, si plus tard vous mettez, disons l'une de ces pièces à côté de lui, qui est une tuile auto totalement différente. Cela n'aura aucune influence sur la sélection de ces tuiles. Seules ces tuiles ont influencé les autres tuiles de cette tuile automatique. Donc, pour ces tuiles à droite, vous pouvez voir que trois des
quatre points BitMask sont marqués sur et qu'un seul est désactivé. Donc, dans ce cas, vous cherchiez qu'il y ait tuiles
adjacentes de cette queue auto sur la gauche et au-dessus. Et je pense aussi que le haut à gauche, si vous allez coins en diagonale comme ça, mais il n'y en aurait pas un vers le bas
et vers la droite dans ce cas parce que cette tuile est éteinte. Donc, pour le dire simplement, lorsque vous êtes adulte Heil dessine sur votre carte de jeu, il va sélectionner le meilleur ajustement dans cette configuration de tuiles auto. Donc, idéalement lorsque vous travaillez avec BitMask, vous n'auriez qu'une configuration de masque de bits pour chaque possibilité à l'intérieur de chaque masque de bits. Notez que bien que quatre de ces tuiles aient une sur quatre du BitMask sur qu'elles sont dans toutes les directions différentes, vous n'
aurez donc jamais de chevauchement avec cette simple tuile automatique. Enfin, si vous passez au mode masque de bits adulte-enfant, vous remarquerez qu'il y a trois par trois minimum et trois par trois comme une autre option. Donc, les deux vont avoir neuf points de masque de bits par tuile, puisque c'est trois par trois, nous multiplions que vous obtenez neuf BitMask, donc vous pouvez en avoir un au milieu. Et nous les utiliserons plus tard pour ces pièces de terrain ici. Et en fait, ainsi que ces petites plates-formes. Donc, si nous cliquons sur la carte de tuiles maintenant, nous verrons que notre tuile de terrain est là pour être placée sur le script. Donc on peut juste aller de l'avant et placer des tuiles. Mais ce que vous remarquerez, c'est que si vous n'avez pas au moins un deux par deux, le masque de bits deux par deux ne peut pas fonctionner. Donc, si vous allez tout droit et vous aligner comme ça, vous allez juste obtenir une tuile sélectionnée. Donc, pour que le masque de bits deux par deux fonctionne, vous devez avoir au moins un carré deux par deux. Donc on peut voir que je commence à construire ça, ça vient de sortir fonctionne parfaitement et le centre est rempli. Donc, avec d'autres carreaux, il devient vraiment facile de créer différentes formes sans avoir à se soucier exactement de la queue qui va où. Donc, si vous pouvez réussir à le configurer pour vous-même, Il est assez pratique de travailler avec et de les montrer un peu. D' autres tuiles, je vais juste enlever un couple de ces points intérieurs ici et vous pouvez juste le voir. Juste du genre de travail. Alors revenons à la tuile assise et créons quelques tuiles supplémentaires. Donc, nous devons répéter la même chose pour ici, celui-là, celui-ci, celui-là et celui-là. On peut donc copier et coller un peu six fois. Donc, de retour dans le jeu de tuiles, allez en mode région afin de voir les noms de chacune de ces tuiles automatiques, je vais cliquer sur ce petit bouton d'info sur le côté droit. Donc, vous pouvez voir ceci est terrain 16 par 16 tuile. Donc, ce que nous devons faire est de créer une nouvelle tuile automatique et nous allons
définir la même boîte que la région. Donc nouvelle auto, cliquez en haut à gauche, maintenez-le enfoncé et faites glisser une boîte autour de cette zone pour notre deuxième vignette automatique. Maintenant, nous pourrions aller en mode masque de bits et tout définir. Encore une fois, ce ne serait pas difficile pour celui-ci, mais encore plus rapide, nous pouvons juste cliquer ici sur cette vignette automatique et appuyer sur le bouton Copier pour le BitMask, puis cliquer ici pour celui-ci et juste appuyer sur le bouton Coller, ok, mais il n'a pas besoin d'avoir une taille de 16 par 16 sous-titres en premier. Donc, pour trouver cela ici sur la droite pour chacune des régions que vous créez, Faisons une nouvelle vignette automatique. Je vais devoir zoomer un peu pour qu'on puisse le voir
ici et faire glisser une boîte autour de celle-ci. Assurez-vous que la taille des sous-titres est définie sur 16 par 16. Maintenant, nous pouvons aller à BitMask et le coller, puisque nous avons déjà celui de celui-ci copié dans le tampon. C' est donc trois tuiles automatiques créées. Faisons la tuile automatique, continuez à répéter le processus. Donc 16 par 16 bits Mode Masque, collez-le dans. Nouvelle tuile automatique, 16 bits, 16 bitmask, collez-la et vous obtenez à peu près l'idée. Alors finissons ce dernier ici. Alors je vais le coller. Et oui, parfois 16 par 16, et cela devrait être bon pour ceux. Maintenant, le même masque de bits ne fonctionnera pas pour ceux-ci. Vous pouvez voir que ce sont un peu différents et ces petites plates-formes de bar aussi, je pense que celui-ci a réellement le même carrelage ADL. Alors créons un de plus ici pour ça. Ensuite, nous pouvons tester cela et nous assurer que cela fonctionne toujours. Donc, nous allons coller dans le BitMask, et nous y allons. Donc maintenant, si nous cliquons sur la carte des tuiles, nous pouvons voir que nous avons sept terrains différents. Donc, sélectionnez parmi. Alors commençons à en dessiner un. Et vous pouvez voir que chacun d'entre eux, parce qu'ils sont définis comme leur propre queue ADL, ils fonctionnent indépendamment les uns des autres. Donc, avoir un titre auto à côté d'un autre ne va pas affecter quoi que ce soit. Nous l'avons fait. On peut juste mettre cette brique là-bas. Et donc nous pouvons aussi dessiner d'autres terranes ici. Alors faisons juste un deux par deux. Et là, nous avons un terrain de terre. D' accord. Alors allons de l'avant et mettons en place quelques masques de bits de plus. Donc, de retour dans le jeu de titres, nous devons définir les autres régions de tuile pour ces zones. Donc, faisons glisser une boîte autour de lui appelée un mode de masque de bits. Et cette fois, nous allons en fait utiliser un masque de bits trois par trois, ce qui aura du sens quand vous le regarderez réellement. Changez donc le mode de masque de bits automatique à trois par trois. Et croyez que nous voulons 16 par 16 comme sites de sous-titres pour le BitMask. Donc, si nous zoomons un peu, nous pouvons commencer à dessiner ça. Donc ça va ressembler à la partie supérieure. Donc, nous pouvons voir que cette première tuile a un carré au centre, puis un carré à droite. Et bien sûr, cela nous donne 9 bitmask carrés total à l'intérieur d'une seule tuile. Donc, si nous appelons le centre, un, signifie essentiellement là, il cherche lui-même pour être une tuile et le SAT, et puis aussi le BitMask sur la droite signifie qu'il va aussi chercher les quatre bonnes tuiles. Donc, si c'est à la fin, ça va se compter pour le milieu. Et s'il y a une queue à droite, ça va correspondre à ça. Et puis cela peut essentiellement vous permettre de créer un rôle de ce type de tuile en ayant juste ces pièces les unes à côté des autres. Et puis ce serait la fin, et ce sera la fin et ce serait le milieu parce qu'il cherche à gauche pour une tuile et à droite pour un titre aussi. Ensuite, nous avons celui-ci ici, juste un seul point. Donc ce sera la tuile quand il n'y a pas d'autres tuiles autour, tout comme une seule tuile. Et puis nous pouvons traîner 16 carrés au milieu ici, que les autres n'aient rien. Vous pouvez donc utiliser cette forme pour créer ce que vous voyez ici. Fondamentalement, il suffit de créer un bloc de titre deux par deux. Et puis pour une plate-forme descendante, nous avons ceci. Donc une sorte de sens inverse pour celui-là par ici. Aller à la carte de tuiles. On peut voir ça en jeu. Si je traîne ici, on peut créer une petite plateforme. Nous pouvons également créer un deux par deux pour avoir ce genre de bloc. Ceux individuels ne seront que ces petits carrés. Et puis bien sûr, nous pouvons faire de haut en bas aussi. Donc, à ces fins fondamentalement, vous pourriez voir que dans l'image de jeu de tuiles, cela fonctionnera très bien pour cela. Mais en créant des choses comme ça, je ne pense pas que ces tuiles soient réellement conçues pour cela, mais si vous savez différemment, hésitez pas à mettre un commentaire et je peux me corriger là-dessus. Mais fondamentalement, c'est ainsi que j'ai pu l'installer pour cette partie spécifique de la carte de tuiles. Mais c'est essentiellement comme ça qu'il a pu l'installer pour cette partie spécifique de l'ensemble de tuiles. Revenons donc ici pour le terrain du jeu de tuiles et nous pouvons copier ce masque de bits vers les autres tuiles. Donc nouvelle tuile auto. Il est créé ici, 16 par 16 en mode masque de bits trois par trois. Et nous allons monter ici, copier celui-ci et le coller dans celui en dessous, et répéter le processus pour les deux autres. Créons ce masque de bits, collez-le dans, et assurez-vous que trois par trois et 16 par 16, les informations doivent se superposer correctement. Nouvelle mosaïque automatique, faites glisser la région, mais Mode masque, coller à eux, a changé le mode de sous-titre trois par trois 16 par 16. Et c'est essentiellement des ensembles de ça. Maintenant, il y a ces trois dernières tuiles de plate-forme. Il va falloir dessiner une région autour d'eux. Alors allons-y et faisons-le. Assurez-vous que bien que la hauteur de la plate-forme ici est seulement d'environ 45 pixels, que vous faites réellement les 16 pixels complets car il va toujours être carrelé 16 pixels par 16 pixels avec le reste du jeu. Ou du moins c'est comme ça que je vais le faire de toute façon. Donc, nous prenons le mode de masque de bits de tuile automatique et le mettons en 3 par 3 minimum. Et la taille des sous-titres 16 par 16. Et puis le masque de bits va ressembler à ceci. Je crois. Alors. Allons-y et testez-le sur la carte des tuiles. Nous pouvons cliquer sur la plate-forme et son dessiner une ligne. Donc, notez que les extrémités disent à leur place, si j'ajoute une autre pièce, la fin se déplace vers la droite. Donc c'est ce qu'on veut. Et cela fonctionnera tant que vous ne mettez pas une autre plate-forme qui est comme juste en dessous, comme ceci. Tant que vous ne le faites pas,
cela devrait fonctionner correctement. Donc je pense que ce sera suffisant pour nos besoins ici. Revenons à cette carte de tuiles. Je vais double-cliquer dessus et le terrain du dossier des cartes. Et copions simplement ce masque de bits sur deux nouvelles tuiles automatiques supplémentaires. Donc nouveau titre auto et nous sélectionnons une boîte ici, passez à trois par trois minimum 16 par 16. Et puis masque de bits, nous allons le copier d'ici à là. Donc, ils sont fondamentalement les mêmes. Et enfin, la version métal. Créons ces trois par la pâte de masque de bits 31616. Ce sera donc la configuration automatique de tuiles pour toutes ces tuiles de MNT. Maintenant, vous pouvez accéder à la partie amusante où si vous cliquez sur la carte de tuiles, vous avez toutes ces tuiles automatiques que vous pouvez utiliser pour construire votre propre niveau de jeu avec. Donc, par exemple, si je veux des plates-formes et peut-être que cela pourrait être utilisé pour une plate-forme, vous pouvez un peu sauter hors de. Si tu le voulais, juste penser à l'avance. Si vous voulez créer des blocs longs, vous l'avez, certains grands, vous pouvez le faire de cette façon. Et puis ces autres tuiles peuvent être utilisées pour mettre en place le terrain de base pour votre personnage. Ceux-ci doivent juste être au moins une tuile deux par deux pour la tuile automatique correctement, comme ça. Et tu devrais être bon d'y aller. Donc, vous pouvez juste construire tout ce que vous voulez tester maintenant. Et puis dans les prochaines vidéos, nous commencerons à créer une plate-forme ou un personnage simple que nous pouvons utiliser pour tester ce niveau. Donc je vais dire pour l'instant et jusqu'à la prochaine vidéo, je te verrai alors.
6. Configurer des animations de joueurs: Donc, dans cette vidéo, nous allons commencer à créer un personnage de joueur et une caméra. Donc la première chose que nous allons devoir faire ici est de créer une nouvelle scène et de la faire commencer par un corps cinématique 2D. Donc, je vais ajouter ceci à un nouvel onglet de scène ici en haut. Et je vais cliquer sur un autre nœud parce que je veux que la racine soit un corps cinématique 2D. Donc, si vous ne le savez pas déjà, un corps cinématique 2D est fondamentalement un caractère physique qui se
déplacera en fonction des règles que vous programmez dans le code de script. En d'autres termes, une grande partie de la façon dont votre personnage se déplace va être manuelle. L' autre option serait de créer un corps rigide 2D. Et ceux qui travaillent ont des forces agissent sur le corps plutôt que de contrôler directement le mouvement du personnage à l'intérieur de son script. Donc, pour les jeux et les jeux de puzzle basés sur la physique comme, disons Angry Birds, le corps rigide aurait beaucoup de sens là puisque vous voulez que les forces agissent sur le personnage. Mais si vous essayez de créer un jeu de plateforme, le corps
cinématique 2D est généralement ce que vous allez vouloir. Alors allons de l'avant et commençons par créer avec ce corps cinématique 2D. La première chose que je vais faire est de le renommer en joueur. Et puis nous allons créer un dossier où les personnages peuvent s'asseoir. Cela inclurait donc le personnage principal du joueur. Les ennemis peuvent être des PNJ, tout ce dont vous avez besoin. Donc, je vais faire un clic droit ici dans le système de fichiers et créer un dossier appelé caractères. Et maintenant, je vais frapper Command ou Control S
afin de sauver le joueur vu à l'intérieur du dossier de ce personnage. Alors allons-y et sauvegardons ça là-dedans. Maintenant, vous remarquerez qu'il y a un point d'exclamation ici et avertissement de configuration de
nœud indiquant que ce nœud
n'a pas de formes, il ne peut pas entrer en collision ou interagir avec d'autres objets. Nous devons donc ajouter une forme de collision trop profonde à ce joueur pour qu'il puisse réellement entrer en collision avec,
disons, le sol ou d'autres ennemis, ainsi de suite et ainsi de suite dans le jeu. Donc, je vais cliquer avec le bouton droit ici et ajouter un nœud enfant. Donc nous voulons une collision forme 2D. Donc je vais ajouter ça. Et il remarque aussi ici que la forme de collision nous oblige
en fait à créer un type de forme. Pour que ça marche. On le fera dans une minute. Donc la prochaine chose que nous allons vouloir, c'est un sprite. Donc je vais faire un clic droit ici. Je vais ajouter un nœud enfant. Et pour ce personnage spécifique, nous irons avec un sprite animé. Et la raison en est la façon dont ces packs configurent les feuilles de sprite. Je vais vous montrer ce que je veux dire par là dans une minute. Mais pour l'instant, allons-y avec le sprite animé. Et selon la façon dont sont vos sprites spécifiques, le noeud sprite peut fonctionner mieux qu'un sprite animé. Alors commençons à ajouter les animations à ce sprite animé. Et vous verrez un peu de ce dont je parle. Ici, sur la droite, il y a cette section appelée cadres et vide. Donc, nous voulons changer vide pour un nouveau sprite cadres. Donc, c'est quelque chose que nous pouvons cliquer sur. Et lorsque nous cliquons sur les cadres sprite, la
fenêtre apparaît ici en bas et nous pouvons créer des animations individuelles. Donc, si nous regardons l'art de la grenouille ninja, qui va être dans l'aventure pixel un pack, puis le personnage principal et puis la grenouille ninja. Nous pouvons trouver, disons notre animation inactive par ici. Donc, lorsque vous créez une animation pour un sprite animé, vous lui donnez juste un nom et vous pouvez créer de nouvelles animations ici. Donc, nous allons faire ajouter des cadres de feuille de sprite. Donc, si nous allons dans l'art, l'aventure pixel, un, personnage
principal, grenouille ninja, et puis ralentir, nous pouvons saisir ça. Et donc vous verrez que ici pour horizontal sera vers le haut, suffit de spécifier le nombre de colonnes, puis verticalement quatre lignes. Donc 11 par un nous donne 11 cadres sprite. Nous pouvons sélectionner ou effacer tous les cadres ici et ajouter 11 cadres. Donc, cela fonctionnera vraiment bien pour ce genre de configuration où chacune de vos différentes animations de brisé dans leur propre feuille de sprite. J' ai donc mentionné, pourquoi voudriez-vous utiliser du sprite animé sur le composant sprite ? Allons ajouter un composant sprite et je vais vous montrer ce que je veux dire. Donc nous allons ajouter les sprites et pour l'instant je vais juste cacher le sprite animé en cliquant sur ce petit globe oculaire. On va aller à la texture. Et puis vous pouvez voir qu'on peut mettre exactement une texture ici. Ça pourrait être un pack de feuilles de sprite. Donc, par exemple, je peux mettre inactif ici et vous pouvez voir les trames se charger très bien. Donc, si nous développons la section animation, vous pouvez voir des cadres horizontaux et verticaux afin que nous puissions définir des lignes et des colonnes comme avant. Donc je pense qu'on a besoin de 11 cadres horizontaux, ok ? Et cela divise les cadres individuels. Donc on peut passer par les images ici et jouer notre animation. Donc, nous pourrions animer en utilisant ce paramètre de cadre. Mais le problème est que vous ne pouvez avoir qu'une seule texture de sprite. Si nous changeons cela en, disons ce saut, vous pouvez voir qu'il utilise toujours des cadres horizontaux, 11 par un. Cette animation est complètement différente. Il n'a qu'une seule image, donc j'aurais besoin de changer cette valeur en une. Et puis chaque fois que nous jouons une animation, nous devrions non seulement changer la texture, mais aussi le nombre d'images horizontales et verticales. Et en spécifiant des images individuelles sur l'animation par la base de l'animation. Quand nous allons de l'avant et créer un lecteur d'animation, qui serait normalement correct si tout était condensé en un seul paquet, comme un seul fichier de texture. Et puis vous pouvez juste passer par tous les cadres ici et ce ne serait pas un problème. Mais parce qu'ils sont séparés, sprite
animé a plus de sens ici. Les deux feront le travail, mais si vous avez différentes animations qui sont séparées, il est beaucoup plus facile de cliquer simplement sur Ajouter une animation. Et nous allons juste courir ici et faire glisser et déposer. Vous voulez réellement appuyer sur ce bouton afin que vous puissiez
diviser les cadres, puis vous cliquez sur Exécuter. Je pense que nous avons 12 par un ici. Sélectionnez Effacer tous les cadres et ajouter des cadres en haut à droite et voilà votre animation. Donc nous pouvons vérifier qu'ils jouent la boîte à droite pour voir à quoi ressemble notre animation. C' est beaucoup plus lent que prévu. Donc, dans la boîte sprite frames, nous voulons changer la vitesse à 20 FPS et il y a la vitesse correcte pour lire l'animation. Nous devons définir cela sur notre animation par animation. Donc, cliquez sur inactif et assurez-vous qu'il est également en train de jouer à 20 FPS. Et vous pouvez voir que ça fonctionne beaucoup plus lisse là-bas. Donc, vous continuez à descendre cette liste pour créer le reste de vos animations. Donc je suppose qu'on peut tout ajouter en ce moment. Pourquoi pas ? Ajoutons donc une seule image d'animation de saut. Donc je vais juste ajouter ça comme sauté et puis on aura la faute. Donc, la différence entre sauter et tomber aussi loin que quand votre personnage va descendre et puis sauter va être quand votre personnage est en hausse. Donc, vous utilisez fondamentalement la vitesse verticale pour comprendre cela, mais c'est pour plus tard. Donc, nous pouvons aussi faire un double saut. Donc, je vais ajouter une nouvelle animation. On va changer ça en double saut de soulignement, je suppose. Et ajoutons cette animation. Je peux voir que c'est six images, donc six horizontales, une verticale, sélectionnez Effacer toutes les images, ajoutez-les, puis nous avons notre animation double saut. Donc 20 FPS, et c'est la vitesse de lecture correcte. Alors voyons quoi d'autre. 3.5 ici, frapper et sauter au mur. Alors frapper, je crois que ce sera quand ton personnage subit des dégâts, Ajoutons cette fin. Donc nouvelle animation frappé, puis nouvelle animation tout le saut de soulignement. Prenons les cadres pour cela à partir de leurs fichiers de texture séparés. Ça ressemble à sept cadres. Donc sept par un, sélectionnez Effacer, Tout, mettez-le à 20 FPS. Et nous pouvons le tester en changeant à cette animation. Ok, eh bien, ce double saut et on veut frapper. Donc, il y a l'animation Hit assez lisse là-bas. Alors que Trump est le dernier. Alors remplissons cette irréelle rapidement. Ajoutez de l'animation tout en sautant cinq images, donc 5 fois 1, sélectionnez Effacer toutes les images, ajoutez-les et assurez-vous que ce FPS est de 20 FPS. Donc, nous pouvons vérifier toutes les animations et juste s'assurer qu'elles sont toutes 20 FPS. Ok, donc c'est fondamentalement nos animations pour le personnage mis en place gentil et facile avec un sprite animé.
7. Entrée et mouvement à gauche: Alors maintenant que nous savons où est notre personnage en termes de ce brillant en référence à l'objet de caractère cinématique. Nous pouvons essentiellement aller à l'animation, mettre au ralenti, et nous pouvons déterminer où les tueurs et la forme
devraient utiliser l'état inactif comme point de référence. Donc, en collision en forme 2D, je vais cliquer sur la forme à droite et nous pouvons faire une forme de capsule. Donc, si vous faites une forme de capsule, il y a la possibilité pour un personnage de glisser un peu hors du bord si vous approchez du bord. Si vous ne voulez pas que votre personnage puisse glisser accidentellement hors du bord. Vous voulez qu'il soit soit purement sur le sol ou légèrement hors du sol et donc tomber, alors vous pourriez utiliser une forme rectangulaire et à la place, je vais aller avec la forme de capsule pour l'instant. On pourrait changer ça plus tard, donc nouvelle forme de capsule. Et nous voulons que cela corresponde à peu près là où le personnage se trouve sur le sol. Donc je vais rétrécir ça. Et en fait, je veux voir la forme de collision au-dessus des sprites. Je vais réorganiser l'ordre. Donc, le sprite animé va être sur le dessus. Vous faites simplement glisser et déposer. Et maintenant, nous pouvons voir la forme de la collision. Alors, changeons la transformation. Déplace-le un peu vers le bas. Je pense que j'ai ajouté un 9.5 pixels ou plus. Et maintenant, nous avons juste besoin d'ajuster les choses un peu plus loin. Obtenez simplement la forme que vous voulez pour les collisions avec d'autres objets tels que le plafond ou le sol. Peut-être que nous voulons vraiment que le personnage ait une boîte à succès relativement élevée. Donc si tu te coques la tête dans le plafond, ça devrait arriver ici, pas ici. Alors, prenons la transformation et déplacons ça un peu plus haut. Alors voyons cinq, d'
accord, et c'est probablement assez bon, juste là. Donc, actuellement, les paramètres sont de cinq pour la position des pixels. Et si nous cliquons sur la forme de la capsule, nous avons un rayon de 7.1. Je vais juste arrondir ça à sept et la hauteur que je ferai 10. Et cela devrait faire pour nos formes initiales de capsules. Donc, notre personnage devrait pouvoir entrer en collision une fois que nous avons mis en place le mouvement, ce qui va nécessiter quelques scripts. Alors d'abord, prenons le niveau. Donc, de retour sur l'onglet niveau, je vais fermer l'art et le système de fichiers aller aux personnages, et faisons simplement glisser ce personnage de lecteur sur la scène. Je vais les mettre un peu ici pour que quand on commencera à courir le jeu, gravité les fasse tomber au sol. Et puis on peut vérifier s'il est sur le terrain pour des choses comme être capable de se déplacer à gauche et à droite normalement. Donc, il est assez facile de vérifier cela et d'obtenir 0 aussi. Une des choses cool sur le corps cinématique 2D et le mouvement et Godel. Alors plongons dans la scène des joueurs. Nous pouvons ouvrir un éditeur qui va basculer dans la scène originale au niveau 1, c'est en fait une copie instanciée de la scène, donc vous pouvez simplement la mettre dans un tas de joueurs si vous voulez. Et ils sont tous séparés les uns des autres, mais ils basent tous ce que vous avez, les différents nœuds ici et le code basé sur cette scène de joueur originale. Et donc de toute façon, nous devons ajouter un script au joueur. Donc, je vais juste appuyer sur le bouton Nouveau script en cliquant sur le corps cinématique du joueur 2D cloué, qui est la racine. Vous verrez que cela lui donnera automatiquement le nom lecteur point Gd pour le script GD. Et il va le mettre dans le dossier Characters. Donc je pense que cela fonctionne très bien pour nous en termes d'organisation. Je vais donc cliquer sur Créer. Donc ce que nous allons devoir faire pour nous assurer que notre personnage peut bouger. Lorsque nous appuyons sur les touches, est de vérifier l'entrée lorsque le jeu est en cours d'exécution. Donc on va le faire dans une fonction appelée « Physique ». Vous remarquerez que le processus de fonction est commenté ici. Mais puisque le mouvement fait essentiellement partie de la physique du jeu, nous voudrions exécuter cela dans le processus de physique. Donc, tout ce qui a à voir avec le mouvement, collision ou la physique, en général, il est recommandé de l'exécuter dans la fonction de processus physique plutôt que dans la fonction de processus. Donc, l'une des différences avec le processus physique est qu'il va brûler un certain nombre de fois chaque seconde de la vie réelle. Où est la fonction de soulignement delta de processus peut s'exécuter plus ou moins de fois que cela. Donc, fondamentalement, le processus physique est cohérent et dans leur fonction de processus normal s'exécute à un nombre incohérent de fois par seconde. Donc supprimons tout ça ici pour l'instant. Donc, je vais écrire ici superposé pour la fonction, puis souligner le processus physique. Vous remarquerez que cela nous donne l'auto-complétion. Donc, je vais juste appuyer sur Entrée, je le termine. Il y a un paramètre ici appelé delta, c'est-à-dire le temps entre les images. Nous pouvons donc utiliser ceci comme information pour notre processus physique. Donc, ce que nous allons vouloir faire, c'est d'obtenir les commentaires. Donc, je vais simplement créer une variable ici appelée entrée. Et puis nous allons créer une fonction qui fonctionnera ici. Et je vais appeler qui obtient le port du joueur. Et puis nous avons juste besoin de créer cette fonction. Donc la fonction obtient l'entrée du joueur, d'accord ? Pas de paramètres. Et puis nous ajoutons les deux points à la fin, nous appuyons sur Entrée et maintenant nous pouvons commencer à écrire avec une fonction. Donc, nous pouvons juste créer une variable ici. Je vais l'appeler entrée var. Je vais mettre ce deux-points et ensuite je vais taper le type. Vecteur juste pour informer quelqu'un qui lit le code que cela est destiné à être un vecteur deux, qui est fondamentalement de flotter des nombres. Vous avez une valeur x, qui dans ce cas, elle sera utilisée pour l'importation horizontale ou le mouvement horizontal. Et puis vous pouvez avoir un composant y pour le vecteur, qui serait vertical vers le haut. Donc, si vous faites un jeu 3D, vous pourriez avoir un vecteur 3, qui ajoute la troisième direction, ce qui serait un peu comme votre profondeur dans l'arrière-plan, votre axe z. Ok, donc nous avons l'importation et nous devons commencer à obtenir les valeurs pour les entrées. Donc, nous avons un ensemble supplémentaire pour l'entrée horizontale et y à définir pour la verticale. Et donc input.txt. Et nous devons définir ça pour importer. Maintenant, la première lettre est capitale. C' est quelque chose que vous pouvez accéder et Godot par défaut, vous n'avez pas besoin d'écrire quoi que ce soit avant que cela apparaisse. Et puis il y a des fonctions que vous pouvez exécuter sur cette entrée. Donc, la fonction que nous voulons exécuter est obtenir la force d'action. Cela prend donc un paramètre et le paramètre est le nom de l'action. Donc, vous voyez par défaut il y a toutes ces actions d'interface utilisateur que nous pouvons saisir. Donc, nous pourrions simplement devenir paresseux et utiliser le soulignement de l'interface utilisateur gauche. Une autre option serait que vous puissiez définir une action client et l'appeler gauche, droite,
haut, bas, ou jouer un mouvement vers le haut, le bas, la gauche, la
droite, quoi que vous vouliez l'appeler, qui est totalement séparé de l'interface utilisateur gauche. Donc peut-être que vous avez des contrôles différents pour l'interface utilisateur, et peut-être que vous avez des contrôles différents pour le joueur, à vous comment vous voulez le faire. En fin de compte, nous sommes en train de trouver la touche que
nous voulons que le joueur appuie pour déplacer le personnage vers la gauche et la droite. Allons donc au menu du projet. haut à gauche, nous allons aller à la carte d'entrée des paramètres du projet, et ici nous pouvons définir les actions de notre jeu. Vous pouvez voir l'interface utilisateur à gauche, l'interface utilisateur haut et bas sont déjà définies. Donc, si nous le voulions, nous pourrions juste vérifier ces valeurs et ensuite utiliser les flèches vers le haut, vers le bas, vers la gauche, vers la droite sur notre clavier afin de supprimer le personnage pour le jeu. Je préfère généralement le mouvement WASD. Donc, je vais en fait ajouter une nouvelle action. Donc, ce sera séparé de l'interface utilisateur, gauche, droite, haut, bas. Donc je vais juste l'appeler à gauche ici en haut. Si vous créez un jeu multijoueur, vous pouvez l'appeler P1 pour le joueur un trait de soulignement à gauche. Tu sais, c'est vraiment à toi de choisir. Alors ajoutons k. Donc nous avons la nouvelle action, mais il n'y a pas de clés pour cela. Donc on veut appuyer sur le bouton « plus » sur la droite. Vous pouvez voir que vous pouvez ajouter dans le joystick, les commandes de
boutons, les commandes de boutons de la souris ou le clavier. Alors faisons le clavier. Et je vais frapper W sur le clavier pour régler la touche et appuyer sur Ok, alors attendez, eh bien ce serait en fait vers l'avant. Alors, changeons ça. Appuyez sur le bouton d'édition a pour gauche. Ok, et puis ajoutons l'action suivante. Tellement en place. Et puis nous pouvons faire vers le bas et à droite. Donc, pour chacun de ces reset ou clé, donc il sera w, bas sera S, et ensuite écrire sera d. Ok, donc les contrôleurs WASD, peut-être que nous voulons déplacer cela là-haut. Donc, il dit en fait que WASD a un peu plus de sens. Fermons ça. Donc maintenant, afin d'obtenir l'entrée x, nous allons réellement avoir besoin de faire des calculs entre deux valeurs. Donc, si on réglait le mouvement horizontal, il y a deux clés qui contrôleraient ça. Ce serait le bon mouvement et le mouvement de gauche. Donc, à droite sur l'écran va vous donner une valeur positive pour le x. puis à gauche sur l'écran va vous donner une valeur négative. Donc, comment nous le calculons ici est que pour le XML, nous allons d'abord obtenir la bonne valeur ici. Donc c'est positif. Je ne mets pas de négatif ici. V est juste positif. Si on va à droite. Et puis nous pouvons soustraire la force d'action de la gauche. Alors prenez l'action Force. Et maintenant, nous sommes partis. Assurez-vous qu'il y a les guillemets car il s'agit d'une chaîne. Et cela signifierait essentiellement avec un port clé. Si nous appuyons sur la droite, alors ce sera un. Et si nous appuyons sur Left the achy, alors ce sera aussi un. Donc, si vous appuyez à droite et à gauche en même temps, un moins un va s'annuler et vous obtiendrez un 0. Si vous n'appuyez pas sur la droite, mais que vous appuyez sur la gauche, vous aurez un négatif. Et si vous appuyez sur la droite mais pas sur la gauche, alors vous en aurez un. Nous pouvons donc l'utiliser pour déterminer quelle direction ce joueur doit se déplacer. Donc, pour la direction
y, cela peut être très similaire. Donc, pour ce jeu spécifique, comme il a ce style de plateforme classique, les touches haut et bas peuvent ne pas être réellement utilisées à la fin, mais nous pouvons toujours obtenir les valeurs d'entrée pour cela. Il peut y avoir une sorte de composant de mouvement plus tard qui dépendrait de l'entrée Y. Donc, nous pourrions aussi bien l'obtenir puisque nous avons déjà commencé. Donc, nous allons y entrer, et nous allons avoir de la force d'action. Et cette fois, nous cherchons vers le bas. Donc, cela peut sembler un peu déroutant, mais vers le bas est en fait positif lorsque vous faites des jeux 2D. Donc, vous descendez sur l'écran, signifie que votre valeur y augmente. Donc, nous voulons obtenir la force d'action vers le bas moins obtenir la force d'action vers le haut. Alors on y va. Et maintenant, nous avons
la configuration du vecteur correctement, donc nous voulons retourner cela afin qu'il puisse être utilisé dans la fonction principale du processus physique. Donc, nous passons à l'entrée, et nous en avons assez fini avec ça. Alors peut-être que je vais juste écrire un commentaire ici. Donc maintenant, pour déplacer le personnage, nous allons avoir besoin de déterminer sa vitesse. Donc je vais monter ici en haut et déclarer une variable ici. Je vais appeler ça la vitesse lointaine. Et je dirai juste que c'est un ou deux, comme on l'a fait dans la fonction ici. Donc, l'avantage de le déclarer ici est que cela est fondamentalement attaché au script du lecteur directement. Et nous pouvons utiliser cette valeur dans toutes les fonctions que ce script va utiliser. Donc, il est juste un peu accessible publiquement si nous sommes dans le processus
physique obtenir l'entrée du joueur ou toute autre fonction. Donc, cela signifie aussi que nous pouvons définir la valeur ,
puis la nouvelle valeur peut être utilisée dans d'autres fonctions aussi bien. Donc nous voulons régler la vitesse et nous allons le faire fonction du temps de direction de la vitesse de déplacement des joueurs. Mais on n'a pas établi à quel point ils sont rapides. Le joueur doit se déplacer, donc nous avons besoin d'une autre variable. Donc, je vais à cette fois exporter le type n, et je vais lui donner un type, soit flottant ou entier. Donc, si vous voulez pouvoir utiliser des points décimaux, vous utilisez un flotteur. Si vous voulez qu'il soit des entiers comme un 1,
2, 3, 4, 5, 6, 7, pas de virgule décimale. Ensuite, vous pouvez écrire INT pour Nt. Mais je pense qu'il n'y a vraiment aucun inconvénient ici à utiliser des flotteurs. Et cela vous permet juste d'être plus précis avec la vitesse exacte. Donc, je vais faire de la variable un flotteur, et nous devons mettre export float var ici. Et après cela, nous lui donnons un nom. Donc, je vais l'appeler vitesse de déplacement,
déplacer la vitesse de soulignement plus spécifiquement dans religieux, étant donné un nombre arbitraire comme et 200 pour l'instant, nous pouvons toujours le changer plus tard. Maintenant, la différence entre faire un float d'exportation loin et un var est que cette variable ne va pas apparaître sur l'inspecteur pour le caractère. Mais lorsque vous exportez float, le flotteur détermine le type, essentiellement comment cela devrait être défini dans l'Inspecteur. Et puis l'exportation va la rendre visible publiquement. Donc, si je clique ici sur le joueur, nous pouvons voir que la variable de vitesse de déplacement est définie ici et nous pouvons changer cela à tout ce que nous voulons. Il est par défaut ce que nous avons défini dans le code, mais nous pouvons changer cela sur une base d'instance. Donc, si j'ai trois joueurs ici dans la scène principale, je peux cliquer dessus. Je peux changer les valeurs ici, donc 300. Mais nous pouvons encore sauver ça. Retourne sur la scène des joueurs. Et vous pouvez voir ici que c'est 200. Mais sur la copie d'instance, c'est 300. Des caractères différents, même s'ils sont basés sur le même code, les mêmes nœuds peuvent avoir des paramètres différents. Donc, vous pouvez aussi l'utiliser pour des choses comme la couleur. Si tu veux prendre une grenouille
verte, je ne sais pas , et la rendre bleue ou quelque chose comme ça. Nous avons donc notre valeur Move Speed. Maintenant, nous devons multiplier cela par la direction. Alors allons dans le script et je vais prendre l'entrée x. Je vais multiplier cela par la vitesse de déplacement pour obtenir le mouvement de direction x. Donc la vitesse, je vais juste mettre ça égal au vecteur 2 ici. Je vais peut-être diviser ça en plusieurs lignes. Donc ce sera notre ligne X et ce sera notre ligne filaire. Je vais juste mettre ça à 0 pour l'instant. Plus tard, nous ajouterons la gravité et le saut. Mais ici sur la deuxième ligne pour X, on va le faire et mettre ce X. Donc c'est la direction qu'on va vers les fois que par la vitesse des mouvements. Donc parce que la droite est 1 O sur le clavier, gauche est 1 O sur le clavier, nous allons obtenir 0 ou plus 200 ou moins 200. Et nous pouvons utiliser cette vitesse pour le mouvement. Donc déplacer un corps cinématique en 2D lui-même, une fois que vous avez la vitesse et la direction, c'est assez facile. Tout ce que vous avez à faire est de bouger et de glisser. Et là, nous allons mettre dans cette variable de philosophie, boum, fait. Il y a en fait une autre façon de passer à, qui est déplacée et entrer en collision. Et là, vous ajouteriez également n fois delta. Donc, vraiment cela ressemblerait à déplacer vitesse de collision fois delta. Donc, c'est le temps entre les images sont en mouvement diapositive sont médicalement comptes pour cela, mais le déplacement diapositive ne le fait pas. Je ne suis pas sûr pourquoi, mais c'est juste notre travail actuellement. Donc, la raison pour laquelle vous voulez garder à l'esprit le temps entre les images est que s'il y a des incohérences entre le temps entre les images, vous voulez déplacer le caractère de la bonne quantité en fonction de l'heure écoulée depuis la dernière image. Donc, le personnage doit se déplacer à une vitesse constante. Mais si vos images ne sont pas rendues à la même vitesse, alors la quantité de mouvement sur chaque actualisation devrait être différente. Maintenant, théoriquement et processus physique, ça va toujours être le même. Donc, en général, vous ne rencontreriez pas ce problème. Mais juste au cas où c'est là, c'est pourquoi delta existe. Et déplacer et glisser juste automatiquement facteurs que N. Donc, vous avez juste besoin de la variable de vitesse. Vous ne le multipliez pas par delta en un mot. Maintenant que nous avons ça,
je pense que nous pourrions aller de l'avant et appuyer sur Play et déplacer le personnage vers la gauche et la droite. D' abord, on devrait s'assurer qu'on est au niveau vu. Et nous allons zoomer un peu ici. Je suppose qu'on va devoir mettre une caméra. Et alors ajoutons une note enfant ici. Et je vais ajouter une caméra, plus précisément une caméra à D. Et si vous zoomez un peu, vous pouvez voir la bordure bleue de la caméra. Donc, je vais cliquer sur la caméra, peux cliquer ici et nous allons déplacer la caméra 2D et juste le mettre grossièrement sur le dessus de notre joueur pour le moment. Maintenant, on peut frapper Play. Et l'autre problème, c'est que nous devons en faire la caméra actuelle. Si vous n'en faites pas la caméra actuelle, alors la caméra va la mettre quelque part autour de 000, je pense. Donc, si nous vérifions en cours, alors c'est maintenant la caméra active et c'est là que le jeu commence à regarder. Alors jouez une fois de plus. Et testons ça. Ok, donc nos personnages là-bas, donc maintenant on peut utiliser un et un D pour déplacer notre personnage. Donc un, d, Ok, cool, ça marche en quelque sorte. Les problèmes évidents comprennent le fait de pouvoir marcher à travers le mur et de ne pas avoir de gravité à tomber sur le sol.
8. Gravity et paramètres de jeu global avec des Singletons: Résolvons d'abord le problème de la gravité. À Canto. Si vous passez à un projet, les paramètres des projets, il y a techniquement des valeurs de gravité par défaut que vous pouvez définir ici, ok ? Et vous recherchez dans la barre de recherche, donc la gravité, et puis vous pouvez voir 2D, nous avons la gravité par défaut et le facteur de gravité par défaut. La gravité par défaut est mesurée en pixels, et ce sont juste des nombres arbitraires que vous pouvez appliquer avec vos corps cinématique 2D. Je pense que ceux-ci pourraient, je pense en fait qu'il pourrait avoir plus d'un impact direct lorsque vous utilisez 2D corps rigide et cela serait automatiquement facteur d'un centime. Mais dans les corps cinématique, vous devez tout faire manuellement. Donc, vous pouvez soit utiliser ces valeurs et les personnaliser ici. Ou ce que je pense que je préférerais faire est de créer un singleton où nous avons juste des paramètres de jeu que nous pouvons charger soit sur une base de niveau supérieur ou pour l'ensemble du jeu. Et chaque fois que nous avons besoin de changer les paramètres de jeu globaux, nous le faisons dans un singleton qui se charge une fois par jeu. Donc je vais fermer ici et ensuite nous pouvons créer une nouvelle scène et y attacher un script. Alors allons au menu en haut à gauche, frapper une nouvelle scène. Et là, on va faire un autre noeud. Ce n'est pas vraiment un objet 2D, pour ainsi dire. C' est juste un nœud qui va contenir un script avec
un tas de variables que nous pouvons définir et référencer et d'autres scripts. Donc, un autre noeud. Et je vais juste noter ici. Donc aussi basique que vous pouvez obtenir, je vais appuyer sur Command ou Control S. et sauvegardons ceci et le répertoire racine pour l'instant. Nous pourrions effectivement créer un seul dossier de tour, pourrait aussi bien avoir plus de dossiers. Donc, je vais faire un clic droit et faire un nouveau dossier. Et je vais le mettre à Singleton ici. Frappez OK. Donc, ce nœud va être appelé paramètres de jeu. Donc, pendant l'enveloppe de chameau, le capital G, le capital S, et frapper Save. Donc, je vais aussi renommer ce nœud en paramètres de jeu, le rendre cohérent. Et maintenant, nous ajoutons juste un script à cela. Donc on fait ça. Il va automatiquement par défaut à ce répertoire singleton, dans lequel nous avons enregistré le G, lequel nous avons enregistré le fichier scène. Donc maintenant, il va stocker le fichier de script QDOT aussi. Donc, créez ça. Supprimons tout ici. Et maintenant, nous pouvons simplement ajouter quelques variables d'exportation. Donc, nous allons exporter, float, var. Et je suppose que ce que nous allons vouloir ici, c'est la gravité. Et nous pouvons définir cela à une valeur par défaut arbitraire. Mais encore une fois, nous allons enregistrer une instance de ces paramètres de jeu. Donc, nous pouvons simplement cliquer ici et le personnaliser quand nous en avons besoin. Nous n'avons pas vraiment besoin d'utiliser le script car nous
avons le flotteur d'exportation ici. Donc c'est très pratique. Et nous pouvons faire le flux d'exportation loin. Et je vais appeler cette vitesse terminale, comme dans la vitesse de chute maximale que vous pouvez atteindre. Donc la gravité est ajoutée à chaque seconde. Personnage continue à accélérer, allant vers le bas sur l'écran. Et à quoi veux-tu que cette vitesse de plafonnement soit ? Donc parce que c'est un jeu de
dessins animés en 2D, c'est un peu arbitraire. Physique du monde réel n'est pas nécessaire. Il suffit de jouer avec les chiffres et de
comprendre la sensation que vous voulez pour votre jeu spécifique. Donc je vais juste remplir le port 300 4 maintenant. Et on va s'en mêler un peu plus tard, j'en suis sûr. Nous avons donc ces valeurs et nous voulons juste qu'il charge ce nœud de paramètres de jeu chaque fois que nous lançons le jeu. Je vais donc aller au projet, Paramètres du projet. Il y a un onglet ici appelé chargement automatique, et nous voulons ajouter dans cette scène de réglage de jeu. Alors passons à terme unique, puis faisons le jeu settings.js peut double-cliquer là dessus. Ok, donc maintenant ces paramètres de jeu
vont se charger chaque fois qu'on démarre le jeu, c'est un singleton. Un seul ton signifie simplement que cela ne peut être qu'un en existence à un moment donné. Donc, si vous avez référencé les paramètres de jeu, vous devriez être relativement assuré que ce
sera les mêmes paramètres de jeu que vous avez dans votre jeu. Donc ça ne devrait pas changer. Ce devrait toujours être la scène spécifique que nous avons enregistrée dans ce dossier singleton. Alors allons de l'avant et appuyez sur Fermer maintenant. Et maintenant, nous pouvons passer au script du joueur et nous pouvons référencer cette gravité et la vitesse terminale. Nous allons donc définir la vitesse, la vitesse y spécifiquement à sa vitesse d'onde actuelle. Et puis nous allons soustraire, et ensuite nous allons soustraire la gravité. Donc, moins les paramètres de jeu dot gravité. Donc, c'est tout ce que vous devez faire pour le référencer. Juste les paramètres de jeu dot quelle que soit la variable que nous avons configurée et ce singleton, et nous pouvons juste référencer cela à travers. D' accord ? Et nous allons également limiter cela. Alors que les choses sont faites maintenant, la valeur de gravité va changer la vitesse et elle va continuer à descendre de plus en plus vite sans limite, fondamentalement infinie vers le bas sur la vitesse de l'écran. Donc je peux montrer ça très vite. Mais faisons aussi une déclaration imprimée ici. Donc, imprimez et nous allons juste faire des points de vitesse y afin que dans la console, nous pouvons voir que la valeur continue de baisser. Essayons donc de jouer au jeu. Donc niveau 1, d'accord, et nous pouvons voir dans la sortie nous allons obtenir la valeur pour la vitesse. Donc maintenant, nous approchons comme négatif 16 mille comme la vitesse vers le bas. Et en fait, j'ai fait une erreur. Il devrait être plus la gravité parce que vers le bas est positif quand nous faisons ces jeux 2D. Donc nous allons vouloir limiter la vitesse ici. Et la façon dont nous avons maintenu la vitesse de déplacement verticale est en utilisant la fonction Min. C' est une fonction mathématique. Donc, il va retourner le plus bas des deux valeurs. Donc nous avons notre A ici sur la gauche, ce qui est la nouvelle vitesse que nous essayons de définir. Et puis par ici sur la droite, nous allons avoir des jeux settings.py, la vitesse du terminal. Donc maintenant, quand nous allons de l'avant et
frappons Play, nous allons voir, ou nous devrions voir un plafond sur la valeur. Et nous ne l'avons pas fait. Donc je pense que nous voulons vraiment plus paramètres de jeu Doc gravité. Allons de l'avant et frappons plus ici et voyons. Ok, ouais, c'est exact. Donc, vers le bas, une fois de plus est une valeur positive sur l'écran. C' est donc positif. C' est négatif. Si on frappe Rafraîchir ici, on peut voir, dès que ça commence, notre personnage tombe un peu sur le sol, mais la vitesse est en fait maintenue là. Donc c'est ce que nous voulons voir. Peu importe combien de temps ça va, ça ne va jamais plus vite que cette philosophie terminale. Ok, donc maintenant nous avons besoin d'avoir des collisions entre le joueur et le sol. Donc nous pouvons vérifier notre carte de tuiles pour ça. Allons cliquer sur l'objet de carte de tuiles, l'aventure de pixel au fichier main.js, que nous avons enregistré dans le projet. Et maintenant, nous pouvons ouvrir notre terrain. On peut zoomer. Et le problème est que nous n'avons pas défini de tuiles de collision. Ce n'est donc pas trop difficile de le faire, mais cela peut prendre un peu de temps. Alors, cliquez sur notre région ici. Encore une fois, nous avons déjà configuré le BitMask pour que nous puissions le dessiner,
mais nous n'avons pas ajouté de collisions. Donc, la façon la plus rapide et la plus simple de faire des collisions est d'ajouter un nouveau rectangle. Vous pouvez voir que cela a des raccourcis clavier, donc c'est Shift R sur le clavier. Donc, j'ai trouvé un bon moyen de le faire est de cliquer sur votre tuile, appuyez sur Maj R, cliquez à nouveau sur la tuile, puis vous avez votre carré de collision, qui est fondamentalement la même forme et la même taille de la tuile elle-même. Donc, nous cliquons sur le deuxième carré pour frapper Shift R. Nous cliquons dessus à nouveau, et maintenant nous avons une forme de collision. Donc, si le personnage se heurte à cela de n'importe quelle direction, il devrait l'arrêter dans ses traces. Alors continuons à faire ça. Cliquez sur Maj, R, cliquez, cliquez sur Maj, cliquez sur. Donc vous continuez à traverser et vous rencontrez un problème. Vous pouvez simplement cliquer manuellement là, assurez-vous
juste que vous obtenez une collision sur chacun. Si vous voyez qu'après qu'il était jaune, il devient encore plus jaune. Cela peut signifier que vous avez créé des formes de collision au-dessus de celui-ci afin que vous puissiez simplement cliquer dessus et les supprimer si cela devient un problème. Donc, tout devrait avoir cette même superposition de jaune. Alors continuons à faire ça. Je vais juste accélérer la vidéo. Donc, si pour une raison quelconque cela vous donne quelques petits problèmes, vous pouvez également cliquer manuellement ici pour créer votre prochain rectangle. Donc, vous pouvez le faire comme cliquez là-haut, puis cliquez ici. Et ça vous donnera les mêmes résultats. Mais j'espère que ce sont des raccourcis clavier fonctionneront pour vous aussi. C' est essentiellement toutes les formes de collision, à l'exception d'une. Donc, si nous zoomons ici, nous pouvons voir que ces tuiles de plate-forme que nous avons créées n'ont qu'une plate-forme de quatre pixels de haut. Donc, ça n'a pas vraiment de sens d'avoir un personnage entre en collision avec lui par le bas. Parce que ça signifierait que ça ferait cogner la tête juste ici où il n'y a clairement rien là-bas. Donc, quand nous ajoutons la forme de collision pour ceux-ci, vous pouvez voir que j'ai dit que l'accrochage est de quatre pixels par quatre pixels plus tôt. Il y a une raison à cela et c'est pour que nous puissions ajuster ces formes de collision pour qu'elles correspondent à ces plates-formes. Ainsi, lorsque vous créez vos formes de collision, vous pouvez vérifier les options de capture. Assurez-vous que l'étape est quatre par quatre pour ces tuiles particulières. Et maintenant, vous pouvez cliquer sur chacun des coins et les faire glisser vers le haut. Donc, si nous faisons cela pour chacun d'eux là-bas, maintenant nous avons une forme de collision qui correspond réellement à l'illustration de cet ensemble de tuiles. Donc, nous pouvons simplement refaire ça pour chacun d'entre eux. Il suffit de cliquer sur les quatre coins que vous devez ajuster. Et c'est essentiellement tout ce qu'il y a. Tant que vous faites cette capture de quatre pixels par quatre pixels, ce sera vraiment facile avec ce jeu de pneus particulier, d'accord ? Et pour l'instant, et ce devrait être toutes les collisions dont nous allons avoir besoin
pour notre ensemble de tuiles de terrain. Tellement génial. Et maintenant, nous pouvons frapper le contrôle S. Et si nous revenons dans
le jeu, la collision devrait fonctionner. Alors nous allons frapper jouer nos personnages maintenant vont être sur le terrain. Pour que nous puissions frapper à gauche et à droite pour le mouvement. Et un personnage, ça va tomber du bord et s'arrêter quand il arrivera ici. Et encore une fois, quand il sera ici. Maintenant, vous pouvez voir quelques problèmes. La première est que c'est un couple de pixels du sol pour le personnage. Nous avons juste besoin d'ajuster la position de la forme de collision pour que cela semble correct. Et là, sur la gauche, vous pouvez voir qu'ils sont vitesse qui dit que c'est 300. Techniquement, je n'ai pas raison. Alors nous allons frapper arrêter ici. Maintenant, nous allons dans la couche. Nous allons ouvrir cela et ce que nous devons faire, c'est qu'une fois que nous avons la vitesse de déplacement et de glissement, cela retourne effectivement une vitesse après avoir fait des collisions avec le sol. Donc fondamentalement, je vais prendre la valeur y ici et la mettre à 0 parce qu'il y a eu des collisions au sol. Donc, fondamentalement, il ne peut plus bouger. Donc, si nous définissons les valeurs de vélocité stockées dans ce script à cette valeur de vélocité renvoyée par ici. Ensuite, cela le fera réinitialiser la vitesse y à 0. Et puis cela sera mis en place ici de sorte que la prochaine fois qu'il viendra ici, nous allons ajouter la gravité à 0. Donc, cela devrait être correct. Et aussi, nous voulons vraiment voir la vitesse après le mouvement, pas avant, avant. Quand c'est 0, ça va ajouter la gravité qui le fera 50. Mais vraiment une fois que le mouvement réel est calculé, il va se déplacer à une vitesse de zéros afin qu'il soit plus logique de l'imprimer ici. Allons-y et frappons le jeu et on peut jeter un coup d'oeil à ça. Donc vous avez vu peut-être qu'au premier couple de cadres, il était 50 était un 100 et puis c'était un 150 car il accélérait vers le sol. Mais après ça, c'est 0 parce que nous sommes sur le terrain. Gardez un œil sur la sortie et vous pouvez le voir changer à nouveau. Donc, juste là pendant une fraction de seconde, il accélérait vers le sol. Et c'est ce que nous voulons voir. Allons donc dans la vue 2D pour notre joueur. Je peux voir que la forme de collision est un peu trop basse ici, donc nous avons juste besoin d'ajuster ça. Donc je vais aller à la collision 2D et puis essayons de faire la position trois. Cela dépend de la direction que vous êtes face, donc il peut être quatre ici. Et maintenant, allons de l'avant et assurez-vous qu'il est pixel parfait avec le sol. Donc, en regardant ici, nous pouvons voir que nous avons les pixels du sol
, puis juste au-dessus se trouvent les pixels tracés du personnage. Donc c'est ce que nous allons vouloir voir ici. Et c'est que vous voulez vraiment couper le contour ici et que le Greenberg soit ce qui est relié au sol. C' est plus un choix stylistique, je pense. Alors allons de l'avant et frapper arrêté ici. Et en fait, quand j'y jette un coup d'oeil, on a tout couvert pour cette vidéo. Nous avons donc une caméra sur notre joueur. Notre personnage peut se déplacer à gauche et à droite en fonction notre entrée que nous avons configurée en créant ces actions personnalisées. Et la gravité fonctionne aussi bien que les vitesses terminales. Donc une plate-forme décemment fonctionnelle, un personnage qui ne saute pas encore, mais nous y arriverons. Donc, si vous l'avez fait jusqu'ici, vous êtes déjà en bonne voie pour avoir une plate-forme ou un personnage fonctionnel. Donc c'est vraiment cool.
9. Machines sauter, mouvement et État: Dans cette vidéo, nous allons prendre notre personnage et lui donner la possibilité de sauter. Une partie de ce projet va donc être la création d'États. Donc, par exemple, si les personnages sur le sol, il devrait être capable de sauter. Mais une fois que votre personnage saute, le mouvement va fonctionner un peu différemment. Donc, selon l'endroit où se trouve le personnage et les boutons qui sont pressés dans chacun de ces différents modes que le personnage a pour être en mesure d'interagir avec le monde du jeu va être appelé un état. Alors allons de l'avant et replongons dans notre scène de joueur. Donc, ici, nous pouvons voir que nous avons le spray animé, la forme de collision, mais nous n'avons pas encore de moyen pour nous de changer l'animation. Donc, actuellement, même si nous pouvons nous déplacer gauche et à droite quand nous allons de l'avant et frappons le jeu. Et nous essayons de nous déplacer à gauche et à droite, nous pouvons voir que les personnages restent toujours dans l'Idaho et qu'il ne fait même pas face à la bonne voie vers le haut. Donc, nous pouvons corriger cela et ensuite ajouter en nous sautant et une autre option. Mais d'abord, avant de plonger dans le script, ajoutons un lecteur d'animation. Donc, notre lecteur d'animation est l'un des outils que nous pouvons utiliser pour changer la façon dont l'animation actuelle des personnages va ressembler, qui quand nous changeons l'état et le code, nous pouvons également mettre à jour le lecteur d'animation. Donc, il joue la bonne animation pour le bon état. Donc, nous allons faire un clic droit sur le lecteur et ajouter un nœud enfant. Donc, nous sommes à la recherche d'un joueur d'animation, qui est juste ici commodément, et allons de l'avant et créer cela. Et maintenant, lorsque nous cliquons sur Animation Player, nous pouvons voir qu'il y a cette fenêtre d'animation en bas. Nous voulons donc créer une animation pour chacune des animations de sprite animées ici. Et donc je pense que la façon de faire cela comme un peu plus propre quand vous utilisez un sprite, pas un sprite animé. Mais une fois de plus, parce que dans notre vidéo précédente, nous avons découvert que toutes ces animations différentes sont séparées en différents fichiers de texture d'image. sprite animé fonctionne mieux pour ce projet particulier. Donc, comment cela fonctionne pour le joueur d'animation et un sprite est que nous allons aller dans ce bouton d'animation et appuyer sur Nouveau. Nous devons donc en créer un pour chaque animation. Commençons par ralentir. Appuyez sur Entrée, et maintenant nous devons ajouter une piste. Ainsi, lorsque nous avons ces pistes Animation Player, nous pouvons modifier différentes propriétés au fur et à mesure que l'animation progresse. Donc je vais frapper Add Track ici, propriété. Et maintenant, nous pouvons prendre n'importe quelle propriété de notre scène et animer ça. Alors changeons le sprite animé. Et nous voulons changer l'animation ici. Lorsque nous entrons dans l'animation inactive sur le lecteur d'animation, nous voulons jouer l'animation inactive sur le sprite animé. Donc, je vais faire un clic droit ici, insérer une clé. Une clé étant juste un moment dans le temps où vous modifiez la valeur de quelque chose tel que l'animation est en cours de lecture. Et puis sur la droite avec cette clé sélectionnée, nous pouvons changer la valeur deux. Je ne le sais pas, nous sommes déjà
assez commodément maintenant parce que quand il est dans l'état d'animation, nous ne voulons jamais qu'il s'arrête, même si nous n'avons pas besoin techniquement maintenant parce que quand un personnage est au ralenti, nous voulions garder poursuivre l'animation. Je pense qu'il est logique de vérifier l'animation en boucle ici techniquement pourrait ne pas être nécessaire dans ce cas, car cela ne fait que dire au sprite animé quelle animation jouer. Mais les animateurs prient probablement vont être en boucle dans les deux sens. Mais si vous utilisiez un Sprite plutôt qu'un sprite animé, vous devrez faire vérifier cette boucle. Donc je pense que c'est juste mieux de l'avoir là juste au cas où. Alors prenons aussi l'animation ici et en créons une nouvelle. Nous allons donc aussi remonter au menu d'animation et ajouter et exécuter l'animation. Et ajoutons un pour sauter aussi. Et on travaillera sur les autres plus tard. Mais faisons-les pour l'instant. Donc r1 et nous allons ajouter une propriété de piste, piste animation sprite animée. Et puis sur cette première image, nous voulons insérer la clé, assurer qu'elle est dans la bonne position, tout le chemin ici sur la gauche. Et nous prenons la valeur et nous changeons cela pour courir. Et bien sûr, ce sera l'animation de saut. Donc, dans la morsure, co-assurance cette image clé pour sauter. Donc, nous pouvons rendre ce truc plus rapide si nous dupliquons nos animations à la place. Donc, je vais aller à Animation duplicate, et ensuite nous pouvons renommer ceci à ce dont nous avons besoin. Alors voyons une autre animation. Nous allons probablement le mettre en place. Renommons ça en tête. Et maintenant, nous n'avons pas besoin de vérifier la boucle. Nous n'avons pas besoin de créer une image-clé. Nous avons juste besoin de changer la valeur ici pour frapper l'animation et nous sommes bons là-bas. Donc ça devrait suffire pour le moment. Allons-y et plongons dans le code. Donc nous allons avoir besoin d'une variable e num ici en haut. Donc, je vais taper énumérations et nous pouvons lui donner un nom facultatif, donc je vais l'appeler état enum. Et puis dans, je crois que ce sont les crochets bouclés ici, nous voulons mettre en Idle, courir et sauter. Donc, ce que l'enol fait fondamentalement, c'est qu'il traduit une paroisse lisible par l'homme, telle que Idle run ou sauter dans une valeur entière qui va être associée à cela. Donc, fondamentalement, vous pouvez penser à cela comme une position dans un tableau. L' EIDL est le premier ici, donc cela va être représenté comme un 0. Quand le jeu est en cours d'exécution et R1 va être un et sauter va être un deux. Mais quand nous tapons un code, nous n'avons pas besoin d'utiliser ce 012. Nous pouvons simplement utiliser l'AIDL point d'état pour référencer cette position au sein des États. Il est donc plus facile de comprendre ce qui essaie d' aller où lorsque vous êtes venu à dépanner votre code. Donc, avec cela, nous allons avoir besoin d'une variable pour l'état actuel. Donc, je vais mettre var actuel underscores état, et nous pouvons juste par défaut ceci à l'état point AIDL. Donc, vraiment, cela va juste être un 0, mais ce 0 fait spécifiquement référence à la position 0 dans ce assez. Alors gardez ça à l'esprit. La prochaine chose que nous allons vouloir faire est
d'avoir un moyen de déterminer ce que l'état suivant va être
pour notre personnage lorsque nous appuyons sur des boutons ou que nous nous éloignons du bord ou ainsi de suite, nous voulons essentiellement comprendre où le caractère est dans le jeu et quelles actions devraient être disponibles pour elle. Nous allons donc créer une nouvelle fonction après l'exécution du mouvement et de la diapositive. Et on va l'appeler choisir le prochain état. Donc, nous pouvons simplement appuyer sur Entrée quelques lignes et créer cette fonction, fonction choisir l'état suivant. Et donc l'une des premières conditions pour déterminer l'histoire va être de savoir si les personnages sur le sol ou non. Certains des personnages dans l'air qu'il devrait être dans une sorte de saut ou de chute état. Vous pouvez même faire des reçus pour cela si vous avez une raison de le faire. Pour ce personnage, je crois qu'on va avoir un seul état de l'air, qui va être l'état des sauts. Mais au sol, notre personnage peut tourner au ralenti, ou il peut aussi fonctionner selon s'il y a un mouvement horizontal et hors tension. Alors vérifions d'abord l'état principal, qui va être, est-ce sur le sol ? Donc, c'est un script 2D corps cinématique, ce qui signifie que nous avons accès à une fonction qui est appelée est sur le sol. Donc, fondamentalement, ce script sait déjà comment vérifier s'il y a du sol directement en dessous. Fondamentalement, si notre corps cinématique est en collision avec une autre chose en dessous en vérifiant
notre forme de collision par rapport aux formes de
collision si d'autres choses comme les tuiles de terrain au sol. Donc, si c'est le cas, s'il y a en fait du terrain directement sous notre personnage, nous voulons finir d'être dans n'importe quel état de sauts. Et cela veut dire que nous allons vouloir réinitialiser le saut que notre personnage puisse sauter à nouveau plus tard. Je vais donc définir des sauts égaux à 0. Donc, pour notre personnage aura la possibilité de sauter une ou plusieurs fois. Et cela représentera le nombre de fois que le personnage a sauté depuis qu'il a frappé le sol en dernier. Donc, nous allons réellement créer cette variable ici et avancer jusqu'à présent sauts. Et cela va par défaut à 0. Depuis probablement au début du jeu, nous voulons donner à notre personnage la possibilité de sauter. Les sauts vont à 0. Chaque fois que nous sommes sur le terrain, nous devons déterminer si nous allons entrer dans un état de saut, un état d'exécution ou un état d'inactivité. Donc nous voulons aller dans un état de saut si nous appuyons sur le bouton de saut pendant que nous sommes sur le sol. Donc nous pouvons vérifier si le saut et le port ce pressé. Donc, si le point d'entrée est l'action juste pressée, et alors nous allons chercher le saut, que je ne pense pas que nous avons réellement créé en tant qu'action. Donc, je vais aller de l'avant et le faire juste après cette ligne. Et puis nous devons également vérifier si les sauts sont égaux à 0. Donc, si saut est pressé alors que le personnage est sur le sol. Alors mettons en place ces actions de saut. Alors projet, Paramètres du projet, Carte
d'entrée, descendez ici en bas. Ajoutons l'action Jump. Gardez à l'esprit votre capitalisation. Il devrait être identique à la chaîne que vous utilisez à l'intérieur du script. Alors ajoutons une clé. Je vais juste rendre la barre d'espace sous licence, appuyez sur Fermer. Et maintenant, nous avons une action de saut qui peut être vérifiée avec ce gestionnaire d'entrée. Donc, nous devons définir l'état actuel, ou plus spécifiquement, l'état point saut. Donc, lorsque nous ajoutons ce bit auto à l'état actuel, nous pouvons être sûrs que nous référençons l'état actuel de cet objet ici. Donc, quand nous ajoutons ce moi ici, nous pouvons être sûrs que cela va faire référence à l'état actuel qui est spécifiquement attaché à ce corps cinématique ici. Donc cela va signifier auto point état actuel, qui est juste ici, ce qui est ce que nous voulons. Donc, nous définissons cela pour indiquer le point jump et nous avons d'autres états sur lesquels nous devons travailler. Donc, nous pouvons aussi mettre un autre si comme un si la première condition n'est pas remplie, alors c'est notre alternative. Et nous voulons voir si le personnage se déplace horizontalement. Donc, cela peut être soit positif ou négatif x fondamentalement, tant que ce n'est pas 0, nous pourrions mettre en vitesse absolue est supérieure à 0. Une autre façon que vous pouvez écrire à peu près la même chose serait juste la vitesse n'est pas égale à 0. Cependant, vous voulez l'écrire un peu la même chose. Et ajoutons l'état actuel de point auto est égal à l'état point sur. Donc, si le personnage ne saute pas, mais qu'il bouge, alors il devrait être en état de course. Le dernier que nous allons avoir pour le moment, il va juste être l'état DOT I aussi, si ces autres conditions ne sont pas remplies mais les caractères sur le sol, alors il va être inactif. Donc si vous ne bougez pas, vous êtes au ralenti. Et nous ne le ferons pas encore. Mais je vais ajouter un petit message pour écrire ceci plus tard. Donc, si ce n'est pas par terre, alors on voudra peut-être faire un double saut ici. Donc, en l'air, nous pouvons aussi faire un mouvement de canon à double saut. Donc je vais dire de faire le double saut. Et je vais juste passer ici les passes et essentiellement continuer avec le programme. Et il n'y a pas de code ici, donc on est juste en train de sauter dessus. Donc, je veux maintenant créer une fonction définie pour notre état actuel. Donc, quand nous
changeons l'état de, disons inactif pour sauter, nous voulons que certaines actions aient lieu. A savoir, nous voulons ajouter un mouvement vers le haut pour notre personnage quand il entre dans l'état Sauts. Pour représenter le saut dans le jeu, le personnage doit se déplacer vers le haut. Donc, nous pouvons avoir une fonction définie signifie que lorsque nous changeons l'état actuel, nous pouvons avoir certaines actions d'intérêt de l'État se produisent. Donc, ici à l'état actuel, je vais ajouter à l'ensemble de fin GET. Et puis nous allons l'appeler état actuel, juste convention de nommage standard. Une autre idée que j'avais en tête, je ne vais pas le faire, mais tu pourrais aussi l'appeler Interstate. Je pense que cela pourrait aussi avoir du sens. Mais nous allons descendre ici et écrire notre fonction setter ici en bas. Je vais en fait juste mettre un hashtag, les setters peuvent un en-tête ici au cas où nous aurions d'autres variables avec des setters plus tard, juste les garder dans la même zone. Donc, faisons fonction définir l'état actuel, et cela va avoir une valeur, fondamentalement le nouvel état où entrer. Donc, je vais écrire un nouvel état de soulignement, en le gardant aussi simple que possible. Donc, si lorsque nous définissons l'état actuel, le nouvel état est un état de saut, alors nous voulons que le personnage saute se déplace vers le haut sur l'écran. Donc, je vais utiliser la fonction de correspondance sur la nouvelle valeur d'état et vérifier si cet état entrant est l'état de saut. Donc, nous pouvons utiliser ici comme le saut de point d'état de deuxième ligne. Donc c'est la valeur que nous correspondons. Donc, si la valeur passée est State dot jump, alors nous allons vouloir sauter. C' est donc une fonction que nous n'avons pas écrite ici aussi. Et enfin, nous voulons définir l'état actuel à la nouvelle valeur transmise. Donc, si vous n'avez pas un ensemble personnalisé de fonction créé, fondamentalement si vous changez la valeur, ce serait exactement comme si cet état actuel égal au nouvel état et rien d'autre que le setter vous
permet d'ajouter un code supplémentaire qui se produira lorsque cette valeur est modifiée. Donc maintenant, nous avons besoin d'une fonction de saut. Donc, ce sera vraiment simple et direct. Aller ici, écrire une autre fonction, saut de
fonction et point-virgule. Maintenant, ce que nous devons faire est de changer la vitesse y de ce personnage et d'ajouter une valeur d'impulsion de saut. Fondamentalement la quantité de mouvement que
nous voulons ajouter vers le haut sur l'écran pour que le personnage se déplace. Et cela devrait être un coup de pouce immédiat. Tant d'accélération au fil du temps, ou du moins ce sera comme ça pour ce personnage. Si c'était une accélération, ce serait plus comme un jetpack. Donc, faisons un point de vitesse y. Et cela fait référence à la même vitesse ici, puisqu'il n'y a pas de variable de vitesse spécifiée dans cette fonction, il va par défaut à celui de ce script. Donc la vitesse y. Et nous allons mettre cela immédiatement à une nouvelle valeur que nous allons créer. Et je vais juste appeler ça l'impulsion de saut et redémarrer à une valeur négative parce
que nous voulons qu'il se déplace vers le haut sur l'écran. Donc, ce sera juste le montant et ce sera la direction. Négatif. Valeur signifie se déplacer vers le haut sur l'écran et nous sautons. Nous allons aussi vouloir augmenter le compteur de saut. Donc sauter plus égal à 1. C' est donc important au cas où nous voulons ajouter des doubles sauts, ce que nous ferons plus tard. Alors créons cette variable d'impulsion de saut. Et je vais le mettre en haut parce que c'est quelque chose que nous pourrions vouloir changer. Donc ça va être une impulsion d'exportation, float, var, et saut. Donc différents personnages vont sauter différentes quantités. Donc, nous pouvons mettre cela à une valeur agréable et élevée comme 600. Alors gardez à l'esprit après la vitesse initiale, cela va diminuer sur chaque image par cette gravité jusqu'à ce qu'elle atteigne la vitesse terminale ou que le personnage frappe le sol. Il va seulement bouger ce rapide d'abord, puis il va ralentir et finalement retourner vers la terre. Ça devrait être des sauts ici, pas sauter. Et maintenant, si nous frappons sur Play, nos personnages devraient pouvoir sauter à l'écran. Les animations ne changeront pas encore. Donc, quand on va dans le jeu et qu'on a essayé de frapper l'espace, rien ne se passe réellement. Même si nous tombons du bord, nous pouvons clairement voir que le personnage est sur le sol, mais en fait, il n'enregistre pas les personnages sur le sol. Et la raison en est qu'il y a un argument supplémentaire que nous pouvons passer à cette diapositive de mouvement, qui est la direction du haut. Donc, dans un jeu 2D, nous pouvons simplement le faire facilement en faisant une virgule puis un vecteur deux. Donc, cela va signifier que vers le haut sur cet écran va être notre direction AP. Et maintenant que c'est réglé, glissière
mobile peut définir les valeurs pour est sur le sol, est sur le plafond et est sur les murs parce qu'il sait quelle direction est maintenant les murs, le plafond et le sol. Alors allons de l'avant et revenons dans le jeu. Et maintenant on peut frapper l'espace. Le point d'arrêt atteint pour le saut d'état. Alors continuons ça. Et si on y retourne, on voit que le saut fonctionne bien. Nous pouvons également voir que les personnages sauter est rapide d'abord, mais comme il arrive à ce point le plus élevé, est ralentit et ensuite nous accélérons vers le bas. Et c'est ce que vous voulez d'une plate-forme standard ou sauter.
10. Arbre d'animation et oscillations: Ok, la prochaine chose que nous allons vouloir
nous occuper est de définir des paramètres dans un arbre d'animation afin que définir des paramètres dans un arbre d'animation afin quece lecteur d'animation puisse réellement passer aux animations correctes en fonction des valeurs que nous avons définies pour ces arbres d'animation. Donc, fondamentalement, nous devons dire à l'arbre si le personnage se déplace à gauche et à droite ou saute dans les airs. Et puis laissez cet arbre comprendre quel état d'animation mettre le lecteur d'animation n. Donc, nous avons le code réel pour contrôler comment le personnage peut se déplacer. Mais nous avons également besoin d'avoir le côté du lecteur d'animation et de l'arbre d'animation des choses pour contrôler et comment il représente ces graphiques pour le lecteur, mais fondamentalement changer l'animation. Ajoutons donc un arbre d'animation. Je vais faire un clic droit sur le nœud racine dans un arbre d'animation enfant. Et cet arbre d'animation a besoin de lecteur d'animation. Attribuons donc notre lecteur d'animation à l'arborescence d'animation. Et maintenant, nous avons aussi besoin d'une racine d'arbre. Il y a donc différentes façons de le mettre en place. Mais je pense que pour notre projet en utilisant un arbre de mélange de noeud d'animation comme le noeud d'arbre racine va fonctionner. D' accord, donc c'est ce que je vais faire pour l'instant. Donc, nous pouvons voir dans l'arbre de fusion que nous avons une sortie. Nous devons donc déterminer comment nous allons arriver à cette sortie et laquelle des animations sera
la sortie actuelle pour notre lecteur d'animation à utiliser. Donc, dans notre arbre de fusion, le premier nœud que je vais ajouter n sera n'importe quel clic droit, en passant, pour ajouter des nœuds, je vais descendre pour fusionner l'espace 1D. Donc, avec cet espace de fusion 1D, nous travaillons essentiellement avec un paramètre en entrée. Et nous allons dire à l'arborescence
d'animation la valeur du paramètre et le script du lecteur. Mais nous pouvons voir ces paramètres si nous cliquons à nouveau sur l'arbre d'animation. Et vous venez ici et l'inspecteur, vous pouvez voir les périmètres fusionner l'espace 1D. C' est en fait le nom de notre paramètre ici. Et la valeur. C'est donc la position de fusion. Et vous pouvez définir cela avec les paramètres slash nom du paramètre, puis slash fusion possession. Donc, dans notre cas, nous allons le mettre à 101 négatif. Il pixel art jeu. Vous n'allez pas fusionner des animations comme vous le feriez avec un modèle 3D. Donc nous ne voulons que ces trois valeurs. Et nous pouvons aussi lui donner un meilleur nom pour cela. Donc je pourrais appeler cette valeur x move ou x sinus, sinus représentant la direction soit un ou 0 ou une direction négative pour le mouvement de notre personnage. Et en prenant cela dans l'éditeur ici, nous sommes en mesure de déterminer s'il devrait montrer inactif ou Vaughn. Alors ouvrons l'éditeur ici et nous allons ajouter des points ici. Donc, je vais appuyer sur Créer des points ici sur la gauche, puis clic gauche au milieu, ajouter l'animation inactive. Donc, si la valeur de x move est définie sur 0, Cela va le rendre inactif. Cliquez ici sur la bonne animation de l'annonce. Donc, nous pouvons voir en regardant le graphique que cela est défini avec une valeur de un ici sur la droite. L' EIDL est 0, puis négatif 1. Nous voulons également faire de l'animation Run. Donc ça va toujours courir. Il va juste le faire en sens inverse. Donc, nous voulons qu'il joue l'animation de course. Pour que nous puissions venir à la racine. Et je vais le connecter à la sortie. Maintenant, tout ce que nous devons faire est de définir ce paramètre dans le code. Et l'arbre d'animation sera en mesure de dire au lecteur d'animation s'il doit s'exécuter ou s'il faut le ralentir pour l'animation. Cliquez donc sur l'arborescence de l'animation. Le paramètre que nous devons définir une fois de plus est ce x déplace. Donc, si nous survolons la position de fusion, nous pouvons voir le chemin complet vers elle est la
barre oblique de périmètre x trait de soulignement déplacer la barre oblique de mélange de la position de soulignement. Donc, si nous allons au script du lecteur maintenant, alors après que la vitesse est réglée, supprimant la diapositive, nous allons vouloir définir des paramètres d'animation. Donc, je vais créer un jeu de fonction approprié n m paramètres. Et on peut venir ici. Je vais juste entrer quelques lignes et nous allons l'écrire juste en dessous de ce processus physique. Donc jeu de fonction et paramètres m. Donc, pour cela, nous allons devoir référencer la vitesse. Mais une fois de plus, nous pouvons voir que la vitesse est toujours mise en place ici en haut. Donc, nous n'avons pas vraiment besoin de le faire un paramètre à l'intérieur de cette fonction, nous pouvons simplement le référencer directement. Mais ce dont nous avons besoin en ce moment est toujours une référence à l'arbre d'animation. Donc, si vous voulez prendre l'un des nœuds qui se trouve à l'intérieur de votre hiérarchie de scène et le référencer très facilement à l'intérieur de votre script. Alors ce que vous pouvez faire, c'est venir ici. Allons au-dessus de la vitesse. Donc maintenant, ici, nous devons écrire dans non prêt. Et ce que cela signifie, c'est que lorsque le script démarre, nous devons faire quelque chose. Mais nous mettons le sur prêt avec une variable. Donc, quand le script démarre, nous faisons quelque chose avec cette variable. Et la variable va être l'arbre de soulignement de l'animation. C' est donc le nom de la variable. Mais ce que nous voulons réellement ici est une référence au nœud de l'arbre d'animation. Et la façon dont nous faisons cela est que nous frappons égaux et ensuite nous mettons l'arbre d'animation du signe dollar. Donc, cela va regarder dans notre hiérarchie de scène, puis essayer de trouver le nœud appelé un arbre d'animation. Et puis quand le script démarre, il va prendre ce nœud et l'assigner ici. Et avec le non prêt, cela est attribué une fois le script démarré. Maintenant que nous avons l'arbre d'animation, nous pouvons définir des paramètres sur l'arbre d'animation dans notre fonction de paramètres set et m. Donc, je vais faire un jeu de points de soulignement d'animation parce que nous définissons un paramètre. Et maintenant, nous avons besoin du chemin vers le paramètre à l'intérieur de ce nœud. Nous voulons donc que les paramètres slash le nom du paramètre,
qui, je crois, a été appelé X move, puis barre oblique position de mélange. Et ce que nous voulons y mettre sera le signe de la vitesse. Donc ça va être 10 ou négatif et pas d'autres valeurs. Puisque nous n'essayons pas de fusionner, c'est les valeurs que nous voulons utiliser. Donc c'est 100%, soit inactif ou 100% courir et ne pas essayer de faire quelque chose de bizarre. Donc, obtenons le signe de la vitesse x et c'est fondamentalement cette valeur. Et plus tard, nous aurons plus de paramètres d'anime, mais c'est tout ce dont nous avons besoin puisque nous faisons juste le mouvement x. Allons de l'avant et frappons le jeu et on peut se déplacer à gauche et à droite. Ça ne marche pas encore. Et je pense que c'est parce que l'arbre d'animation n'est pas réellement activé. Donc, vérifiez libre actif l'arbre d'animation. Maintenant, il va montrer l'animation inactive. Ok, nous pouvons également voir qu'il passe dans l'animation de mouvement, mais seulement après une seconde s'est produite. Donc, ce qui se passe là, c'est que si nous
sautons dans le lecteur d'animation et regardons ces animations, elles ne sont mises à jour
qu'une fois par seconde. Donc, l'animation du foie doit se produire actuellement pour qu'elle passe d'une animation à l'autre. Donc pour nous, c'est une solution assez facile. Nous pouvons simplement prendre le temps de chacune des animations et les mettre à ¢0.05. Tout cela fait en fait est de s'assurer qu'il est dans la bonne animation, jouant sur le sprite d'animation. Donc la durée n'a pas vraiment d'importance ici, 0,05 pour l'animation inactive, l'animation de saut. Alors imprimez 05 et nous allons nous assurer que R1 est là deux. Alors 0.05, allons de l'avant et frappons le jeu. Maintenant, nous pouvons nous déplacer dans notre jeu. Et quand nous bougeons, passe instantanément à cet état d'humeur. Et quand nous commençons à bouger, il
revient instantanément à l'état inactif presque instantanément de toute façon, prendre 0,05 secondes au plus, sorte que presque fonctionne très bien. Maintenant, nous avons aussi vu que le personnage peut se déplacer à gauche et à droite, mais il n'ajuste pas la direction qu'il fait face en fonction de son déplacement à gauche et à droite. Donc nous avons besoin d'une autre fonction ici appelée ajuster la direction de retournement. Et dans cela va prendre les variables d'entrée. Donc, c'est cette importation d'ici. Ok, on peut arrêter le jeu pour qu'il n'atteigne pas les points d'arrêt. Donc, nous devons écrire le code pour juste retourner la direction. Je vais ajouter une autre fonction ici. Donc, la fonction ajuster la direction de retournement. Cela va prendre un paramètre et je vais
spécifier que ce devrait être un facteur deux. Donc, un vecteur point-virgule 2, puis finir cette ligne avec un autre point-virgule. Donc, ce que nous allons vérifier ici est fondamentalement le signe de l'entrée. Maintenant, nous pourrions également vérifier le signe de la vitesse actuelle des caractères. Mais je veux que le personnage fasse face à la direction où le joueur essaie de se déplacer, pas nécessairement la direction que la vitesse actuelle des personnages est dirigée. Maintenant, pour ce personnage, si on se déplace instantanément 200 à gauche ou 100 à droite,
la vitesse de déplacement, et il n'y a rien d'autre qui agit dessus. y aura pas de différence fonctionnelle là, mais certains personnages peuvent avoir une accélération, ce soit en accélérant vers la droite parce que vous maintenez le taux bas. Mais il n'a pas vraiment changé la direction de la vitesse de gauche à droite parce qu'il a une accélération assez longue ou il pour réellement changer de direction et de quelle façon il se dirige sur l'écran. Donc, de toute façon, nous allons utiliser si le sinus de l'entrée X est égal à 1, ce qui signifie
fondamentalement que la valeur est positive vers la bonne direction, alors le sprite animé ne va pas retourner sa direction. Donc animée sprite dot flip H pour horizontal est faux. Notre direction par défaut va être fausse et vous pouvez toujours changer cela. Vous pourriez également avoir une
variable par défaut si vous vouliez être un peu plus flexible. Mais nous allons simplement supposer que nous
faisons le visage de notre personnage par défaut. Donc, cela a l'air correct. Et notre alternative est autre, si cette importation de signe que x est égale à négative car le personnage appuie sur la gauche, alors le sprite animé devrait regarder pour faire face à la direction gauche. Non, non, je n'ai pas d'autre. Si le sinus est 0 ici parce que s'il y a 0, il n'y a pas d'entrée. Et s'il n'y a pas d'entrée, je ne veux pas changer la direction qu'il fait face. Il devrait juste faire face à l'endroit où il faisait face. Avant la dernière fois que nous avons lâché le clavier. Et nous manquerons ces variables de sprite animées. Donc nous avons besoin d'un autre sur var prêt ici. Donc, comme avec l'arbre d'animation, ce sprite animé est imbriqué dans notre hiérarchie pour la scène. Donc var non prêt, soulignement animé, pulvérisation égale signe dollar, sprite animé. Et c'est tout ce que nous devons faire pour être référencés à cela. Notez que lorsque vous faites les choses de cette façon, vous devriez garder le nom le même ou bien je pense que vous pouvez rencontrer des problèmes là-bas. Mais si c'est le nom du noeud, il va faire référence à cela très bien
tant que ce noeud est contenu dans cette hiérarchie. Donc maintenant, cela devrait résoudre ce problème. Allons de l'avant et appuyez sur Play et notre personnage va maintenant faire face à la bonne direction. On peut aussi sauter. Et pendant que nous sautons, le personnage peut faire face à la bonne direction. Mais il ne joue pas encore l'animation pour ça. Donc ce sera quelque chose que nous avons mis en place dans la prochaine vidéo que nous marchons sur notre arbre d'animation et nous ajustons, notre état est un peu plus.
11. Configuration des animations Jump et l'automne dans arbre d'animation: Ensuite, nous devons configurer l'arbre d'animation afin
que nous puissions prendre en charge le changement dans l'animation de saut. Alors replongons dans le chant du joueur. Je vais cliquer ici. Et nous allons cliquer sur l'arborescence du joueur. Donc, nous pouvons voir actuellement que nous n'avons qu'une seule dimension linspace, qui prend ce paramètre x move afin de passer entre l'inactivité et l'exécution. Mais nous voulons avoir un cas où le personnage est dans l'air. Et puis, si c'est dans l'air, nous devrions basculer entre les états
montants et ceux qui tombent en fonction de la direction de la vitesse y. Nous pouvons donc prendre la sortie de cette dimension unique, puis nous pouvons cliquer avec le bouton droit ici et créer un mélange trois. Ainsi, le mélange trois vous permet d'avoir trois entrées. Donc, nous pouvons avoir une valeur de mélange négative. Nous pouvons avoir l'entrée standard par défaut, ce
qui dans ce cas va être notre mouvement x. Donc je vais juste me déconnecter et le connecter juste ici. Et puis nous avons le cas de la valeur du mélange positif. Donc je vais aller de l'avant et appeler ça quelque chose comme un signe de soulignement. Vous pouvez aussi l'appeler y la vitesse de soulignement. Mais en fait, nous allons avoir trois valeurs ici à 101 négatif. Donc, si nous avons la valeur de fusion négative, cela signifie
que le caractère monte à l'écran puisque négatif est sur l'axe des y. Et ça veut dire que nous voulons l'animation de saut. Donc, je peux faire un clic droit ici à une animation. Et nous pouvons simplement sélectionner sauter dans la liste et le nourrir dans le mélange négatif. Alors la même chose. Si nous avons un mélange positif caractères se déplaçant vers le bas sur l'écran. Donc, nous voulons utiliser l'animation de chute. Donc, faites un clic droit sur l'animation, passez à la chute, qui n'a apparemment pas encore été créé. Alors allons de l'avant et passer dans le lecteur d'animation ici et créer une autre animation. Donc je vais prendre cette idole et la dupliquer. Donc maintenant, nous avons une copie inactive. Je vais renommer ça pour être l'automne comme l'animation. Et nous allons juste prendre ce truc d'animation, changer la valeur de ralenti à l'animation d'automne. Donc, parce que nous avons dupliqué l'animation, nous avons déjà l'heure de l'animation réglée à 0,05 seconde et à la répétition. Donc c'est peut-être tout ce dont nous avons besoin. Donc, de retour dans l'arbre d'animation, nous pouvons sélectionner l'animation de la fleur. Peut-être qu'on a vraiment besoin de recréer la boîte d'animation. Je vais donc cliquer avec le bouton droit de la souris Ajouter une animation. Et j'espère que cette fois-ci, ça arrive ici. Nous avons donc l'animation d'automne et nous voulons connecter cela à la valeur de mélange positive. Donc maintenant, j'ai trois possibilités sont un saut, permettant à l'espace de fusion de choisir notre animation basée sur le mouvement x ou ayant chuté comme l'autre animation. Alors connectons ceci à la sortie ici. Et nous allons déplacer cette valeur de curseur autour. Donc on peut voir au plus un, c'est une animation en chute, négative, on a l'animation de saut. Et à 0, il va par défaut à quelle que soit la sortie de linspace 1D est ici. Donc maintenant, nous devons faire une chose de plus qui est de définir cette valeur et le code y sinus. Donc, si nous cliquons sur l'arbre d'animation, nous pouvons étendre les périmètres et nous pouvons voir le chemin vers ce sinus y. Donc, ce sera à peu près comme le déplacement x et juste les paramètres coupent le nom de la variable comme il l'a tapée ici. Donc y signe de soulignement et puis finalement barre oblique montant de mélange. Notez que pour l'espace de fusion 1D, la dernière partie de ce paramètre était la position de fusion. Mais pour ce mélange trois, c'est en fait la quantité de mélange. Donc, vous devez faire attention là-bas. Ok, alors revenons dans le code et nous avons notre fonction de paramètres d'animation ici. Ajoutons juste un peu ici. Donc, l'arborescence d'animation définir les paramètres et nous voulons y slash mélange quantité de soulignement. Et la valeur que nous allons faire pour cela est juste point de vitesse
sinusoïdale y. Par souci de cohérence, je suppose que je vais juste prendre le mouvement x et je vais renommer cela pour être x sinus aussi. Et puis dans l'arbre d'animation, nous allons juste nous assurer que ce paramètre est appelé x sinus. Donc, si vous le changez à un endroit, assurez-vous de le changer et à l'autre aussi. Et maintenant, nous pouvons aller de l'avant et relancer le jeu et voir si les animations jouent correctement. Alors allons de l'avant et frappons le jeu. Ok, et c'est tout. Saute. D' accord. Donc, il passe à l'animation de saut et quand il tombe, il a l'animation d'automne. Donc notre personnage se déplace à gauche et à droite et saute et tombe très bien.
12. Signaux et cartes d'état du joueur: Ok, la prochaine chose que je veux mettre en place est une étiquette que nous pouvons afficher au-dessus de notre personnage à des fins de
débogage afin
de savoir quel état ou quelle animation le personnage est à un moment donné. Donc, sur notre objet de caractère, je vais cliquer avec le bouton droit de la souris et ajouter un nœud enfant. Et puis cela va être un noeud d'étiquette, qui est techniquement un noeud de contrôle, mais vous pouvez le mettre sur un noeud de contrôle au-dessus d'un noeud 2D comme un corps cinématique 2D si vous le souhaitez. Sinon, généralement les nœuds de contrôleur iront sur le Canvas, ce qui est une sorte de votre interface utilisateur. Donc je vais cliquer sur l'étiquette ici, et je vais positionner cette étiquette quelque part au-dessus de notre joueur. Alors passons en quelque sorte ça ici. Et parce que c'est un enfant du joueur, devrait se déplacer avec le joueur. Donc peut-être que pour la valeur par défaut de l'étiquette, je peux juste en écrire aucun ici ou quelque chose. Et puis nous allons prendre l'alignement pour le texte et le centrer juste pour qu'il soit un peu plus agréable là-bas. Donc, ce que nous pouvons faire avec cette étiquette pour qu'elle montre l'état actuel que le joueur est et est de créer un signal. Donc, en vue du script de lecteur va créer un signal ici. Donc, sous l'état actuel défini, chaque fois qu'un nouveau statut est défini, nous allons créer un moyen de lui dire l'étiquette que le nouvel état a été défini. Donc, une façon serait juste d'accéder directement à l'étiquette ici, comme il l'a fait avec ceci, et ensuite juste faire le texte de point d'étiquette égale quelle que soit la nouvelle valeur. Mais une autre façon est de créer un signal. Donc, comme le signal envoie essentiellement un message et tout ce qui est attaché à ce signal sera en mesure d'y répondre d'une manière ou d'une autre. Donc, plutôt que l'étiquette ou le joueur de corps cinématique qui a besoin de se connaître directement l'un de l'autre. L' étiquette a juste besoin d'avoir, l'étiquette a juste besoin d'avoir une fonction de réponse au signal émis par le joueur, mais il n'a pas besoin de savoir quoi que ce soit sur le joueur directement. Donc, dans un sens, ce genre de découplage votre code entre vos objets. Et puis le point de connexion est le signal lui-même, que vous pouvez connecter pour acheter du code. Et vous pouvez également vous connecter à assez facilement en cliquant sur l'objet qui va au nœud. Et puis vous pouvez voir un tas de signaux ici auxquels vous pouvez répondre. Donc, quand on créera un signal et le script du joueur, il apparaîtra ici. Et puis nous pouvons double-cliquer et la section des notes et juste dire tout autre objet que nous voulons répondre à l'émission des signaux d'avoir une fonction, faire quelque chose avec les données quand ce signal est émis. Laisse-moi aller de l'avant et j'espère que ça aura du sens après ça. Laisse-moi plonger dans le code ici. Donc, en haut, nous allons créer un signal pour cette classe de joueur à émettre chaque fois que nous voulons l'émettre à l'intérieur du script. Donc, je vais ajouter quelques espaces ici. Je vais taper le signal et je suppose que je vais l'appeler état changé. Et puis cela va avoir une valeur pour tous les autres scripts comme le script d'étiquette à répondre. Donc je vais appeler ça un nouvel état. Et c'est à peu près tout pour configurer ce signal. Maintenant, nous avons juste besoin d'émettre ce signal. Donc ici en bas, et nous allons émettre un nouveau signal chaque fois que l'état change. Alors émettez un signal. Et puis nous avons mis le nom du signal. Donc changé d'état. On peut voir ça ici. Et puis il y a d'autres signaux par défaut, je suppose pour cette classe. Mais nous allons utiliser celui que nous venons de créer. Et puis nous avons besoin des paramètres. Donc, je vais mettre dans le nouvel état. Et puis on pourra sauver notre script. C' est à peu près tout. Maintenant, si nous cliquons sur notre joueur et nous allons à la section des notes en haut à droite et inspecteur supplémentaire, nous pouvons voir ce point de joueur G, D a un nouveau signal. Et puis nous pouvons double-cliquer sur cela afin de se connecter au signal. Donc, en cliquant sur le joueur, nous pouvons maintenant passer au noeud et double-cliquer sur l'endroit où il dit changé l'état ici, le nouveau signal que nous venons de créer. Maintenant, nous choisissons un script pour le connecter. Et il va créer une méthode de récepteur. Ainsi, le joueur émet le signal avec des valeurs de paramètres, puis l'étiquette d'état a une méthode de récepteur afin de répondre à cela. Donc, nous allons cliquer sur l'étiquette d'état connecté. Et maintenant, nous avons cette fonction sur le joueur a changé d'état. Donc, chaque fois que le joueur change d'état, nous voulons définir le texte de cette étiquette. Donc, je pourrais juste faire du texte de point auto. Et donc avec le texte de l'étiquette, nous pouvons définir le nouvel état là. Donc, je vais faire une chaîne du nouvel état. Donc, quelle que soit la valeur passée ici, nous voulons juste la convertir en une chaîne si ce n'est pas déjà une chaîne, et définir cela comme le texte. Revenons donc à notre jeu et allons de l'avant et frapper le jeu et voir si ce signal fonctionne. Ok, on doit avoir ce S. Alors essayons encore. Donc, si nous allons de l'avant et appuyez sur Play, nous pouvons voir les énumérations étant représentées comme la valeur entière. Donc 0 pour ralenti 14 courir autour, puis deux pour sauter. Donc techniquement, ça marche très bien. Mais ici, il pourrait être plus utile de montrer le nom des énumérations. Donc, au lieu de dire 0 pour inactif, nous avons juste ralenti représenté en haut là-bas. Donc, si nous revenons à la classe de joueur, quand nous émettons le signal, plutôt que d'émettre ce nouvel état comme un entier, nous pouvons avoir la valeur de chaîne être poussée aussi. Donc, pour ce faire, nous allons monter ici au sommet. Et pour cet état changé, je vais en fait avoir deux paramètres passés. Donc, le premier est de nouveaux états pendant, puis le second, qui est le courant, pourrait juste être un nouvel ID d'état ou un nouvel entier d'état, quelque chose le long de ces lignes. Donc maintenant en bas, nous allons toujours passer le nouvel état, qui est la valeur entière. Mais nous allons aussi accéder au nom de la chaîne de l'état et passer cela aussi. Nous pouvons donc le faire en accédant au nom de cet état. Donc, c'est un dictionnaire et nous pouvons juste faire des clés de point d'état. Et maintenant, nous devons passer la position du tableau, qui sera là où nous trouverons un nouvel état. Donc, si nous faisons cela et nous économisons, cela devrait maintenant passer avec deux arguments à l'étiquette d'état. Donc ça va là-bas. Et nous pourrions reconnecter cette fonction si nous le voulions. Je pense que nous pourrions juste être en mesure de nous en sortir avec retaper les paramètres. Donc, nouvel ID d'état, puis nouvelle chaîne d'état. Et nous allons juste prendre cette valeur et définir cela comme le nouveau texte. Donc maintenant notre signal va nous donner deux paramètres avec lesquels travailler. Et nous nous soucions seulement de la chaîne parce que c'est ce que nous voulons montrer au-dessus du joueur à des fins de débogage. Allons-y et voyons si cela fonctionne vraiment. Je vais frapper le jeu. Et maintenant, nous entrons dans le jeu. Ok, nous avons
ralenti, courir et sauter. Donc, cela devrait être beaucoup plus utile que d'avoir
juste un 0 ou un ou deux apparaissent au-dessus du jeu.
13. Suivez une caméra: Alors maintenant que notre personnage peut bouger pour la plupart, l'
une des choses que nous allons vouloir ajouter est un appareil photo suivant. Donc, actuellement, la caméra que nous mettons en place est juste destinée à cette zone et elle est statique. Donc, si on frappe le jeu, ça ne suivra pas notre personnage du tout. Ainsi, un personnage peut s'écouler hors de l'écran. Et ça pourrait être un problème si nous arrivons à cette partie où nous ne pouvons plus voir notre joueur. Maintenant, dans certains cas, vous pouvez avoir une caméra statique en
fonction du style de votre jeu ou de cette scène spécifique. Ainsi, vous pouvez réellement basculer entre différentes caméras statiques si vous vouliez simplement passer d'écran à écran, peu comme des étapes individuelles. Mais si vous voulez avoir une caméra de suivi, laissez-moi vous montrer comment le faire. Donc nous avons notre niveau et ensuite le joueur en bas. Et nous devons ajouter une transformation à distance au lecteur pour que la caméra 2D puisse suivre. Donc, si je fais un clic droit sur le lecteur et ajoute un nœud enfant, nous pouvons rechercher ce nœud de transformation à distance, il suffit de taper REM. Et ici, nous avons la transformation à distance 2D. Donc, je vais ajouter ça. Et maintenant, cette note 2D de transformation distante a une propriété appelée chemin distant. Donc, fondamentalement, le chemin distant indique à
un objet différent de regarder cette transformation pour le suivre. Dans ce cas, ce seront les caméras. Attribuons donc la caméra 2D. Et ce sera essentiellement tout ce que nous avons à
faire pour nous assurer que la caméra suit cette transformation à distance. Et par défaut, le lissage est un on. Je vais désactiver ça tout de suite et appuyer sur Play. Donc, si vous n'avez pas Smoothing, alors l'appareil photo va fondamentalement suivre parfaitement la quantité de votre personnage. Et il n'y aura pas de décalage entre le mouvement des personnages et la caméra. Donc, dans certaines circonstances, pourrait vouloir qu'il y ait un peu de retard suivant. Donc, vous pouvez cocher activé ici. Et moins vous voulez de retard, plus vous allez augmenter de vitesse. Donc, si vous voulez qu'il soit très lent à suivre le joueur autour, alors vous voudriez une vitesse inférieure. La valeur par défaut est cinq. Alors allons de l'avant et testez-le avec 10. Alors frappons sur Play et bougeons. Et vous pouvez voir beaucoup de Jenkins, oui, non ? Donc, un paramètre que nous pouvons utiliser qui aidera à corriger que beaucoup est l'accrochage de pixel GPU. Donc, si nous allons dans le menu du projet en haut à gauche, puis les paramètres du projet, nous pouvons rechercher l'accrochage de pixels et je crois que c'est sous Rending 2D. Donc on peut juste vérifier ça. Et cela va résoudre beaucoup de nos problèmes d'affichage. Donc, je vais fermer ça et allons de l'avant et frapper à nouveau Play. Et cette fois, quand on se déplace autour de l'écran, il semble beaucoup, beaucoup mieux. Donc, encore une fois, si ce suivant est trop rapide, vous pouvez essayer d'abaisser la vitesse. Donc, cinq est la valeur par défaut. Montrons à quoi ça ressemble. Et ici, il est sorti de ça. Donc si j'arrête de bouger, vous pouvez certainement voir le décalage là-bas. C' est donc à vous de décider quelles seront
vos préférences personnelles pour votre style de jeu. Allons-y et fermons ça là-bas. Et je suppose que pour l'instant je vais juste le remettre à 10 ans. Donc, c'est fondamentalement tout ce dont vous avez besoin, juste une transformation à distance et dire à la caméra de le regarder. Et vous êtes fondamentalement bon d'aller pour notre caméra suivre et obtenir o.
14. Code double: Hé, donc actuellement notre personnage peut se déplacer autour de l'écran, il peut sauter. Mais ce que nous pourrions vouloir faire est d'ajouter un peu de fonctionnalités supplémentaires à notre personnage. Donc, afin de les laisser se déplacer autour du niveau un peu plus facile, Allons-y et ajouter en double saut. Donc, je vais quitter le mode de jeu et allons dans le script de notre personnage. Donc, à l'intérieur de ce script, nous pouvons configurer un nouvel état et faire passer à cela avec pick next state comme avant. Donc, ce que nous allons faire, c'est que si l'entrée est pressée, nous allons sauter. Mais dans ce cas, ce sera un double saut parce que le personnage est déjà dans l'air. Donc ça va, donc pour notre prochain état de choix, ça va être similaire à ici, où si saut est pressé, nous sommes entrés saut, mais nous allons vérifier quand les personnages et l'air, et si le personnage est en l'air et saut réprimé, alors nous allons faire un double saut seulement tant que le personnage n'a pas atteint ses sauts maximaux. Donc, il est sur le sol est réglé à faux signifie qu'il va venir ici. Donc, nous pouvons juste mettre en place l'entrée if est l'action juste pressée. Et puis nous cherchons le saut. Et maintenant, nous allons passer à l'état de double saut, que nous n'avons pas encore créé. Donc, indiquez le saut à points, le saut de soulignement double. Et je vais faire défiler ici en haut et nous allons juste ajouter ça à notre liste d'états. Donc, double saut. Alors que voulons-nous arriver lorsque le saut est pressé ? Eh bien, nous voulons qu'il saute comme nous l'avons fait avec l'état normal des sauts. Nous voulons aussi qu'il saute quand nous faisons un double saut. Maintenant, cela pourrait être exactement comme le premier saut où nous faisons juste l'impulsion de saut négatif. Ou vous pouvez avoir une fonction séparée pour un double saut. Et peut-être que cela a une valeur d'impulsion de saut différente. Pour l'instant, je vais juste l'installer ici pour faire un saut normal en termes de mouvement. Donc, comment nous pouvons ajouter un double saut à cette petite déclaration de match ici est que nous venons de mettre une virgule et ensuite nous faisons l'état point double saut. Et je pense que nous pouvons avoir un espace là-bas aussi. Appuyez sur Enregistrer. Donc maintenant, si l'état est saut ou double saut, nous allons exécuter la fonction de saut. Donc, vous pouvez juste avoir comme une liste de différents états veulent correspondre à certaines actions à. Maintenant, bien sûr, cela ne correspond qu'au mouvement de celui-ci. Nous devrons toujours configurer l'arborescence d'animation pour passer à l'animation de double saut. Mais une autre condition que je veux ajouter à cela est l'action juste pressée est de voir si les sauts sont au-dessus du nombre maximal de sauts. Parce que notre personnage peut probablement sauter deux fois, mais généralement pas plus que ça. Donc, nous pouvons avoir une variable de sauts max, pourrait la définir à deux ou trois autant que vous voulez. Mais si nous n'avons pas cet ensemble, le personnage sera juste capable de continuer à sauter pour toujours. Donc on peut juste le montrer en jeu. Je vais y aller et appuyer sur le bouton de lecture. Et commençons à sauter. Donc, je peux juste continuer à spammer le bouton de saut et juste aller bien au-dessus du niveau. D' une manière générale, ce serait révolutionnaire. Alors allons-y et fermons ça et avons une variable de sauts max ici. Donc, je vais exporter des sauts entiers var max, et je vais par défaut à deux. Ensuite, chaque fois que nous rencontrons cette situation où nous pourrions le faire sauter, nous nous assurons qu'il n'a pas déjà atteint cette quantité de sauts maximaux. Donc ça va être ici. Quand on envisage de faire un double saut. Nous voulons que la condition finale que les sauts soit inférieure ou égale aux sauts maximaux. Et comme nous le savons, chaque fois que nous exécutons la fonction de saut qui va s'incrémenter. Donc nous avons frappé Jump une fois pour entrer dans les airs et ça devrait aller à un. Nous faisons le double saut et il devrait arriver à deux. Et vous ne devriez pas être capable de faire plus de sauts jusqu'à ce que nous ayons touché le sol et que nous soyons sur le sol est vrai, et les sauts sont réglés à 0. Alors allons de l'avant et frappons le jeu et pendant que je suis sur le sol afin que je puisse sauter une fois et que je puisse frapper la barre d'espace deux fois pour double saut. On dirait qu'on peut encore sauter pour toujours. Alors jetons un coup d'oeil à ça. Donc, je pense que je vais juste le déboguer en imprimant le nombre de sauts sur la console. Connectez-vous ici, la sortie. Et voyons ce qui se passe quand on touche Play et qu'on continue à appuyer sur le bouton de saut. Donc 23. On dirait qu'on peut aller à trois, mais pas plus haut que ça. Donc, oui, ça devrait être inférieur au nombre de sauts maximaux. Et maintenant, le personnage ne devrait pouvoir sauter que deux fois. Alors rejouons le jeu 12, ok, 123, non, ça ne marche pas. Ok, donc on ne peut faire que deux sauts. Nous avons un double saut, mais ça ne va pas plus que ça.
15. Configurer des Oneshot Jump dans Arbre et Code de Animation.: Donc, la prochaine chose que nous devons faire est de configurer l'animation double saut pour travailler avec l'astuce de l'animation. Donc, si nous regardons le sprite animé dans la scène des joueurs, nous pouvons voir jeter un oeil à ces animations que l'animation double saut ici est un saut périlleux. Donc je vais dire que le personnage ne devrait faire qu' un saut périlleux chaque fois qu'on frappe la barre d'espace pour faire un double saut. Donc, cela va être un peu plus ce que nous appellerions une animation one-shot. Et nous pouvons configurer cela assez facilement dans l'arbre d'animation aussi. Donc, à un coup va jouer une fois et puis il va reprendre d' autres animations en fonction d'autres paramètres que nous avons définis. Donc, ce coup va prendre la priorité sur les animations de saut standard, de
chute, d'inactivité et d'exécution. Donc, si nous faisons un clic droit sur le graphe de noeuds ici, nous pouvons ajouter un one-shot. Donc, vous verrez qu'il a deux ports. Un pour un tir dans une entrée standard de quatre ans. Donc je vais prendre ce connecteur entre le mélange 3 et notre sortie. Ensuite, je vais rediriger cela dans l'entrée. Et puis le seul coup va se connecter à la sortie. Donc, cela va signifier qu'ils sont un seul coup prend priorité sur tout autre chose ici. Si le one-shot est actif et que nous savons qu'il est actif à cause de ce petit paramètre booléen que nous pouvons définir quand c'est activé, nous voulons qu'il joue l'animation double saut. Donc, je vais faire un clic droit sur le graphe de noeud, aller à l'animation. Et puis ici, sélectionnons l'animation de double saut, connectez-la dans le seul coup, et nous allons simplement renommer le paramètre que cette prise va utiliser. Donc, si vous cliquez sur l'arbre d'animation, nous pouvons voir le périmètre d'un seul coup ici. Et donnons-lui un nom plus spécifique. Donc je vais juste appeler ça double saut de soulignement. Je pense que c'est à peu près aussi clair que possible. Et si nous survolons actif, nous pouvons voir que le chemin complet vers ce paramètre est périmètre slash double trait de soulignement barre oblique active. Donc, nous allons avoir besoin de définir cet encodage dans une minute. Mais avant de le faire, quand nous avons un nœud one-shot, il y a deux propriétés que nous devrions changer. C' est l'heure de Baden et le temps de s'estomper. Donc, pour notre animation pixel art, nous ne voulons pas qu'il y ait un délai entre l'entrée d'une animation et le démarrage de la lecture. Donc on veut les prendre et les mettre à 0 pour les deux. Donc, lorsque le one-shot est actif, le basculement devrait être immédiat. Ok, donc maintenant on peut passer au code. Alors jetons un coup d'oeil à ça. Nous allons aimer avant de devoir utiliser l'arbre d'animation et définir un paramètre. Mais cet ensemble et la fonction de paramètres m est en cours d'exécution chaque mise à jour de processus physique. Ce serait donc un nombre défini de fois par seconde. Mais le fait est que nous avons seulement besoin de définir ce paramètre d'animation sur true, spécifiquement lorsque nous faisons des doubles sauts. Il serait donc très redondant de le mettre ici et de faire une sorte de vérification, puis de le définir sur active ou false à chaque seconde. Donc, venons en fait ici au fond. Et un bien meilleur endroit serait de le mettre au centre. Donc, lorsque nous entrons dans un nouvel état avec l'état actuel défini, nous pouvons avoir ce paramètre B assis lorsque nous entrons dans l'état de double saut. Donc, si vous n'avez pas déjà séparé votre saut de point d'état et votre correspondance de double saut de point d'état. Tu peux le faire maintenant. Donc je vais mettre un deux-points ici. Et on va faire un double saut d'État. Et je vais déplacer ça en bas. Donc, cela va maintenant être sa propre chose distincte. État points-points saut deux-points. Et bien sûr, nous allons toujours vouloir qu'il fasse ce saut, la fonction du saut. Mais nous allons également vouloir prendre l'arbre d'animation et définir le paramètre. Donc, le nom des périmètres était des paramètres barre oblique double saut de soulignement barre oblique active. Et parce que nous entrons juste en double saut, je veux mettre cela à vrai. Donc, cela dit fondamentalement l'arbre d'animation K. Jouez le seul coup. Nous allons faire le saut périlleux double parce que nous sommes maintenant dans l'état double saut. Donc la dernière chose que nous devons faire est de trouver comment sortir de ce coup. Donc, le script va définir ceci sur true, mais nous devons aussi le définir sur off afin qu'il puisse aller jouer les autres animations une fois que c'est fait. Donc, nous pouvons le faire dans le lecteur d'animation. Et si vous trouvez l'animation double saut, elle devrait être réglée sur 0,3 seconde. Donc il joue six images à 20 images par seconde. Donc, nous faisons l'animation 0,3 secondes de long. Et nous voulons également désactiver la boucle d'animation si elle est activée ici sur la droite, parce que cela n'est censé jouer qu'une seule fois, puis Terminer. Maintenant, nous pouvons zoomer un peu ici et nous allons vouloir ajouter une autre piste. Nous allons définir le paramètre de l'arborescence d'animation pour
le one-shot sur false lorsque cette animation est terminée. Et bien sûr, ces multiples façons de le faire. Vous pouvez le faire dans le code ici aussi. Mais cela me semble plus pratique. Donc, je vais ajouter la piste, la propriété, la piste, l'arbre d'animation, choisir le périmètre. Périmètre est actif en double saut. Et maintenant, nous devons définir une image-clé pour ça. Donc ici à 0,3 secondes lorsque cette animation est terminée, cliquez avec le bouton droit de la souris sur la touche Insérer, et il va déjà être désactivé par défaut. Donc, fondamentalement, à ce stade, il prend le périmètre, le double saut actif, et le réglage sur false, indiquant que l'animation est terminée. Donc, après cela, il y a un coup sera faux et il
reprendra le retour au mélange trois pour choisir ce qui devrait être la sortie. Donc si tout se passe bien, ce devrait être tout ce qu'il nous faut faire pour mettre en place ce coup. Allons sur Play et voyons où nous en sommes. Ok, animations à travailler avec saut et il y a notre double saut qui fonctionne vraiment bien. Une chose à noter, la façon dont le code actuel est écrit, un joueur peut sauter jusqu'à deux fois avant qu'il ne touche le sol. Donc si vous tombez ici, ça ne compte pas comme un saut. Donc si je tombe et fais un double saut, on peut faire des sauts doubles dans les airs. Bien sûr, il ne jouera qu'une seule fois si le premier double saut est toujours en cours d'exécution. Voyons voir. Ok, mais ouais, si l'animation est terminée et que vous faites ce deuxième saut de flèche, alors il fera cette deuxième animation là-bas. Donc juste quelque chose à penser. Vous voudrez peut-être que votre personnage soit en mesure de le faire où peu importe comment il est arrivé dans l'air, vous avez sauté deux fois ou vous voudrez peut-être qu'il soit limité qu'un personnage ne puisse faire qu'un double saut dans l'air, point peu importe s'il est tombé du bord ou s'il a sauté dans les airs. Dans ce cas, vous pouvez configurer une variable comme si un double saut s'est produit. Et si c'est faux, alors permettez le double saut. Et une fois que vous entrez double saut, définissez-le sur true et ne réinitialisez que
lorsque le, lorsque le personnage frappe le sol. Sinon, vous pourriez vraiment aimer quand vous personnage peut sauter deux fois indépendamment, cela pourrait avoir un sens pour certains jeux. Donc juste quelque chose à penser, mais à peu près pour cette vidéo, faire jouer l'animation comme un one-shot semble fonctionner. Donc je suppose qu'on est bons ici.
16. Cheminement de Waypoint pour Angry Pig Enemy: Ensuite, créons un ennemi pour notre jeu de plateforme. Donc nous allons utiliser l'art pour cochon en colère pour ça. Et je vais ouvrir l'art, l' aventure
pixel aux ennemis. Et là, nous avons nos différents sprites de personnages. Donc, nous pouvons cliquer sur l'un de ces et voir essentiellement un aperçu des différentes animations sur en haut à droite. Donc, pour créer notre nouvel ennemi, ça va être similaire à la création d'objets de notre joueur. Nous devons donc créer une nouvelle scène. Et la racine de cette scène va bien sûr être un corps cinématique 2D. qui signifie que la façon dont il se déplace va être quelque chose que nous devons écrire dans la configuration pour nous-mêmes dans un script. Allons à la scène et à la nouvelle scène. Et puis pour ici, Let's autre noeud et puis corps cinématique 2D. Donc, pour ce corps cinématique, Double-cliquez dessus. Et on peut voir qu'il est centré sur la vue de la scène à la position 0, x et 0 y. Et ajoutons un sprite animé. Donc, ajoutez le nœud enfant, puis le sprite animé. Et encore une fois, la raison pour laquelle nous utilisons des sprites animés est que pour le pack SART, toutes les animations sont divisées en leurs propres textures droites individuelles. Ainsi, les sprites animés nous permettent d'utiliser des textures séparées pour différentes animations. Beaucoup plus facile qu'avec un noeud de sprite. Prenons le sprite animé et je vais créer des animations pour cela. Allons du côté droit. Donc, les cadres ou appuyez sur le bouton vide et cliquez sur New sprite frames. Ouvrons ça. Et puis nous avons notre fenêtre d'animations ici en bas, va tout par défaut à 20 FPS. Et renommons la première animation en mode inactif. Donc nous allons cliquer sur ce bouton ici qui ressemble à
une grille pour ajouter des cadres de feuille de sprite et nous allons aller dans l'art, aventure
pixel aux ennemis, cochon
en colère, et un inactif. Donc on peut juste compter rapidement combien de cadres sont ici. J'en ai neuf. Donc, neuf pour horizontal, vertical, puis sur le côté droit, sélectionnez Effacer tous les cadres, ajouter des cadres. Et si nous
jouons, nous devrions pouvoir y voir notre petite animation. Donc maintenant, nous avons juste besoin de répéter cela pour les autres animations. Ajoutons donc une animation de course. Et courir prendra, bien
sûr, les cadres de course. Voyons donc 3, 6, 9, 12. Donc 12 horizontales, une verticale. Sélectionnez tout ajouter et faire cette perle 20 FPS. Alors ajoutons cela à partir du personnage. Cela ressemble à environ 16 par un, ou sélectionnez tous les ajouter. Et nous pouvons juste tester que cela fonctionne en ayant une lecture automatique sur cette animation. m'assure juste que tout semble centré correctement. Donc ça devrait être assez évident. Ok, ensuite, ajoutons frapper un et frapper 2 pour quand l'ennemi subit des dégâts. Et ça ressemble à cinq cadres. Sélectionnez Effacer tout. Et puis nous devons faire 20 FPS. Ok, on dirait que j'ai foiré l'ajouter. Supprimons donc tous les cadres et assurez-vous qu'il est frappé un par un horizontal, un vertical, et ajoutez-les dans. Ok, c'est ce qu'on devrait voir. Maintenant, ajoutons en deux. Donc, je vais ajouter la même chose par des cadres. Donc cinq horizontaux, un vertical, ajoutez-les et il s'assure que FPS est 20. Donc, nous pouvons aller entre nos différentes animations et tout devrait être en douceur. Donc la prochaine chose que nous allons devoir faire est déterminer comment ce personnage va bouger. Donc mon idée pour ce cochon en colère et ce qui est réellement le renommer là-bas et l'enregistrer comme une nouvelle scène. Donc cochon en colère, ou l'enregistrer dans personnages parce que nous pouvons créer un dossier ennemis ici juste au cas où nous finirons avec beaucoup. Et puis cochon en colère en a vu plus, gardez-le là-dedans. Donc, mon concept pour ce personnage de porc va être que par défaut il va marcher entre deux waypoints différents de recherche, donc il ne peut se déplacer que vers la gauche et vers la droite. Pas de mouvement vertical, au moins sans gravité. Et si un joueur est détecté, alors au lieu de marcher, il va changer à une course en colère. Donc, nous avons mis cela en course plus tard, augmenter la vitesse de mouvement du personnage. Et si l'ennemi ici court sur le joueur, alors le joueur va subir des dégâts. Et ce sera essentiellement les habitudes des cochons en colère. Donc, un ennemi vraiment simple ici. Donc, je vais remettre l'état par défaut en mode inactif. Et nous pouvons ajouter un script à ce personnage. Donc, je vais juste cliquer avec le bouton droit de la souris sur Script attaché, et cela s'appellera Angry pig dot h gd. Donc pour l'instant, cela va juste étendre le corps cinématique 2D. À l'avenir, nous pourrions vouloir utiliser l'héritage pour avoir un script ennemi de base, puis d'autres ennemis peuvent hériter de
cela et acquérir essentiellement une partie des fonctionnalités de base. Donc on n'a pas besoin de l'écrire sur tous les ennemis. Mais pour l'instant, on va tout mettre dans le cochon en colère. Et puis si nous devons l'amener dans une classe ennemie de plus haut niveau plus tard, alors nous le ferons séparément dans une autre vidéo. Donc pour le mouvement dont j'ai parlé, nous allons devoir mettre en place un point de passage pour notre personnage. Donc, si vous ne l'avez pas déjà fait, Allons de l'avant et sauvegardons la scène comme un dossier senior et Ennemis. Donc je vais monter ici, Save Scene As. Et je le mets en personnages,
ennemis, comme vous pouvez le voir ici. Assurez-vous également que votre script enregistré dans le même dossier pour des raisons d'organisation. Et maintenant, passons au niveau 1. Et je vais juste déposer une copie de l'ennemi ici. Donc, pour que notre personnage bouge, nous allons devoir lui donner quelques waypoints pour aller vers. Il y a donc plusieurs façons de le faire. Je pense que ce qui pourrait être logique est de mettre en place des waypoints à ce niveau que nos ennemis peuvent utiliser comme un point pour se déplacer vers et ensuite l'assigner comme une liste. Chaque fois que nous créons une instance de notre objet, nous sommes juste en mesure de les assigner ici dans un tableau pour quelle position aurait dû se déplacer vers. Donc, dans le niveau, je vais faire un clic droit ici et je vais ajouter un nouveau nœud. Donc, nous allons commencer avec le nœud 2D comme apparent, parce que nous voulons que cette liste de waypoints se déplace avec le niveau si jamais nous passons à la position des niveaux pour une raison quelconque. Donc je vais appeler ça waypoints. Et puis les points en cours, nous allons ajouter quelques points de position deux d. Donc, pour ceux-ci, je suppose que je peux simplement les renommer waypoint un, puis les dupliquer quelques fois et nous allons juste obtenir waypoint 1,
2, 3, ainsi de suite et ainsi de suite. Et il devait juste s'assurer que vous les traînez, mais ce ne sont pas des enfants les uns des autres, donc ils devraient être leur propre truc. Ensuite, nous pouvons configurer l'emplacement de ces waypoints lorsque nous
regardons cette pile d'objets et nous voulons nous
assurer que nous déplaçons celui que nous avons sélectionné. Vous pouvez maintenir Alt. Et puis ça fera en sorte que ce point de passage soit
élu et déplacé parce qu'on a un point de passage ici. Donc si on tient Alt, on attrape le bon. Ajoutons un waypoint. Disons juste à ce sujet. Et puis allons-y waypoint 2. Et on va juste faire sortir ça de la pile deux juste là. Ainsi, notre personnage sera en mesure d'aller et arrière entre là et là. Et puis allons obtenir 0,3. Pas encore besoin de ça, mais peut-être que pour l'avenir il y aura plus de pertinence et je vais juste le faire passer là-bas. Donc maintenant, notre cochon en colère va avoir besoin d'une liste de position aujourd'hui autrefois ce sont ses waypoints. Alors ouvrons le script et créons une exportation loin. Donc, cela va être un tableau de position 2D et nous allons l'appeler waypoints var. Essayons de sauver ça. Ok, donc il ne semble pas que l'utilisation d'un tableau
du type de nœud 2D de position fonctionnera pour nous. Donc une autre alternative et ma tête est d'utiliser le chemin du nœud ici. Donc aucun chemin ne va être le chemin relatif est un noeud. Et puis lorsque le jeu est en cours d'exécution, nous pouvons obtenir le nœud à partir de ce chemin de nœud et ensuite obtenir la position de ces nœuds dans le monde du jeu pendant que le jeu est en cours d'exécution. Donc, en ce moment, nous devrions être en mesure d'augmenter la taille de notre tableau ici sur la droite, puis attribuer les différents nœuds. Donc, nous voulons waypoint 1, puis waypoint 2. Et ce sera tout pour ce personnage. Donc maintenant dans le script Pig en colère, devons-nous nous assurer que lorsque le jeu est en cours d'exécution, que notre personnage se déplace d'avant en arrière entre ces deux points. Et ça va commencer par le premier waypoint. Donc, nous devrions avoir une variable ici pour garder une trace de quel point de cheminement il est. Donc, faisons l'indice de waypoint var. Et cela va commencer à 0, ce qui va signifier le premier waypoint de la liste. Et donc, en plus de cela, nous pouvons avoir une position de waypoint. Donc, ce seront les coordonnées XY pour où ce waypoint est à. Donc on n'a besoin qu'une seule fois. Et puis à chaque fois que la fonction de processus physique est en cours d'exécution, elle peut simplement se déplacer vers cette position jusqu'à ce qu'elle arrive à cette position. Donc, en parlant de quoi, nous n'allons pas utiliser le processus dot-dot-dot Plus va vouloir la fonction physique processus dot delta. Alors passons ça pour l'instant. Donc, quand le jeu commence, Allons-y et obtenons la position du premier waypoint. Donc, nous allons faire sur prêt à spécifier que quand le jeu commence, quelque chose va se passer ici, ou plus précisément, quand le script démarre, qui est probablement quand ce personnage est chargé dans le niveau. Donc, la position waypoint, nous allons faire un noeud get et nous allons avoir le tableau waypoints. Donc, là-haut. Et nous allons devoir mettre l'index que nous essayons d'obtenir. Donc index waypoint au début de ce jeu, En supposant que cet indice de waypoint est 0, cela vous obtenez le nœud à cet endroit. Donc, après avoir obtenu le noeud, nous allons juste avoir besoin de la position de ce noeud. Mettons ça ici et nous pourrions aller de l'avant et tester ça en faisant une empreinte sur la position waypoint, alors nous pourrons lancer ce niveau avec ce cochon en colère dedans. Donc actuellement, le cochon en colère n'a pas de formes de collision, mais ça devrait être bien pour le moment. Allons de l'avant et jouons, d'accord, et on peut voir qu'on a la position de ce waypoint, ce qui est bon. Et nous pouvons réellement transformer cela en une fonction que nous pouvons utiliser chaque fois que nous avons besoin d'obtenir et de définir la nouvelle position de waypoint, nous pourrions en faire un ensemble de fonction. Alors faisons le point d'onde, je suppose que je vais dire index. Et puis nous allons faire cette fonction ici. Donc ensemble de fonctions, index de point de cheminement. Et bien sûr, nous passerions la valeur du nouvel indice. Donc, l'index de point de cheminement va être égal à cette valeur. Mais alors nous allons aussi dire cette position de waypoint. Eh bien, en gros, juste cette ligne ici. Donc, introduisons cela là et remplacons la valeur l'index de point de cheminement à ce stade, disant ceci ou cela serait le même ici. Mais maintenant, nous allons juste utiliser la valeur qui a été passée dans cette fonction juste au cas où. Donc maintenant, chaque fois que nous avons dit l'index waypoint, nous définissons également la position waypoint. Donc je suppose que nous serions en fait en mesure d'effacer cela, en
faire un var honoraire. Donc, lorsque le jeu se charge, il va définir la valeur à 0. Et nous pouvons nous débarrasser de ce morceau, puisque ça va déjà être assigné. Théoriquement, cela devrait être un vecteur de, je crois, et allons de l'avant et voir si cela fonctionne. Donc, nous verrons si nous arriverons à ce point quand le jeu sera lancé. Maintenant que cette fonction est là, nous pouvons juste avoir ce bit est
supprimé et nous n'avons pas besoin que ce soit un ion prêt. Mais ce que nous pouvons réellement faire et ne pas supprimer cela aussi. Nous aurons juste quand le jeu commencera ici, et nous allons juste définir l'index de waypoint à la valeur de départ. Donc disons point de départ. Et nous pourrions en faire une exportation loin. Donc, je vais faire cette exportation et var waypoint de départ. Et nous allons par défaut que 0. Donc maintenant, dans le script commence, il va commencer l'index waypoint à n'importe quel waypoint de départ est. Et à la suite de la vente, Il va également définir la position waypoint. Ok, donc nous avons réellement besoin de mettre l'index de point auto ici pour nous assurer que cela fonctionne correctement. Ok, et maintenant il arrive ici. Donc, il dit get index invalide, bien
sûr, parce que je l'ai mis à cinq pour les tests. Et maintenant, nous pouvons le contrôler avec le point de départ. Et cette valeur peut être définie ici. Donc, si vous voulez que le cochon en colère ne se déplace pas vers le premier waypoint, mais le second waypoint, vous pouvez simplement spécifier la position du tableau ici et décider de cela. Fondamentalement, chaque fois que nous changeons l'index de point de cheminement, nous allons également changer la position du point de cheminement. Donc maintenant, nous avons juste besoin de mettre en place et de déplacer la vitesse et de s'assurer que le personnage se déplace entre ces deux points. Alors montons ici et créons une variable de vitesse de déplacement. Donc je vais faire le flux d'exportation, la barre déplace la vitesse, et je vais juste régler arbitrairement ça à 200 pour l'instant pour l'avenir. allons aussi, pendant que nous y sommes, ajouter une vitesse de course. Donc, ce serait la vitesse rapide lorsque le cochon en colère est en fait en colère afin de courir vitesse et 300. Et maintenant, faisant le processus de physique, nous voulons que le personnage se déplace entre ces deux points. Nous allons donc devoir regarder la direction entre
le personnage et le waypoint actuel. Donc, bien sûr, comme avec beaucoup de choses, Il y a quelques façons différentes que nous pourrions faire cela. Alors commençons par obtenir la direction entre le personnage actuel, ils cochon en colère, et le waypoint. Donc je vais faire une direction de barde. Et puis faisons la self.position. Et puis pour ce vecteur, on va faire la direction 2. Et puis nous devons lui donner un autre vecteur. Alors, bien sûr, on a besoin de la position du point de passage, d'accord ? Et maintenant que nous avons une direction, nous pouvons aussi obtenir la distance. Donc, faisons réellement la distance x parce que nous nous soucions seulement de la distance horizontale, sans inclure la distance verticale, parce que notre personnage ne va jamais sauter vers le haut. Donc, nous allons utiliser la valeur absolue de la position
auto x, puis moins la valeur absolue de la position non auto x, mais notre point de position point x. Donc, cela devrait être la distance entre les deux points, sans compter pour direction, et alors ce serait la direction. Donc, ce que nous allons faire est si la distance au point de cheminement est au-dessus d'un certain seuil, alors nous allons continuer à avancer vers ce point de cheminement. Et si c'est en dessous de ce seuil, nous allons passer au prochain point de cheminement et quelque chose vers lequel aller. Donc, si la distance x est plus grande, et nous pourrions dire plus ou égale alors. Et nous pourrions appeler cela quelque chose comme waypoint, seuil sont en fait waypoint distance arrivé. Je pense que ça a un peu plus de sens dans ma tête. Donc, si la distance est supérieure à la distance arrivée du point de cheminement, alors nous allons nous déplacer vers le point de cheminement. Sinon. On va changer de waypoints. Alors mettons le waypoint à distance ici. Donc flux d'exportation, notre waypoint est arrivé distance. Et je vais juste créer ça comme 10 pour maintenant. Donc, pour aller vers le point de cheminement au début, il
faut avoir une vitesse. Et nous pourrions en fait faire une variable ici, est-ce que nous avons besoin de la référencer dans d'autres fonctions. Donc, la vitesse va être égale à un vecteur deux. Et la valeur x va être la vitesse de déplacement fois le sinus du point de direction x. Donc, indépendamment de ce que cette valeur de direction exacte est, nous nous soucions seulement de savoir si elle est positive, négative ou 0. Donc, fondamentalement, signez ou convertissez ça en un positif. Négatif un ou 0, ce
qui signifie que la vitesse de déplacement sera toujours positive soit 200, négatif 200, ou 0. Et puis ajoutons une virgule là-dedans. Donc, la deuxième valeur sera une gravité. Mais je suppose que pour l'instant, on va juste en fait, on peut juste regarder dans les scripts du joueur. Donc nous allons utiliser ce genre de chose. Voyons voir. Je vais juste copier toute cette ligne ici. Donc, la vitesse actuelle et nous ajoutons la gravité, mais nous le plafonnons à la vitesse terminale. Et cela sera juste cohérent entre le joueur et les autres ennemis dans le jeu. Donc, on arrête ça juste juste là dedans. Et maintenant notre personnage a la gravité basée sur les paramètres du jeu. Ok, alors bougeons et glissons notre corps cinématique. Et on va le déplacer avec la vitesse. Et nous voulons dire vecteur deux points vers le haut. Je ne serai probablement pas très pertinent pour un ennemi comme celui-ci. Mais si jamais nous avons besoin de vérifier si le corps cinématique est sur le sol, alors avoir la direction vers le haut sera important. Il vaut mieux l'avoir que de ne pas l'avoir, je pense. Sinon, nous voulons changer de waypoints. Donc, nous devons trouver à quel point on passe. Et pour savoir que nous devons connaître la taille du tableau, fondamentalement combien de waypoints y sont actuellement. Donc juste au cas où c'est quelque chose qui changerait pendant le match, je suppose que nous allons l'obtenir une fois à chaque fois qu'il arrive à ce point. Donc, nous allons trouver la taille de ce tableau. Donc, waypoints engourdis, waypoints, taille des points. Et puis nous vérifierons l'index actuel. Donc, si l'indice de waypoint est inférieur au nombre de waypoints, alors nous allons l'augmenter. Donc l'indice de point de cheminement est égal plutôt plus égal à 1. Sinon, si l'indice de waypoint est réellement égal ou supérieur au nombre de waypoints, alors nous devons le réinitialiser à 0. Donc l'indice de point de cheminement est égal à 0. Et puis ce bit nous permettra de parcourir les waypoints. Une chose que nous allons avoir besoin de nous pour initialiser cette variable de vitesse à un vecteur à 0. Ok, Donc cela signifie que cela va commencer avec les valeurs qui sont 0. Et aussi notre personnage va vraiment avoir besoin d'une forme de collision pour que l'une de ces fonctions physiques comme les mouvements, comme travailler dessus. Alors allons de l'avant et ajoutons une forme de collision au choix en colère. Donc collision en forme 2D. Ok, et donnons-lui une sauvegarde. Faisons une forme rectangulaire. Gardez-le agréable et simple. Et puis augmentons la taille de cette forme de collision afin qu'elle puisse interagir avec le sol. Et je vais le tenir dehors, étirer un peu. Et je vais aller dans la transformation et ajuster sa position de quelques pixels. Je vais être assez important que cette forme de collision égale à la position des pieds au sol. Donc, allons vraiment frapper le jeu ici. Et nous pouvons voir sont en colère cochon a pu passer à cette position de gauche. Donc, il se déplace correctement et glisse le long du sol. Le sommeil de collision semble être à peu près bon. Il y a le bon pixel, juste au-dessus du sol. Donc, tout est bon. Et maintenant, nous devons juste comprendre, pourquoi n'est-il pas passé à la deuxième position ? Ce cochon en colère a deux positions ici. Donc, je vais définir quelques points d'arrêt. Chaque fois que l'index de point de cheminement change. Touchons sur Play et voyons ce qui s'est passé. Ok, donc on arrive là où l'indice de waypoint augmente d'un. Alors plongons dans cette prochaine fonction. Ok, nous n'utilisons pas l'index de waypoint Self.age. Donc, nous devons faire cela ou la fonction setter pour réellement déclencher là. Donc maintenant on peut frapper jouer et voir si ça va marcher. Ok, obtenir l'index 2 non valide sur le tableau. Donc, n'aurait pas dû arriver ici avec deux si l'indice de waypoint est inférieur au nombre de waypoints. D' accord ? Donc ça devrait être le nombre de waypoints moins 1, ok ? Parce que c'est un compte et alors c'est une position de tableau. Et rappelez-vous que le début étrange à partir de 0 et le comptage commence à partir d'un. Donc, nous devons mettre un moins là pour s'adapter à ça. Donc maintenant, si nous frappons en courant, notre personnage devrait aller bien. Donc, en regardant le code, le cochon est coincé ici. Et puis, comme on peut le voir, il est constamment en train de basculer entre le premier et le deuxième point de cheminement. Ok, donc ici nous pouvons voir dans le code que ce peu ici ne fonctionne pas. Donc, nous pouvons voir ici que lorsque le premier point de chemin est atteint, il passe au deuxième point de cheminement. Et puis cette distance x est un négatif 173. Donc, nous ne voulons pas que cela soit jamais négatif, donc cela va un peu plus loin de faire cela serait en fait d' obtenir deux vecteurs et de les comparer avec la distance de fonctionnement. Donc, faisons un vecteur deux du point self.position x. Et nous allons dire 0 pour le y. Nous allons le faire pour les deux vecteurs,
source une distance deux, puis vecteur périmétrique à la position de waypoint x, puis 0. Ok, donc nous avons réellement besoin de point de soulignement point x. Donc, quand nous le faisons de cette façon,
fondamentalement, nous créons deux nouveaux vecteurs et la valeur y est la même. Donc, la seule chose à comparer sera les positions x de ces deux vecteurs. Et une distance deux va être une direction non spécifique. Donc, quand nous le faisons de cette façon, nous devrions obtenir une valeur plus 173 au lieu d'une valeur négative. Et on pourrait, eh bien, on n'a pas vraiment besoin, on peut juste frapper Play. Et voir si ça marche. Alors allons jouer, d'accord, et maintenant on voit que notre personnage se déplace entre les deux points. Donc c'est fondamentalement ce que nous voulons. Je veux dire, ça bouge assez vite. Donc, je voudrais peut-être refuser cela de façon assez significative. Alors allons à la vitesse de déplacement, faire 100, que la vitesse de course 200. Et aussi, euh, nous voulons retourner la direction de ce cochon en colère. Donc, quand il se déplace vers la gauche, nous retournons vers la gauche et on se déplace vers la droite, nous retournons vers la droite afin que nous puissions le faire dans le code assez facilement comme nous le faisions auparavant. Donc je suppose qu'on pourrait dire ici, si on veut faire un pas, alors on peut retourner la direction. Alors allons avoir accès au sprite ici, et nous allons faire notre sprite animé égal à signe dollar sprite animé. Donc ça fait référence à ça ici. Il n'a pas besoin de l'inprêt devant lui. Donc sprite dot h animée va être vrai dans une condition. Et cette condition va être si le signe de la direction x. donc nous devrions faire une variable pour cela. Donc var direction x sinus égal signe Point de direction x. maintenant, nous pouvons pop ça ici et juste en bas. Si c'est le cas, si c'est négatif, alors nous le retournerons. Donc, si c'est négatif, alors ça veut dire que nous allons à gauche, qui veut dire que nous voulons retourner ce brillant horizontal. Else-si le sinus est un, alors ça veut dire qu'on va à droite, ce qui veut dire qu'on veut qu'il éteigne le retournement. Et nous supposons actuellement que le sprite fait face par défaut. Sinon, ce serait en sens inverse. Donc, si le personnage se déplace vers la gauche, alors il tourne vers la gauche. Et s'il se déplace vers la droite, alors il revient à la valeur par défaut, pas de retournement. Et si elle ne bouge pas du tout où la direction x sinus serait 0, alors nous ne contrôlons pas le retournement parce que si elle ne bouge pas, alors nous ne devrions pas vraiment changer la direction. Alors maintenant, nous pouvons aller de l'avant et redémarrer le jeu. Mais C, Ok, donc le retournement fonctionne sauf qu'il est en marche arrière. Laisse-moi y jeter un oeil. Je suppose que c'est un caractère gauche par défaut face. Donc, ce que nous pourrions réellement faire est de mettre notre booléen d'exportation juste au cas où nous devions faire un nouveau personnage ou que les sprites changent, nous voudrions être en mesure de définir la direction de retournement par défaut. Donc ici, on peut dire des visages, non ? Et, et le revers des visages juste en bas. Et arrêtons encore pour de l'argent. Donc, si le sprite fait face à droite par défaut, alors nous voulons désactiver le retournement alors qu'il est orienté vers la droite. Et si elle ne fait pas face à la droite par défaut, donc si elle est définie sur false, donc les visages aimés par défaut, alors cela va être faux et nous ne voulons pas le retourner. Donc, fondamentalement, tant que nous définissons ce booléen à la bonne valeur, le personnage doit faire face à la bonne direction quand il se déplace. Donc on éteint les visages, non ? Allons sur Play. Nous pouvons voir que notre instance du cochon est capable de passer entre les deux waypoints. C' est une sorte de marche en général. Il y a évidemment des problèmes comme courir dans le joueur et être coincé là. Nous ne voulons probablement pas vraiment qu'il y ait une collision difficile avec le joueur, mais plutôt que d'infliger des dégâts au joueur puis de passer à travers lui. Et aussi, nous devons ajouter et l'état de course en colère et aussi nous assurer qu'il s'anime correctement. Tout cela, nous ferons probablement dans la prochaine vidéo ou deux.
17. Animation d'État gris, calques de physique et zone: Donc, à ce stade, il y a quelques ajustements que j'aimerais apporter au cochon en colère. abord, il doit avoir une sorte de zone de détection afin que lorsque le cochon en colère voit réellement le joueur, il
puisse passer à son mode de course en colère et se déplacer plus vite. Deuxièmement, comme vous pouvez le voir,
actuellement, aucune de ces animations ne sont en cours de lecture. Donc on va devoir mettre en place un arbre d'animation pour le cochon en colère. Et nous aurons également besoin de le stocker, mettant en place des couches physiques de sorte que lorsque le cochon en colère court dans le joueur, cela n'empêchera pas réellement le corps physique de se déplacer ainsi ce jeu, nous allons faire en sorte que le joueur et ennemis peuvent se déplacer à travers l'autre, bien sûr, être
toujours en mesure de faire des dégâts les uns aux autres, mais nous aurons besoin de configurer cela en commençant à utiliser des couches physiques. Nous pourrions donc ne pas laisser le cochon entrer en collision avec la couche de joueur, mais il pourrait y avoir une boîte endommagée sur le cochon, qui détectera s'il peut causer des dégâts au joueur et ensuite infliger des dégâts au joueur lorsque le joueur entre dans cette zone spécifique. Et donc une fois que nous avons la configuration de cochon en colère avec l'arbre d'animation aura également besoin de script sur les états et le code pour que cela corresponde avec. Et c'est à peu près ce que nous allons nous occuper dans cette vidéo. Alors, jetons sur la scène pour notre cochon en colère. Et je vais y ajouter une nouvelle zone. Donc, je vais ajouter un nœud enfant et nous cherchons une zone à d. Donc, nous pouvons simplement taper cela dans l'édition de recherche. Et cette zone 2D va avoir besoin d'une forme de collision à part entière. Donc, je vais faire un clic droit dessus, ajouter une coalition en forme de 2D. Donc ça peut être ce que tu veux. Et cette zone va essentiellement détecter quand le joueur est à proximité afin que le cochon en colère puisse entrer dans son état furieux et furieux. Donc, je vais renommer la zone détection en colère
2D parce que je pense que cela a juste un peu plus de sens ici. Il fera en sorte que le personnage entre dans cet état même si le joueur est directement au-dessus de la tête. Donc, je vais utiliser une forme ovale. Alors, à droite, où nous avons Inspecteur, changeons la forme en forme de capsule. Et puis je vais le faire tourner à 90 degrés parce que je veux qu'il soit plus large que grand. Alors passons à la transformation 90 pour les degrés de rotation. Ok, et puis élargissons cela à une quantité raisonnable pour qu'il puisse être aussi grand ou aussi petit que vous le souhaitez. Et pendant que vous jouez
au test, bien sûr, vous voudrez ajuster cela. Vous pouvez même avoir une taille de zone personnalisée pour différentes variations de l'ennemi, d'accord ? Et pour ces détections en colère sur la zone de deux D, je vais à je vais désactiver le problème de surveillance parce que je
n'ai pas vraiment besoin que cette zone soit détectée par quoi que ce soit d'autre dans le jeu. Nous avons seulement besoin de surveillance parce que cette zone va vérifier pour le joueur, mais rien n'a besoin de vérifier qu'elle se soucie de cette zone. Donc, il semble inutile de l'avoir sur. Et en fait, pourquoi utiliser des ressources supplémentaires quand nous n'avons pas à le faire. C' est pour ça que je laisse ça. Et maintenant, nous pouvons mettre en place un graphe de noeuds pour un arbre d'animation sur ce cochon en colère. Donc, comme le joueur, nous allons devoir cliquer avec le bouton droit de la souris et ajouter quelques notes. Ajoutons donc un arbre d'animation. Et puis ajoutons également un calque d'animation. Donc, ce lecteur d'animation va avoir toutes les configurations d'animation qui correspondent à nos animations sur le sprite animé. Alors créons un hit un. Donc, nous allons créer frapper un, frapper sur Idle, courir et marcher. Donc, dans la configuration de l'animation, Faisons nouveau. Frappe un. Et puis nous pouvons ajouter une propriété Trek. Donc, la propriété va être animée, animation sprite. Et sur le cadre 0, on veut qu'il joue. Hit one est l'animation. Et nous allons par défaut ces animations pour être de 0,05 seconde de long et sur répétition. Donc maintenant, nous pouvons dupliquer ça. Et bien sûr, la prochaine sera frappée deux. Nous allons donc changer cette animation pour le hit en animation. Dupliquez-le à nouveau, renommez-le. Donc faire Idle, courir et marcher animation. Ok, donc c'est la configuration de l'animation. Maintenant, nous devons nous connecter à la logique et à un arbre. Donc, pour l'arbre d'animation, créons un arbre de fusion de noeud d'animation tout comme le lecteur. Donc, afin de faire fonctionner la zone de détection en colère, nous pouvons mettre en place un espace de fusion un D, ce qui nous donnera une variable que nous pouvons définir pour contrôler si le personnage doit marcher ou courir. Donc, nous allons changer la variable ici pour jouer sont détectés, et ce sera un peu comme un booléen, soit définissez-le sur un ou 0. Et si nous ouvrons l'éditeur, nous pouvons ajouter les points. Donc à 0, nous voulons que ce soit une animation de marche, ce qui signifie que le joueur n'est pas détecté. Et puis à un moment, nous voulons qu'il soit exécuté. Et juste au cas où nous allons aussi faire un négatif une course qui aussi bien. Mais je pense que nous allons juste avoir deux valeurs, soit 0, soit une. Donc, maintenant que nous avons la configuration simple de l'espace de fusion, nous pouvons le connecter à la sortie. Si nous le faisons 1, nous obtenons l'animation de course, et si nous en avons plusieurs, nous obtenons l'animation de marche. Donc maintenant, nous avons juste besoin de vérifier si le joueur est détecté dans code, puis définir le paramètre aux bons moments. Donc, une façon pour que la zone de détection en colère dise au cochon en colère quand il y a le joueur à l'intérieur de la zone est d'utiliser des signaux. Donc, nous pouvons mettre en place une méthode de récepteur en allant noter ici sur la droite. Et puis nous pouvons utiliser la forme du corps entrée et la forme du corps. Excellent. Donc, je vais double-cliquer sur chacun d'eux et nous allons ajouter une forme de corps de zone de détection en colère entrée dans le script Pig en colère. Et faisons ça pour les deux. Donc double-cliquez sur connecté au script. Ok, et c'est essentiellement tout ce dont nous aurons besoin de la zone. Pour que les choses fonctionnent ici. Donc, quand une forme de corps est entrée, elle devrait être un joueur. Et nous allons installer ça avec des couches et une minute. Et en tant que jeu solo, il ne devrait y avoir qu'un seul personnage dans cette couche à un moment donné, un ou un 0. Nous pouvons donc simplement définir des paramètres d'animation sur l'arbre d'animation afin de prendre soin de cela. Donc, si vous n'avez pas déjà l'on prêt pour arbre
d'animation est égal à l'arbre d'animation ici en haut. Vous pouvez aller de l'avant et mettre en place ça. Et puis ici, nous pouvons faire l'animation point de l'arbre définir le paramètre. Donc, nous allons faire des paramètres barre oblique, joueur détecté barre oblique position de mélange. D' accord ? Et nous allons vouloir mettre ça à un. Et puis, lorsque le joueur quitte cette zone, nous voulons définir le paramètre à 0. Alors sélectionnez tout cela et collez-le ici. Et on a réglé ça à 0. Maintenant, si nous faisions un jeu multijoueur, nous pourrions avoir besoin d'un code un peu plus élaboré car il pourrait y avoir plusieurs joueurs. Mais dans ce cas, cela fonctionnera parfaitement bien car il n'y a qu'un seul joueur dans le jeu à un moment donné. Donc, cela simplifie simplement pour nous. Maintenant, si nous allons à la zone de détection en colère et à l'inspecteur, nous pouvons mettre en place ses couches de collision. Mais avant de mettre en place les couches de collision, nous devrions réellement définir ce qu'elles sont. Donc, dans le projet, les paramètres de projet que nous pouvons descendre, je pense que c'est sous la physique. Donc, la physique 2D ici sous les noms de couches. Écrivons quelques noms de calque. Alors couche un, Rican fait le monde. Et puis pour l'instant, passons ici à, disons la couche 4 et la couche et l'ennemi. Nous avons donc quelques couches de configuration. Et pour chacune de ces couches, nous pouvons avoir un objet en collision sur un certain calque, et nous pouvons également permettre qu'il soit trouvé par d'autres objets qui regardent ce calque. Alors fermons les couches ici. Nous avons donc l'option de couche sous collision. Ainsi, la couche est l'endroit où d'autres objets peuvent détecter cet objet et entrer en collision avec celui-ci ou faire ce qu'ils ont besoin. Donc, pour la zone de détection en colère, nous ne voulons pas de couche ici parce que rien n'a vraiment besoin d'entrer en collision avec elle. Nous utilisons juste cela pour déclencher des événements, ce qui fait essentiellement tourner le cochon. Mais le masque va être là où nous vérifions que ces événements se produisent. Donc, pour nous, ce ne sera pas la couche du monde, qui serait juste mis en place comme un, mais il va en fait être la couche était à Fort, qui va être la couche de couche. Si nous cliquons dessus et que nous cliquons dessus, il devrait être mis à jour ici. Donc, vous avez du travail pour est la couche de joueur. Donc, avec cette zone de détection en colère, nous ne cherchons qu'à la couche de joueur et cela ne devrait être qu'un seul joueur dans le jeu. Par conséquent, ce sera le seul objet qui peut déclencher les méthodes de récepteur ici pour définir le traitement d'animation 21 ou 0
selon si nous avons besoin de l'exécuter ou si nous en avons besoin pour marcher. Donc, si nous sauvegardons cela, maintenant nous avons juste besoin de définir le joueur comme un objet de couche de joueur. Et nous devrions aussi mettre à jour l'ennemi pour qu'il soit un objet de couche ennemi pendant que nous y sommes. Donc sous le cochon en colère, le corps cinématique va à la collision, à la collision physique du corps. Et puis nous allons changer la couche ici en ennemi. On va toujours utiliser la soudure comme masque. Donc je suppose que nous allons définir la couche du monde comme c'est tout le sol, les plates-formes, les tuiles, les choses que les interactions physiques normales devraient se produire. Et donc les corps cinématiques vont continuer à regarder vers le monde pour que ces collisions puissent toujours se produire en tant qu'ennemi, joueur ne pourra pas entrer en collision directe avec ce corps cinématique. Et ce corps cinématique ne pourra pas entrer en collision directe avec le joueur parce que nous ne vérifions pas bien le masque du joueur, et ils vérifient le masque du monde. Alors allons plonger à nouveau dans le joueur. Donc, la scène du joueur, nous cliquons sur le corps cinématique du joueur, physique, corps 2D. Et nous changeons cela d'un objet de monde à un objet de joueur. Et il va se tourner vers la couche mondiale pour que les collisions se produisent. Alors maintenant, quand nous lançons le jeu, si j'ai tout mis en place correctement, le cochon ne devrait pas entrer en collision avec le joueur et le joueur ne devrait pas entrer en collision avec le cochon. Mais la zone de détection 2D devrait être capable de détecter le joueur afin qu'il puisse dire au script Pig en colère s'il doit fonctionner ou s'il doit marcher. Alors allons de l'avant et frappons le jeu et voyons si tout ça fonctionne. Donc, actuellement, les joueurs dans les endosomes, donc il est juste de marcher. Donc, au moins notre animation il est en train de jouer correctement. Déplaçons un peu au-dessus. Et nous pouvons voir que l'animation est en train de changer. Donc, c'est vraiment bon pour nous. Maintenant, la dernière chose que nous devons faire est de contrôler fondamentalement la vitesse de mouvement afin qu'il fasse un peu plus que simplement changer les couleurs ici. Alors arrêtons le jeu de courir là. Et ouvrons le script Pig en colère. Donc, dans ces propriétés sont mis en place pour l'arborescence d'animation. On peut aussi mettre en place quelque chose pour le cochon en colère. Donc, tout comme le joueur, créons une énumération représentant l'état que le cochon n'est pas. Donc ici en haut, je vais faire enums état, et actuellement nous allons juste marcher et courir. Donc, ici en haut, nous pouvons créer une autre énumération pour notre cochon en colère, comme nous l'avons fait pour le joueur. Donc nos états vont être, je vais marcher et pour l'état de course, on pourrait juste l'appeler courir. Et ce serait plus cohérent avec tout dans le jeu. Je suppose qu'on peut faire ça. Je pensais aussi qu'on pourrait l'appeler folle ou en colère, mais peut-être que si on l'appelle R1,
ça aura plus de sens quand on regarde le joueur d'animation dans l'arbre d'animation aussi. Alors mettons-nous cet état ici. Et bien sûr, nous avons besoin d'une variable pour stocker l'état actuel. Donc état variable ou autre état courant variable. Et nous allons par défaut indiquer la marche par point. Puisque le personnage va marcher dès que le jeu commence. Et c'est aussi faire de ces états la capitale, car ils sont constants tout au long du jeu. Et State Dot est allé là-bas. Ok, Donc maintenant, nous pouvons prendre l'état actuel et définir ça pour exécuter l'état s'il obtient que les paramètres d'une valeur. Donc ça va courir là-bas et l'arbre de l'animation. Et puis l'état actuel est égal à état doute marcher si elle est réglée à 0. Donc, maintenant, ils vont être cohérents. Et maintenant, nous avons juste besoin de contrôler la vitesse de déplacement en fonction de ce qu'est cet état. On peut changer la vitesse de déplacement ici à une vitesse de marche, d'accord ? Et puis cela sera toujours déplacé vitesse. Mais la vitesse de déplacement réelle que nous allons mettre à jour sur chaque image. Ce sera une nouvelle variable que nous créons ici. Ce sera donc un facteur deux. Et puis on peut faire une correspondance sur l'état actuel. Donc, si nous faisons correspondre l'état actuel de marche par point d'état, alors la vitesse de déplacement sera égale à la vitesse de marche. Et en fait, cela devrait être un flux parce que nous nous
soucions seulement du mouvement x et cela devrait être un trait de soulignement. Ensuite, nous avons juste besoin de la ruine de points d'état ici. Et bien sûr, nous allons régler la vitesse de déplacement égale à la vitesse de course. Donc maintenant devrait être beaucoup plus évident si le personnage marche dans,
vous savez, un peu décontracté sur les choses ou courir et essayer de chasser le joueur vers le bas. Alors allons de l'avant et frappons le jeu et voyons si tout fonctionne jusqu'à ce point. Alors que nous nous rapprochons de l'ennemi et nous pouvons voir des mouvements à ridiculement rapide. Et quand on s'en va, il retourne dans ses états verts. Il y a donc ce genre de zone arbitraire qui, dès que le joueur entre, déclenche
le cochon de se déplacer très vite. Nous pourrions donc refuser les chiffres sur le mouvement, mais en ce qui concerne la détection, cela fonctionne correctement. Alors je vais monter ici et faire bouger le personnage un peu plus lentement. Donc, c'est un peu plus juste pour le joueur.
18. Attache à coup joutte ~ Configuration à Hurtbox et Hitbox: Donc, dans cette partie, nous allons créer la capacité pour le joueur d'attaquer l'ennemi, dans ce cas le cochon en colère. Mais vraiment je pense que nous allons le mettre en place pour que nous ayons un script basé sur l'ennemi sur lequel des personnages comme le cochon en colère et d'autres ennemis peuvent être basés pour que nous n'ayons pas à retaper le même code encore et encore, essentiellement l'héritage. Donc, l'attaquant va juste donner à ce personnage est la capacité de rebondir sur le dessus des ennemis, leur
infliger des dégâts, puis rebondir au plus original. Mais ça marchera pour l'instant. Alors plongons dans le personnage de cochon en colère à nouveau, et nous allons créer une nouvelle zone pour d. Cette zone 2D va fondamentalement être une boîte blessée. Une zone où lorsque le personnage atterrit au-dessus de s'il pénètre dans cette zone, il peut vérifier si le joueur est en haut et si c'est le cas, dégâts et faire un peu d'animation de rebond. Donc, dans le processus de mise en place, puisque nous pouvons voir qu'il y a déjà quelques formes de collision sur notre personnage qui pourraient gêner le chemin. Ce serait peut-être une bonne idée de les enfermer en place. Donc, si nous cliquons sur un calque, nous pouvons cliquer sur ce petit symbole de verrouillage pour le faire afin que nous ne puissions pas les déplacer accidentellement. Et je vais juste le faire avec les trois. La zone à D, la forme de collision à D et les cochons en colère, collision
cinématique du corps en forme de 2D. Alors maintenant, ajoutons dans une autre zone 2D. Donc, je vais faire un clic droit sur le cochon en colère à une zone de noeud enfant 2D. Et puis donnons à cela une forme aussi. Donc collision en forme 2D. Et pour rendre cela simple, nous allons utiliser une forme de rectangle. Donc, cette forme de rectangle va être très petite et il
va être positionné juste ici au sommet des porcs avaient. Donc je pourrais prendre la zone à D et déplacer ça. Et qui va également déplacer l'emplacement des formes de collision aussi bien. Ou vous pouvez simplement déplacer la forme de collision directement comme vous voulez l'obtenir là-bas est très bien. Voyons si on en fait 12. Peut-être qu'on veut un négatif 12 là-bas. Et nous allons juste que 10 négatif semble bon. Alors maintenant, prenons la forme de collision et ajustons ses étendues de sorte que les étendues Y et allons juste vouloir que ce soit un. Nous pouvons donc voir qu'il s'agit d'une
très petite forme de collision. Et cette zone à D, j'appellerai une boîte de saut. Et il pourrait renommer cette forme de collision, sauter forme de collision. Tout comme quand on survole,
on peut voir un nom qui a un peu plus de sens. Donc je pense que ça pourrait être un peu utile. Ok, donc maintenant pour que cette boîte à mal fonctionne, nous allons avoir besoin d'une couche de collision pour le hotbox et ne crois pas que je les ai configurés. Allons donc dans les paramètres du projet. Et nous allons descendre là où il est dit physique 2D. Nous avons donc des couches pour les joueurs ennemis du monde, et pour être plus précis sur l'ennemi et le joueur, ce sont les couches de corps cinématique. Mais nous pourrions également vouloir à la couche quatre zones où certains événements peuvent être déclenchés, mais pas nécessairement pour les mécanismes de type collision de mouvement et de glissement. Donc peut-être que nous pouvons dire plus et à propos de la couche 11 aura la boîte ennemie, que nous pouvons ou ne pas utiliser, qui serait les ennemis essayant de frapper le joueur ou un autre personnage. Et puis au-delà,
je pourrais créer une couche de boîte de saut blessé. Ainsi, vous pouvez également simplement créer un ennemi HIPAA générique. Ainsi, vous pouvez également simplement créer une couche de boîte de blessures ennemies générique, qui fonctionnerait bien actuellement. La chose est que si votre personnage finit par avoir plusieurs attaques, vous pourriez seulement vouloir chirurgien et tapotez comme un saut, rebondir pour être en mesure de frapper des zones très spécifiques et pas toutes les zones d'attaque potentielles sur les soins. Donc pour l'instant, je vais juste avoir sauté sa boîte et cette couche sera exclusivement utilisée pour ces attaques de saut. Donc ici, je ne suis pas sûr si nous l'utilisons ou non, mais juste pour être un peu cohérent avec le bas, ils sont également créer une boîte de frappe de couche au cas où nous en aurions besoin plus tard. Alors fermons ça. Et cette boîte de saut blessé va être dans, bien sûr, la couche de boîte de saut. Bien sûr, il ne montrera pas les noms corrects tant que nous ne passerons pas à un autre onglet et retour. Et maintenant, si on va par ici, d'accord, je suppose que c'est au deuxième rang, on devrait être capable de trouver et de me frapper dans la boîte et ensuite sauter dans la boîte blessée. Alors enlevons toutes les autres couches. Et puis cette zone 2D ne va pas vérifier quoi que ce soit. Il va seulement recevoir des informations, donc nous avons juste besoin de l'avoir sur le saut de sa couche de boîte. Nous n'avons pas besoin d'utiliser un masque pour, pour vérifier toute entrée ou sortie d'autres couches, au moins pour l'instant. Ok, alors maintenant allons dans le caractère du calque et créons cette boîte de frappe de saut. Donc je vais faire un clic droit sur le joueur et ajouter une zone 2D, ok, et nous allons renommer cette boîte de saut. Et bien sûr, nous allons avoir besoin d'une forme de collision. Donc, la forme de collision, nous allons en faire un rectangle. Et je vais m'assurer que la hauteur de ceci est un. Et puis on va juste le tirer ici au bas du personnage. Et nous pouvons ajuster la transformation sur la zone de la boîte à sauter, je suppose. Donc, nous allons faire tomber ça avec la position de transformation. Et je suppose que 15, c'est à propos de ce qu'on cherche là-bas. Nous voulons probablement aussi réduire la largeur de celui-ci parce que les pieds du personnage ne vont qu'ici. Alors changeons le H2, peut-être un six, ok, je suppose que je peux chercher maintenant. Et cette zone de boîte de frappe 2D va être à la recherche de la couche de boîte de saut blessé afin de voir s'il peut frapper l'ennemi à ce moment et lui infliger des dégâts. Et actuellement, je n'ai pas besoin de quoi que ce soit pour vérifier la boîte de hanche, donc je suis juste en train de l'enlever de la couche 1. Donc, il ne sera pas utilisé dans les collisions seulement
pour vérifier les choses qui y entrent sur cette couche, la boîte de saut blessé. Ok, donc maintenant ce qu'on doit faire est de connecter cette boîte à sauter à l'intérieur du script du joueur. Donc, nous pouvons le faire en utilisant des signaux assez facilement. Si vous cliquez sur la boîte de saut, nous pouvons passer à la note. Et puis nous allons vouloir utiliser la forme de zone saisie parce que nous vérifions la boîte blessée, qui est une zone 2D. Si on vérifiait un corps cinématique, il utiliserait la forme du corps entrée dans un accident de forme corporelle. Donc, faisons la forme Zone entrée. Et je pense que c'est le seul qu'on aura besoin de savoir. Ainsi, le nom par défaut de la méthode du récepteur sur le saut, la forme de zone de la hanche entrée fonctionne parfaitement bien. Connectons ça dans le script du lecteur. Et maintenant, nous allons avoir ça en bas. Je vais le déplacer ici pour qu'il ne soit pas dans la section centrale.
19. Vérification Jump pour les caractères de classe: Quand quelque chose entre dans la boîte de frappe, théoriquement, il ne devrait être que les boîtes de coups de saut ennemi. Mais je veux m'assurer que la zone qui pénètre est en fait attachée à un ennemi. Donc ce qu'on pourrait faire, c'est vérifier cette zone et voir si c'est le propriétaire est en fait du type ennemi. Donc, je vais faire var ennemi et puis
propriétaire point zone et étranger instancié vu qui devrait nous donner le noeud racine. Donc si je devais vérifier ce que le propriétaire serait quatre comme cette boîte de saut à frapper. Si j'avais un script attaché ici, il irait au propriétaire, qui dans ce cas est le joueur. Donc, dans le cochon en colère, le propriétaire de ce hotbox saut est le cochon en colère, qui va être de type ennemi. En fait, voyons, est-ce que j'ai créé le type ennemi ? Non, je ne l'ai pas fait. Donc on va le faire dans une minute. Donc, de retour dans le script de joueur, nous devons vérifier, est l'ennemi en fait un ennemi. Donc je vais dire que c'est ennemi, ennemi, et nous n'avons pas encore créé ça. Donc, ça ne va pas marcher et nous avons juste besoin de créer le script pour cela. Alors terminez le dossier des personnages, ennemis. Je vais juste créer un nouveau script ici. Donc je vais faire un clic droit ici, faire un nouveau script et nous allons juste l'appeler ennemi. Et à l'intérieur de point ennemi GD, cela va étendre le corps cinématique 2D. Donc, le type de base de ceci est le même que le cochon en colère, qui va signifier que le cochon en colère peut juste hériter du point g ennemi, qui va hériter du corps cinématique 2D. Donc, il obtient toutes les fonctionnalités du corps cinématique et aussi de l'ennemi. Donc, pour le script GD de déclarer ceci comme un type que nous pouvons référencer sans chemin. Je pense qu'on a besoin d'un nom de classe ici, puis d'un ennemi. Donc, c'est juste de donner un, si vous faisiez C plus un peu comme un espace de noms à ce script. Et maintenant en cochon en colère point h gd, nous pouvons simplement écrire ennemi, sorte qu'il étend ennemi. Et cet ennemi est parce que nous l'avons défini pour notre projet avec ce nom de classe. Maintenant, tout ce que nous voulons que tous les ennemis aient peut juste entrer ici. Donc, par exemple, cochon en colère, je suppose que nous n'avons pas mis de variable de santé, mais ce serait un endroit parfait pour réellement dire ça. Donc, faisons l'exportation, parce que nous allons en faire une santé var float et cela par défaut à trois. Donc maintenant, si nous cliquons sur Cochon en colère, allez à l'inspecteur, nous pouvons voir que la variable de santé est ici. Mais cette variable de santé, elle ne vient pas de cochon en colère, elle vient du script ennemi imbriqué. Alors maintenant Malloc et la méthode du récepteur pour la boîte à coups de saut, si nous en sommes arrivés au point où nous avons compris que l'ennemi est en fait un ennemi. Ensuite, nous voulons également nous assurer qu'il peut actuellement être touché parce que nous ne voulons pas accidentellement doubler l'ennemi pour quelque raison que ce soit. Il peut donc y avoir un temps d'invulnérabilité, par exemple lorsque l'animation Hit est en cours de lecture, peut-être que l'ennemi devrait être vulnérable pendant une minute. Donc, nous pouvons ajouter une autre variable à l'ennemi, qui pourrait être quelque chose comme peut être fermé. Donc point ennemi peut être touché et ce sera un booléen. Et nous pouvons simplement le déclarer dans notre script ennemi. Donc on pourrait dire que la barre de bool d'exportation peut être touchée. Et probablement cela serait généralement par défaut vrai, car au début du jeu, vous voulez être en mesure de frapper l'ennemi, mais vous pouvez personnaliser cela, bien
sûr, pour chaque ennemi, puisque cette propriété apparaîtrait juste ici à l'intérieur de chacun des caractères. Donc maintenant, à ce stade, nous voulons vérifier si le personnage est réellement au-dessus de l'ennemi. Si on saute de bas en bas et que les zones se chevauchent, ce n'est pas vraiment la même chose que de tomber sur son ennemi. Nous pouvons donc vérifier quand la zone en forme entre, si elle entre d'en haut, où que l'ennemi soit. Donc, fondamentalement pour ça, on peut attraper la boîte à coups de saut. Et je pourrais en fait avoir plus de sens d'avoir cela comme une variable en haut pour être plus cohérent. Donc, nous aurons sur var prêt, boîte de hanche
sauté égale signe dollar. Ne convient pas à la boîte. Donc, nous nous assurons que c'est là au début de ce script en cours d'exécution. Donc, nous vérifions le point de la boîte de la hanche Faisons la position globale point Y. Donc, dans le monde du jeu, cela va être,
c'est comme la position absolue, pas par rapport à quoi que ce soit. Donc, si nous comparons cela à une autre position globale, alors nous pouvons être assez sûrs qu'elle est en fait au-dessus de l'autre position ou pas au-dessus de l'autre position. Donc la zone point de position globale point y. Donc, cela va être que la zone de la boîte blessée et la théorie, puisque la boîte de saut peut seulement détecter sur la couche de boîte de cavalier. Donc, nous pouvons être raisonnablement sûrs que cette zone est en fait la boîte de saut blessé. Donc si on arrive ici, on va faire l'attaque de saut. Donc pour ça, nous allons prendre ce personnage est la vitesse, et nous allons l'augmenter avec un petit rebond ennemi. Donc je vais avoir une variable, un rebond ennemi, impulsion, et ensuite nous allons faire des dégâts à l'ennemi. Donc, nous aurons cette fonction être touchée avec un nombre de dégâts. Nous devons donc créer deux variables là-haut en haut. Donc, premier-off, export, var, ennemi saut. Et je vais faire ça moins que le saut principal, quelque chose comme 400 sonne un peu mieux que nous pouvons aussi avoir une autre variable de boucle. Donc, ce sera des dégâts de Dama et je vais juste le faire par défaut à un. Agréable et simple. Ok, donc on commence à l'air vers le bas leur impulsion de rebond ennemi, saut ennemi. Je suppose que le rebond de l'ennemi fonctionne mieux. Ok, c'est comme ça que je l'ai appelé dans les scripts originaux. Donc, cela devrait éclaircir le problème là-bas. Nous devons juste nous assurer que le script ennemi que nous avons la méthode get hit. Alors se faire frapper. Faisons en sorte que cette fonction soit touchée. Et cela va prendre un certain nombre de dégâts, probablement un flotteur. Et donc quand l'ennemi est touché, nous voulons le faire pour qu'il ne puisse plus être touché avant d'avoir quelque chose d'autre. Dis que ça peut. Dans notre cas, ce sera la fin de l'animation hit un ou hit 20 en cours. Donc, pendant qu'il joue l'animation Hit, fondamentalement dans vulnérable dans un sens. Donc nous allons prendre la santé et nous allons moins égaler les dégâts. Et puis nous allons mettre peut être frappé égal à faux.
20. Obtenez des touches d'animation et d'animation: Maintenant, dans le script Pig en colère, nous voulons créer une fonction que nous pouvons exécuter lorsque nos animations de succès sont terminées. Donc, créons une fonction que l'animation a terminée. Ok, donc quand c'est fini, on veut que le coup soit égal à vrai. Et je vais aussi vouloir retourner l'état du personnage à courir ou à marcher. Depuis une fois qu'il est fait d'être frappé, il devrait essentiellement reprendre sa fonctionnalité normale. Donc, nous allons dire que l'état actuel est égal à l'ardoise dot run pour l'instant. D' accord ? Et c'est aussi déplacer ces fonctions ici, d'accord ? Et une chose à propos de ceux-ci, quand nous sommes dans l'état HIT, nous ne voulons pas que le personnage puisse changer d'état pour courir ou marcher. La seule façon de laisser le personnage revenir à état
urbain est que cette fonction se termine. Donc, en substance, on veut un peu enfermer ça. Donc, je vais mettre ici, si l'état actuel est State dot walk, alors il peut aller à un état run ou ici. S' il est en cours d'exécution, il peut aller à l'état de marche. Lorsque ce paramètre est défini et que le joueur n'est plus là, il devrait commencer à marcher et quand le joueur entre, il devrait commencer à courir. Mais seulement quand il n'est pas dans un autre état comme frappé. Et cela doit être égal signe. Alors maintenant, allons dans notre joueur d'animation, cochon en colère 2D. Cliquez sur le lecteur d'animation. Et ajoutons une autre piste pour HIT 1. Donc notre piste va être appelée méthode, et nous voulons appeler les méthodes du cochon en colère, ok, et nous avons aussi besoin que cela se produise à la fin de l'animation. Donc, nous allons devoir prolonger ça. Je vais en fait l'étendre à 0,5 seconde pour l'instant. Et quand nous allons au sprite animé, je vais ralentir le FPS et VZ de moitié de sorte qu'il ne faut pas 0,25 seconde, mais 0,5 seconde pour jouer toute l'animation. On verra si ça marche pour nous. Et maintenant, on peut retourner au joueur. Donc, il devrait prendre jusqu'ici pour que l'animation de 10 FPS se termine. Donc, c'est là que nous voulons mettre dans le, oublié un autre signe égal là aussi. Ok, donc maintenant pour notre piste de fonctions, on peut insérer la clé. Animation de frappe terminée. Ok, maintenant ça devrait lancer l'animation là-bas. Maintenant, nous devons aussi faire la même chose avec HIT 2. Donc, faisons ceci 0.5, mais la durée, et désactivons la boucle aussi parce qu'il ne devrait pas boucler. Il ne devrait jouer qu'une seule fois, puis revenir à la course. Donc, une méthode d'appel sur le cochon en colère, puis nous faisons un clic droit ici à 0,5 secondes, insérez la touche, Hit animation terminée. Et maintenant notre fonction va fonctionner ici. Donc, cela devrait le retourner à l'état et permettre de le frapper à nouveau. Donc c'est ce que nous voulons. Alors maintenant, vérifions, appuyez sur un et désactivez la boucle. Et une autre chose dont nous avons besoin dans l'arbre d'animation est de mettre en place une variable one-shot afin que nous puissions entrer dans ces états frappés. Donc, nous allons faire un clic droit sur le graphe de noeud et faire un one-shot. Donc ce coup va être, appelons ça « hit ». Mais pourquoi ne pas simplement garder les choses simples ? Donc, cette prise de vue est quand l'animation Hit va être jouée. Donc, lorsque ce paramètre d'animation atteint est défini sur actif, il devrait montrer soit frapper un ou frapper aussi. Et nous pouvons en faire une variable aléatoire. Mais pour que cela fonctionne réellement, nous devons reconnecter les sorties. Donc, prenons cette ligne ici pour la sortie et joué détecté. Et maintenant, cet espace de fusion 1D devrait alimenter directement dans le n comme fonction par défaut. Et puis cela va à la sortie. Et maintenant, nous avons juste besoin de les créer. Frappez un, appuyez sur deux animations ici. Donc, cliquez avec le bouton droit sur Animation, cliquez Ok, donc sur le premier a frappé un, sur le second a frappé deux. Et maintenant on peut aller par ici, clic droit et je pense qu'on veut mélanger deux, ok ? Donc, euh, en gros, va avoir deux valeurs, 01, si c'est 0, alors on joue hit un. Et si c'est un, alors on joue à deux coups. Donc on peut appeler la propriété ici, frapper la variation. Si elle vient coup pelvien très asiatique. Et connectons ça à la prise de vue. Ok, donc maintenant nous avons deux variables à frapper. Cela déterminera si nous jouons frappé un ou frappé trop, juste pour une certaine variété. Et puis cela déterminera si nous jouons l'animation Hit du tout. Donc, pour les ennemis de notre jeu, après y avoir réfléchi, nous pourrions réellement vouloir que chaque ennemi ait sa propre implémentation de se faire frapper. Ainsi, nous pouvons toujours transmettre la même quantité de dégâts à la fonction pour chaque personnage. Mais peut-être que certains personnages ne subissent pas de dégâts quand ils sont frappés. Peut-être qu'ils bougent un peu ou peut-être que certains personnages ne sont pas invulnérables après avoir été frappés. Donc, dans tous les cas, je pourrais réellement avoir du sens pour permettre au joueur de dire à l'ennemi de l'exécution de cette fonction, mais avoir une implémentation différente pour chaque personnage. Donc, je vais mettre un trait de soulignement ici pour en faire une fonction virtuelle. Et puis on va juste couper ça pour l'instant. Alors ce qu'on va faire, c'est prendre ça à cochon en colère. Et nous allons mettre ceci ici comme une implémentation pour cela. Donc nous reviendrons à ça dans une seconde. Donc, pour l'instant, si la fonction est exécutée et ce n'est pas une implémentation personnalisée, je vais juste pousser une erreur. Il suffit de dire que get hit n'a pas été mis en œuvre. Donc, si dans un cochon en colère ou un autre ennemi, ils sont touchés a été créé, il devrait utiliser cette version de l'get hit. Mais dans le cas où ce n'est pas le cas, nous aurons juste ce message d'erreur afin que nous fondamentalement maintenant que nous devons aller de l'avant et l'implémenter. Donc, pour cette version de get hit ou le cochon en colère, je vais faire en sorte que quand il est touché, nous entrons dans l'état hits. Et dans le cadre de cela, nous pouvons réellement définir ces variables ici dans l'arbre d'animation. Donc, je vais obtenir l'arbre d'animation et nous allons définir les paramètres. Donc le premier va être périmètre slash hit slash slash, actif, puis l'autre, Allons-y et vérifions ça. Donc le joueur a détecté, ce qui va être des paramètres slash joueur soulignement détecté slash 08, pas celui-là. Variation de touche en fait. Périmètres barre oblique atteinte valeur de mélange barre oblique. D' accord ? Donc, donc l'arbre d'animation ensemble ou ses amateurs barre oblique frappé soulignement variation barre oblique montant de mélange. Donc ça va être 0 ou un. Et nous devrons le comprendre une seconde. Et puis ça va être vrai. Donc nous pouvons générer un nombre aléatoire ici. Et pour créer un nombre aléatoire, vous devez créer un objet générateur de nombres aléatoires, qui a son propre constructeur. Donc, nous pourrions en créer un à l'intérieur de cette classe ou nous pourrions en créer un à chaque fois que nous exécutons cette fonction. Ou ce que nous pourrions faire, c'est le mettre sur notre script global singleton. Et puis chaque fois que nous avons besoin d'exécuter une fonction aléatoire, nous référençons juste les paramètres de jeu globaux. Donc j'aime mieux cette idée. Donc, dans notre jeu settings.js, nous pouvons créer une variable et cela se chargera au début du jeu. Donc ce sera notre générateur de nombres aléatoires. Et ce que nous avons juste besoin de faire est générateur de nombres aléatoires et de créer une nouvelle instance de cela. Donc, au début du jeu, à chaque fois qu'il se charge, nous allons obtenir ce nouveau générateur de nombres aléatoires et nous n'en avons besoin qu'un et nous pouvons l'utiliser partout. Donc, dans le cochon en colère maintenant, nous pouvons ajouter une nouvelle ligne. Alors faisons ça. Sélection d'anime loin. Et cela va être égal aux paramètres de jeu. Notre référence singleton Hubble n'importe où point, Voyons voir, nous l'appelons trahir Jen. Et puis nous devons générer un nouveau nombre afin que nous puissions faire aléatoire int i pour la plage de soulignement int entre 01. Ainsi, les entiers ne peuvent être que des nombres non décimaux. Donc ça va nous donner un 0 ou un autre. Et nous pouvons mettre cela dans la valeur de l'arbre d'animation. Alors mettons cette sélection enum ici. Donc, cela va nous donner notre sélectionné au hasard soit frapper une animation ou frapper à l'animation. Donc une chose de plus dans les jeux, settings.js, quand nous utilisons le générateur de nombres aléatoires pour générer des valeurs aléatoires, par défaut, il va réellement utiliser la même graine chaque fois que le jeu se charge. Donc, il aura la même séquence de, pour
ainsi dire, nombres aléatoires. Donc, si le générateur de nombres aléatoires n'était utilisé qu'une seule fois pour déterminer que le personnage a été touché et quelle animation jouer, alors ce personnage
jouerait, en théorie, la même animation chaque fois que le jeu se charge et le même événement arrive. Donc, pour faire un vraiment aléatoire, ce que nous pourrions faire est d'implémenter une fonction prête ici. Et puis si devrait randomiser un booléen, alors nous allons le randomiser. Donc, Ran Gen, re-randomiser. Ok, donc si nous avons ce R1, alors cela va créer une nouvelle graine pour le générateur de nombres aléatoires. Et cela devrait nous donner différentes variations chaque fois que nous lançons le jeu. Donc, faisons cela une variable que nous pouvons définir dans les paramètres du jeu. Vu que TSC et le fichier devrait donc randomiser. Et il sera par défaut à true. Donc, si jamais nous avons besoin de désactiver la randomisation parce que nous voulons tester la même graine pour le générateur de nombres aléatoires, alors nous pouvons juste aller dans cette scène et l'éteindre sur l'inspecteur ou sur le côté. Alors mettons ça à l'intérieur pour l'instant. Ok, alors allons-y et jouons ici pour voir où on en est vraiment. Allons de l'avant et jouons ici et voyons où nous en sommes. Je vais sauter dans le personnage. Donc d'abord, il n'aurait pas dû arriver ici parce qu'il était en dessous de la zone pour commencer. Mais nous pouvons aussi voir la fonction inexistante être touchée. C' est parce que nous avons le trait de soulignement là-bas. Donc, nous pouvons enlever cela car c'est la mise en œuvre finale de get hit ce personnage. Alors allons de l'avant et appuyez sur Play. Et maintenant, nous pouvons voir que le personnage est touché, mais nous n'avons pas vraiment créé l'état de succès. Donc, en haut, ajoutons cet état, coup de
l'état, OK, et donnons un autre coup. Ok, donc on a eu le rebond sur le personnage. Et vous pouvez voir qu'après ce premier coup de rebond, il n'est pas possible de le frapper à nouveau, ou du moins temporairement. Ce n'était pas le cas. Un autre problème semble être que le personnage ne meurt pas réellement lorsque la santé est inférieure à 0. Alors résolvons ça très vite. Si la santé est inférieure ou égale à 0, nous pouvons simplement utiliser Q gratuitement pour supprimer le caractère. Donc, bien sûr, si vous avez eu comme une animation de mort, vous pouvez jouer ce non dit d'abord, puis Q gratuit. Mais cela supprime la scène de la hiérarchie. En d'autres termes, enlever l'ennemi du jeu. Alors allons frapper jouer et voir ça à nouveau. Donc c'est un coup, deux coups, trois têtes. D' accord ? Donc, cela fait réellement des dégâts à l'ennemi. Ok, donc il semble que ce dont nous avions besoin, c'est que la position globale sur la boîte de hanche devrait être plus élevée que la position globale sur la zone. Et vous pouvez un peu déboguer cela juste en imprimant la position globale pour chaque fois que vous auriez une collision et voir si les nombres s'alignent réellement. Donc maintenant, si on saute sur le personnage, il devrait vraiment rebondir, mais seulement s'il est sur le dessus. Alors voyons, venant d'en bas,
rien ne se passe, mais si on saute d'en haut, on obtient ce rebond. D'accord. Et puis il y a ce troisième coup. Ok, donc ça semble fonctionner plus ou moins. Testez ça encore une fois. On dirait que j'ai raté la boîte à frapper. D' accord. Il y a ça. D'accord. Sauter de dessous ne fait rien, mais on peut sauter et le frapper à nouveau. Ok, donc on peut rapidement cocher la case pour le personnage. Voyons voir. Donc nous avons cette petite file d'attente ici. Peut-être que nous voulons rendre la boîte à frapper de collision un peu plus large. Je pense que ce n'est pas le seul problème là-bas, donc nous allons être un peu généreux avec ça pour
que si le personnage frappe un peu le bord d'eux, nous pouvons aller un peu plus loin même peut-être que nous le faisons 13,
14, même si ce n'est pas le cas. D' accord. Alors frappons le jeu. Testez une fois de plus. Oh, d'accord. Je suppose et semble travailler dans l'ensemble. Un autre outil que vous pouvez utiliser pour vérifier les collisions. Si vous accédez au menu Débogage, vous pouvez activer les formes de collision visibles. Donc maintenant, si on touche Play, on peut voir directement où se trouve ses formes de collision. Donc, où nous devrions frapper pour que le saut se produise. Ok. Et rebondissons sur lui. D' accord. D'accord. Et une fois de plus. Ok, ça semble fonctionner correctement pour notre cochon en colère. Donc, dans la prochaine vidéo, nous allons travailler à faire un moyen pour que le cochon en colère puisse réellement endommager le joueur si le cochon en colère y tombe. Donc, cette partie devrait être un peu plus simple que avoir à mettre en place ces boîtes de frappe pour sauter et rebondir. Et les différents états.
21. Ajouter l'état de cliché pour le joueur: Maintenant que nous sommes capables de rebondir sur un ennemi pour lui infliger des dégâts. Ou au moins avec la zone de cochon en colère, nous devrions faire un moyen pour les ennemis comme le cochon en colère d'être en mesure de faire des dégâts au joueur. Pour que nous puissions aller de l'avant et mettre en place ça maintenant. Donc, auparavant, nous avons fait une classe ennemie, qui est un script de base que le cochon en colère et les cheveux. Donc je suis dans cette classe, nous créons la capacité pour les ennemis de se faire frapper. Et aussi chaque ennemi a la santé et la variable peut être touchée. Donc, afin de faire en sorte que notre joueur puisse être touché par des ennemis, nous allons avoir besoin de mettre en place quelques variables semblables à celles que nous avons faites avec le script ennemi. Le cochon en colère hérite de l'ennemi, ce qui signifie que le cochon en colère a la santé et devrait mettre en œuvre la fonction get hit. Ce que nous pouvons faire est de tirer tout vers le haut d'un autre niveau où n'importe quel personnage et le jeu aura la santé et devrait mettre en œuvre une fonction get hit. Donc, nous pouvons créer un script pour cela. Si nous allons aux caractères, puis cliquez avec le bouton droit sur le dossier, faites un nouveau script. Donc je vais appeler ce point de caractère G, D. Et dans ce script, nous allons juste extraire cette information de l'ennemi, comme la variable de santé. Et abandonnons tout, mettez-le ici, et puis assurez-vous qu'il s'agit d'un corps cinématique 2D, puisque chaque personnage va être un personnage de type 2D de corps cinématique. Donc maintenant, si l'ennemi hérite de ça, il aura la valeur de santé à nouveau. Maintenant, ce que je remarque parfois, c'est que si vous avez trop de noms de classe dans le jeu et que vous avez un tas d'héritage qui se passe que parfois il y a des erreurs. Donc, plutôt que de mettre le caractère ClassName ici puis d'étendre le caractère, ce que nous pouvons faire est juste de couper ce texte , puis de faire glisser et déposer le chemin vers le script de caractère. Donc, s'ils font simplement glisser ceci ici, cela va essentiellement fonctionner de la même manière que si nous avions utilisé le nom de classe et le caractère. Bien que le faire de cette façon, nous pouvons éviter certaines erreurs qui se produisent avec l'utilisation des noms de classe et Godot. Un problème est que si vous déplacez vos fichiers de script dans le répertoire, cela va évidemment provoquer beaucoup d'erreurs car c'est un chemin vers l'endroit où il est stocké. Donc, si le script dot h gd de caractère n'est plus un dans le dossier des caractères, alors évidemment quand il essaie de le charger, cela va vous donner quelques erreurs. Ainsi, vous pouvez jouer un peu avec elle et comprendre quelle méthode fonctionne le mieux pour vous. Donc notre ennemi va hériter de Character dot GD. Et cela signifie qu'il va avoir cette santé, mais c'est aussi prendre cette fonction et la mettre en caractère aussi. Donc, le caractère va être notre script personnalisé de base écrit sur le corps cinématique 2D. C' est de cela que cela hérite. Et puis l'ennemi est un type de personnage. Et puis le cochon en colère est un type d'ennemi. Donc la classe de cochon en colère va hériter de tout ce qui est en dessous. Ayez tout en ennemi, et nous aurons tout en caractère aussi. Donc, nous pouvons garder l'ennemi comme un script séparé cependant, parce que le jeu devient un peu plus complexe, il peut y avoir certaines choses que nous voulons tous les ennemis d'avoir, mais pas nécessairement des personnages comme le joueur. Alors faisons maintenant de notre joueur un personnage. Donc, je vais cliquer sur le lecteur et couperons l'extenseur et juste glisser-déposer le script GD point de caractère. Alors étend le chemin vers le script qui a fonctionné pour nous. Donc maintenant, le joueur va avoir une santé et nous allons avoir besoin d'écrire cette fonction. Donc, allons ici et écrire qu'ils obtiennent la fonction de frappe. Donc la fonction est touchée et nous allons prendre une valeur endommagée, qui peut être un flotteur. Et ce qu'on va devoir faire avec se faire frapper, c'est évidemment de prendre les dégâts. Donc auto point santé, il va être moins égal aux dommages de valeur. Et nous devrions également changer l'état du personnage. Donc, nous pouvons faire auto point, état
actuel est égal point hit état, que nous n'avons pas encore créé. Alors prenons ça et pose-le ici, créant un cinquième état. Et puis bien sûr, nous avons une méthode setter pour cette valeur d'état actuel. Donc, quand cela s'exécute, l'état actuel défini va se produire ici. Donc, je pense que ce serait un bon endroit pour définir les paramètres sur l'arbre d'animation. Bien sûr, nous n'avons pas défini le paramètre pour le nouveau tir où le personnage subit des dégâts et a un peu décalé. Mais nous pouvons aller de l'avant et taper ça à l'avance. Donc l'état pour lequel nous apparions est bien sûr point frappé. Et quand cela se produit, nous allons faire des paramètres d'arborescence d'animation, barre oblique, frapper, barre oblique active. Donc, comme avec le double saut, ça va être un coup. C' est pourquoi il est dit actif ici. Ce sera un booléen et nous le rendons actif ou vrai. Alors maintenant, plongons dans la scène des joueurs. Allons à l'arbre d'animation, et configurons ceci pour HIT. Donc, dans notre jeu, quand le joueur subit des dégâts, cela va prendre la priorité sur toute autre animation. Donc ce coup devrait être devant le double saut et la hiérarchie. Donc je vais faire un clic droit ici, faire un seul coup. Le nom de la variable, tout comme nous votons dans le script, est touché un peu bon à ce sujet. Et maintenant, nous pouvons rediriger cette sortie vers ici. Et le one-shot ira ici. Et quand ces variables de succès sont actives, nous allons jouer le one-shot, donc nous voulons obtenir cette animation Hit. Mettons ça ici et connectons ça pour tirer. Maintenant, nous devons également nous assurer que notre lecteur d'animation a correctement configuré
l'animation Hit et que l'animation Hit dans le sprite animé est également configurée. Donc, si nous cliquons sur sprite animé, nous pouvons vérifier hit. Et nous pouvons voir cela comme huit images Animation. On l'exécute à 20 images par seconde. Donc c'est important. Nous pouvons comprendre combien de temps l'animation Hit devrait jouer, 4,05 secondes par image. Donc, ce sera un total de 0,4 seconde avant de sauter dans le lecteur d'animation. Encore une chose sur le one-shot, comme avec le double saut un tir, nous voulons faire le fondu dans le temps et le temps de fondu 0. On doit le faire il y a une seconde. Et cela va être assez important pour que l'animation soit en fait correcte. Maintenant, allons à Animation player. Regardons notre animation Hit. On peut voir qu'il est en boucle et qu'il ne fait que 0,05 seconde. Nous devons donc désactiver la boucle et faire 0,4 seconde,
car c' est le temps qu'il faut pour passer à travers toutes les images de l'animation. Et maintenant, quand le personnage est terminé avec l'animation Hit, nous allons vouloir un peu de rappel à l'intérieur de notre script où l'animation est terminée. Donc quelque chose devrait changer dans la classe de joueur. A savoir, il devrait reprendre un état normal comme ralenti ou marcher utilisera probablement point d'état AIDL. Alors allons de l'avant et écrivons cette partie du script. Et en fait, ce que nous pourrions probablement faire est de mettre ça en caractère, puisque j'imagine tous les personnages du jeu, tant que vous n'avez pas de PNJ d'une sorte qui sont totalement à l'abri de tout. Je vais avoir une animation à succès. Donc, vous pouvez mettre ceci dans le joueur, ou nous pourrions juste l'écrire ici comme quelque chose qui devrait être implémenté pour chaque personnage du jeu. Donc on va faire, frapper fini. Et nous pouvons simplement pousser une erreur si elle n'est pas implémentée, puisque nous devrions avoir notre propre implémentation personnalisée de celle-ci. Donc, dans le joueur, écrivons cela. Donc, ici, nous pouvons faire fonctionner le coup fini. Et ce que nous allons faire est de prendre l'état actuel de point auto et nous allons définir cela pour indiquer point inactif. Et si vous vous souvenez, notre script est déjà configuré pour passer entre les états d'inactivité et d'exécution, selon que les joueurs entrent. Donc je le mets au ralenti devrait être très bien pour ici. Et maintenant, nous avons juste besoin de nous assurer que cela est appelé pour que nous puissions reprendre l'état inactif. Donc, dans la piste d'animation du lecteur d'animation, assurez-vous que vous avez sélectionné le lecteur d'animation. Do Add Track, appel méthode, sélectionnez le script du lecteur, et aller à la fin de l'animation, qui est de 0,4 seconde. Et nous allons cliquer avec le bouton droit de la souris et insérer une clé, choisissez la méthode que vous voulez qu'elle exécute. Et cette affaire, ça va être nul à la fin du coup. Donc, nous allons juste double-cliquer dessus. Maintenant, quand il arrive à ce point, cette fonction va juste s'exécuter automatiquement. Ainsi, l'état sera commuté en inactif.
22. Détection d'ennemis de collision: Maintenant que nos personnages sont essentiellement configurés pour entrer dans l'état d'animation Hit, nous allons avoir besoin d'un moyen pour l'ennemi d'infliger des dégâts aux joueurs, comme nous avons la boîte de frappe de saut pour ce joueur, nous pouvons créer une boîte de frappe pour l'ennemi qui va chercher le joueur. Et si elle trouve le joueur du tout disparu, cette fonction get hit. Pour qu'on puisse sauter dans notre scène de cochons en colère. Donc maintenant, avec le choix en colère, on peut mettre en place une boîte à succès. Cela va être très similaire à la mise en place de la boîte blessée ici. Donc, je vais faire un clic droit sur le cochon en colère, aller ajouter une note d'enfant, et nous allons en faire une zone de 2D. Je vais renommer cette boîte de frappe de collision ennemie, car c'est sa capacité à faire dégâts quand il frappe juste le joueur ou un entre en collision avec le joueur. Et maintenant, nous avons besoin d'un 2D en forme pour les billets de hanche. Donc, je vais faire un clic droit dessus, ajouter un nœud enfant, et faisons la forme de collision 2D. D' accord ? Comme avec un tas d'autres choses, nous pouvons simplement garder les choses simples avec une forme de rectangle. Actuellement, je ne veux pas de sauter accidentellement ajusté boîte blessée, donc il serait bon de verrouiller cela en place. Assurez-vous de ne pas l'ajouter de quelque façon que ce soit. Et maintenant, nous pouvons prendre la forme de notre boîte de hanche et l'ajuster. Donc, je vais dire que ce personnage ne peut vraiment entrer en collision avec le joueur ajustement bosses dans le droit quand il regarde ici. Ok, alors prenons notre forme de collision et réduisons-la un peu. Donc la grande forme de collision qui sera pour ce cochon en collision avec d'autres choses, mais nous allons être un peu généreux avec le joueur et juste dire que le personnage doit être juste ici chevauchant avec le joueur pour lui infliger des dommages. Donc je vais prendre la forme de rectangle et faire quelque chose comme 77, appuyez sur Entrée. Et peut-être qu'on peut dire 78, mais on prend la boîte de collision et on la déplace un peu vers le bas. Donc, déplacons ça là-bas et nous pouvons temporairement cacher les autres boîtes de hanches pour que nous puissions tout voir clairement si nous en avons besoin. Je pense que ça pourrait être correct. Peut-être que je vais le déplacer vers le bas juste un pixel de plus et qu'on l'appellera bon pour là. On pourra toujours l'ajuster plus tard. Donc maintenant, pour cette boîte de frappe de collision ennemie, nous devons définir les couches où elle va chercher, pour infliger des dégâts au joueur. Donc, si nous le voulons, nous pourrions créer un calque de boîte blessée joueur si nous voulons définir une forme personnalisée pour l'endroit où le joueur peut être touché. Mais je pense que la forme principale de collision du corps fonctionnera très bien. On peut voir ça ici. Genre de correspond à la taille du personnage assez bon. Donc nous allons juste utiliser cette forme de collision que nous allons regarder. Par exemple, il s'agit de la forme de collision du corps cinématique. Ensuite, dans le script, nous allons utiliser la vérification du corps,
pas la vérification de la zone. Donc, nous n'avons pas besoin de créer un joueur ses dollars, mais si vous voulez le faire, vous pouvez aller dans le menu du projet, descendre à la physique 2D, puis dans la couche 8, peut dire joueur blessé boîte, nous en aurons peut-être besoin plus tard. Donc, je vais juste écrire ça en tant que calque maintenant. Mais au lieu de cela, je vais changer le masque, qui est ce que la zone à faire cherche. Et changez ça pour le masque du joueur. Et je vais désactiver la couche pour la collision, car cela va seulement chercher le joueur pour lui infliger des dégâts. Et en fait, nous pouvons juste prendre un moniteur et simplement éteindre cela entièrement. Il peut également vouloir renommer la collision en forme 2D sur la gauche. Juste pour qu'on sache lequel est lequel. Donc je vais appeler cette forme de collision ennemie. Et je garderai ça là-bas. Donc maintenant, nous devons prendre les signaux des fauchons de hanche et ajouter cela au script Pig en colère. Donc, avec la boîte à frapper de collision ennemie, je peux aller ici à ta forme de corps entrée, et je vais connecter ça dans le cochon en colère. Donc, la collision ennemie a frappé la forme du corps de la boîte est entrée, nous allons essayer d'infliger des dégâts au joueur. Mais la chose est que beaucoup d'ennemis vont être en mesure d'infliger des dégâts de cette façon, sinon tous dans le jeu. Donc, je pourrais vraiment vouloir retirer cela
du script Cochon en colère et nous pouvons le mettre dans GD ennemi et stat. Donc, les ennemis vont avoir la capacité de faire des dégâts au joueur
chaque fois que le joueur entre dans cette zone si le joueur n'est pas dans un état vulnérable. Donc, pour qu'un ennemi inflige des dégâts, nous allons avoir besoin d'une autre variable. Donc je vais exporter, disons collision flottante, une forme de collision, des dégâts de collision. Et je vais par défaut en un. Donc nous allons vérifier si ce corps est un type de joueur. Donc, pour notre boîte de collision, le corps doit être attaché à un joueur. Et nous pouvons être assez sûrs que cela va se produire parce que dans notre boîte de hanche, la couche de collision est seulement configurée pour avoir le masque de joueur et les joueurs vont être un type de personnage. Donc ce que nous pouvons faire et notre script ennemi ici, il a juste affecté les dégâts à ce corps, en supposant que c'est un type de joueur. Donc, le point de corps est touché, dégâts de
collision devraient en théorie être en mesure de se produire puisque les seuls corps
qui vont être sur cette couche dans le jeu vont être le joueur. Et si ce n'est pas un joueur, alors nous avons probablement foiré quelque chose et nous voulons obtenir un message d'erreur. Donc je pense que ce sera bien de faire cette hypothèse ici. Pourquoi ils obtiennent une erreur ou du tout été réussi, peut-être qu'il n'a pas été implémenté dans ce type de caractère spécifique. Mais donnons-lui un coup de feu. Ok, alors maintenant obtenir des hits vont courir. mise en œuvre des joueurs de cela est qu'il va prendre des
dégâts et qu'il va mettre l'état actuel à frapper. Faisons un changement supplémentaire ici, qui est que dans la classe de caractères, ajoutons une méthode GET ensemble ici. Alors définissez la santé. Et puis nous pouvons dire la santé de l'ensemble des fonctions, et nous allons dire que la santé est égale à la valeur. Mais si la santé est inférieure ou égale à 0, alors nous pouvons indiquer pour moi sur cet objet. Donc, fondamentalement, cela signifiera juste que tout personnage qui tombe à 0 santé est instantanément retiré du jeu. Peut-être que nous changerons ça plus tard si nous avions quelques animations pour le supprimer du jeu, si nous l'écrivons ici, alors c'est fondamentalement configuré pour tous les personnages. Donc, si nous allons au cochon en colère, par exemple, nous n'avons pas vraiment besoin d'avoir ce Q libre ici. Nous pouvons juste faire des points auto santé moins égalent les dégâts. Et puis cela devrait exécuter la méthode de setter de santé de jeu de caractères. Je vais tirer ça ici pour qu'il soit proche de cette variable. Allons de l'avant et jouons et voyons où on en est. Si nous rencontrons l'ennemi, l'animation joue pendant 0,4 seconde. Et je crois qu'on serait en train de subir des dégâts, c'est deux têtes. Et puis après trois coups, la santé tombe à 0. Donc, le joueur est Q libéré du jeu.
23. Timer et ajouter des dommages: Donc, tout cela fonctionne techniquement, mais quelques choses que nous voulons probablement ajouter au personnage. d'abord, si tous nos ennemis entrent en collision avec notre personnage de cette façon, en utilisant les dégâts du studio de la boîte à succès. Chaque ennemi peut simplement continuer à le faire encore et encore à
chaque fois que la forme est entrée dans la forme du corps. Donc, nous voulons nous assurer que le personnage ne peut pas simplement être submergé. Il devrait donc y avoir une sorte de minuteur d'invulnérabilité pour que le joueur se protège. Fondamentalement, il ne peut être frappé qu'une fois par seconde. Et cela rendra le jeu un peu plus juste pour le joueur que nous ajoutons des ennemis supplémentaires. Donc, si nous allons au lecteur, nous pouvons cliquer avec le bouton droit de la souris ici en haut d'un nœud enfant. Et faisons une minuterie. Donc, ce minuteur, nous pouvons juste avoir un temps d'attente de 1 seconde par défaut. Donc, ce sera la durée de l'invulnérabilité. Et vérifions un tir pour que lorsque le minuteur tombe à 0, il ne redémarre pas, il s'arrête juste. On pourrait donc appeler ça le minuteur invincible ou le minuteur d'invulnérabilité, ce que vous préférez. Allons ouvrir le script et nous le référencerons avec de la fièvre. Donc je suis prêt si notre invincible est le signe du dollar et Vince à temps plein. Donc avec cette minuterie, nous allons vouloir le démarrer chaque fois que nous serons touchés. Donc, si vous trouvez cette méthode de frappe, alors on peut démarrer la minuterie quand on prend les dégâts. Minuteur invincible, point start. Je vais mettre ça ici. Maintenant, nous voulons empêcher le personnage de subir des dégâts pendant que la minuterie est en cours d'exécution. Pour qu'on puisse le mettre ici. Donc, si minuteur invincible, et il y a un moyen d'obtenir si elle est en cours d'exécution ou non, mais je l'ai oublié pendant une seconde. Donc, en fait, cherchons l'aide. Et vous pouvez l'utiliser en haut à droite. Si vous avez besoin de rechercher des détails sur l'un des nœuds et le jeu. Donc, si nous tapons juste minuteur ici, nous pouvons trouver minuteur et nous pouvons voir toutes les propriétés et méthodes à ce sujet. Donc, on veut vérifier si c'est arrêté. S' il s'est arrêté, alors il devrait être capable de subir des dommages, mais sinon pas. Et le joueur point GD et nous voulons faire est arrêté. C' est une méthode, donc nous avons besoin des parenthèses et seulement si ça s'arrête, nous allons faire tout ça. Autrement, le minuteur d'invincibilité signifie qu'il n'a pas d'importance que
le personnage l'ait techniquement obtenu par l'ennemi ne va pas entrer dans cet état. Ce personnage va continuer à fonctionner normalement. Ok, donc maintenant si on frappe le jeu, on devrait pouvoir limiter le nombre de fois où on subit des dégâts. Donc, je vais y rencontrer un tas et voir combien de temps il faut pour que le joueur meurt. Donc, comme vous pouvez le voir, j'ai traversé l'Ennemi plusieurs fois, mais le joueur n'est pas mort pendant au moins trois secondes là-bas. Je peux frapper le jeu et le montrer encore une fois. Ok, Donc aller et venir à travers l'ennemi, et il faut un certain temps pour mourir parce que les minuteries d'invincibilité limitant la quantité de dégâts au joueur. Maintenant, une dernière chose est que le personnage peut simplement se déplacer, mais veut quand il prend des dégâts. Donc je ne pense pas que ça se sent si bon en termes de souligner que le personnage devrait subir des dégâts et être un peu renversé. Donc, nous devrions mettre en place un mouvement personnalisé lorsque le personnage subit des dégâts afin qu'il stagule un peu. Donc, comment nous pouvons faire cela est ici dans notre processus physique, c'est notre façon normale de bouger, mais nous voulons avoir une autre façon de se déplacer si le personnage est dans l'état caché. Donc, nous pouvons prendre ce code, le
déplacer dans sa propre fonction séparée. Ici, j'appellerai cette fonction mouvement normal. Ça va nécessiter une entrée. Comme vous pouvez le voir, cette direction de retournement nécessite l'entrée. Et en cela, nous allons exécuter ce code. Et en fait, on ne va pas régler la vitesse ici. Rendons-le. Faisons un match ici. Donc, fondamentalement, dans n'importe quel autre état que l'état que nous allons bouger normalement. Donc, faisons correspondre l'état actuel, et allons obtenir tous ces autres noms d'état. Donc, indiquez point AIDL, virgule, point d' état, saut de point d'état, point
d'état de virgule double saut. Et dans tous ces cas, la vitesse sera égale à ce que nous obtenons de Move normal, qui prend l'entrée du joueur ici. Et maintenant, dans le dernier cas, ou du moins le dernier cas actuel, qui est l'état point frappé. Nous voulons une fonction de déplacement spéciale, donc vitesse égale à coup Move. Et cela n'aura pas besoin d'entrée parce que le joueur n'
aura aucun contrôle sur la façon dont le personnage se déplace dans ce cas. Donc, nous allons créer cette fonction ici, fonction fit, déplacer pour écrire un petit commentaire ici. Ok, donc en mouvement, on va retourner un vecteur. Bien sûr, la vitesse. Nous allons donc avoir besoin d'un montant et d'une direction. Donc, pour la direction, je veux vérifier de quelle façon le sprite est actuellement retourné. Et puis je veux aller dans le sens inverse. Donc, si le personnage est orienté vers la droite, je veux que le retour soit dans la direction gauche. Alors faisons une variable pour cette variable, renversons la direction. Et ce serait une fourmi, positive ou négative. Et si animée sprite point flip h. Donc, cela va signifier que le personnage est orienté vers la gauche. Donc, dans ce cas, nous voulons que le retour soit à droite. Donc, la direction de retour, ça va juste être un. Et les autres cas où le personnage est tourné vers la droite, donc ce ne sera pas flip h. Et cela signifie que nous voulons revenir à gauche. Alors renverser la direction. Ça va être égal à négatif. Et maintenant, nous pouvons prendre cette valeur d'un et négatif et la multiplier par sa vitesse. Donc, notre vitesse pour le retour de la NAACP va être renversée vitesse, pas que la collision a skié. Je ne sais pas ce que tu veux appeler ça, les temps renversent la direction. Et puis pour le Y, on pourrait encore travailler la gravité pendant la collision. Ce serait une option. Ou on pourrait juste le mettre à 0, ce qui signifie que si le personnage est touché en plein air, il va cesser d'avoir de la gravité. Donc, pour la partie y de ce vecteur de vitesse, nous pourrions juste faire appliquer la gravité standard ici. Ou ce qu'on pourrait faire, c'est régler la vitesse y. Ou ce que nous pourrions faire est de régler la vitesse y à 0, qui signifie que pour cette 0,4 seconde pour le personnage fait le coup de coup, il va juste s'écouler dans l'air et reculer un peu. C' est comme ça que je veux le faire pour l'instant. C' est à vous de décider comment vous voulez mettre en place le mouvement du personnage. Mais oui, si vous ne voulez pas que le personnage bouge verticalement pendant ce mouvement de hanche, alors vous pouvez simplement le définir sur 0. Donc, nous allons maintenant créer la variable en haut pour la vitesse de collision de retour. Donc exporter la pente loin cela et pourrait le mettre à quelque chose comme 50. Je ne veux pas que ce soit trop rapide. Je ne veux pas que le personnage tombe facilement bords qu'il se trouve à proximité, ce serait assez ennuyeux. Donc on est juste un peu petit pour l'instant. Allons de l'avant et allons jouer et voir où on en est. Ok, alors allons voir l'ennemi, se faire frapper. Donc avant de tester le joueur, abord, je vais aller au niveau 1, cliquer sur le joueur et je vais lui donner, disons comme 20 santé pour qu'on puisse tester sans avoir à redémarrer le jeu. Allons de l'avant et jouons et voyons où on en est. Ok, donc voici l'ennemi. Tu vas te faire attaquer. Il n'a pas vraiment de mouvement. Mais si nous faisons face à l'ennemi, alors nous obtenons ce retour et c'est dans la direction opposée à laquelle nous faisions face. C' est donc essentiellement ce que je veux. Ok, Donc je vois un bug en ce moment, qui est que les personnages et déchirer l'état inactif et un peu trop vite. Alors vérifions le lecteur et l'arbre d'animation. Ok, et assurons que tout fonctionne ici. Donc le seul coup semble fonctionner correctement ? Le hit de l'animation va ici. Alors peut-être que dans le lecteur d'animation, nous pouvons vérifier ce point zéro quatre secondes et l'animation et la boucle. Ok, donc voici ce que c'est. La fonction d'état de pique-niques est en cours d'exécution même si elle est dans l'état point frappé. Je crois que la fonction d'état suivant cochon fonctionne après tout le reste. Donc nous pourrions être en mesure de réduire cela ici et ensuite juste prendre l'état suivant et faire courir ça ici aussi. Voyons si ça marche. Donc, choisissez l'état suivant ne fonctionnera normalement que
s'il fait essentiellement ces mouvements normaux. Alors allons frapper jouer et voir si ça va marcher. D' accord ? Ok, donc un personnage peut toujours se déplacer. Et quand on se fait
frapper, on le renverse correctement. Donc c'est ce qu'on cherche. Nous ne voulons aucun moyen pour le joueur de laisser accidentellement l'état de succès autre que l'animation étant complètement terminée. Donc ça a l'air plutôt sympa là-bas. Il peut juste se débarrasser du débogage d'impression ici juste pour vérifier la vitesse. Une dernière chose que nous pourrions vouloir faire est
de faire le vecteur de direction de retour 2 plutôt qu'un entier. Techniquement, cela fonctionne bien, mais ce que nous pouvons faire pour le rendre un peu plus clair est due égale vecteur à droite. Et puis au lieu d'un négatif sur la direction x, on peut dire vecteur deux points à gauche. Il peut y avoir des cas où vous voulez que le joueur soit renversé et un peu. Et dans ce cas, le vecteur deux fonctionnerait mieux ici, puisque vous seriez capable de définir un composant y pour la direction aussi bien. Donc, pour cela, ce que nous pouvons faire à la place est de
sortir ceci ici et de simplement multiplier cela par la direction de retour. Donc, ce sera notre ampleur et ensuite ce sera la direction. Théoriquement, on voudrait normaliser ça. Donc je suppose que celui-ci fait quelque chose techniquement ici, mais nous voudrions nous assurer que les directions ne vont pas au-dessus d'une ,
parce qu'alors il aurait une sorte d'ampleur ici. Alors, allons le faire normaliser. Et puis nous allons régler la direction de retour à ça. Donc, le vecteur normalisé ayant seulement la direction multipliée par la vitesse. Et cela devrait fonctionner efficacement exactement de la même manière qu'avant. Mais je pense que cela rend un peu plus facile de comprendre exactement ce qui se passe pour que notre personnage puisse toujours bouger et tout. Faisons frapper par l'ennemi, se fait renverser dans la bonne direction. Et oui, ça marche exactement comme avant en termes de fonctionnalité finale. est ainsi que nous pouvons avoir des ennemis comme le cochon en colère endommager notre joueur. Et ça va être tout pour cette section sur la mise en place du choix en colère.
24. Coding en état glissement du mur: Donc, dans cette prochaine partie, nous allons ajouter l'état coulissant du mur pour notre personnage. Donc, quand on est en bordure du mur, on devrait pouvoir le glisser de haut en bas. Et cela va aussi donner un champ différent au mouvement. Donc une chose que je vais ajouter est de réduire le taux que vous
glissez sur le mur plutôt que quand il tombe juste à cause de la gravité. Et nous allons aussi ajouter la possibilité de faire un petit saut hors du mur, ce qui est différent d'un saut normal parce que ça va
un peu nous éloigner du mur automatiquement. Alors allons de l'avant et plongons dans notre scène de joueur. Et je suppose qu'un endroit où on pourrait commencer serait l'arbre d'animation. Donc, si nous élargissons cela, nous pouvons voir qu'il n'y a rien ici pendant un certain temps animation glissante. Et je pense que ce qu'on va dire c'est entre le coup d'un coup et le double saut. Nous voulons que le massacre de puits soit une animation hautement prioritaire pour l'obtenir et prendre des dégâts est fondamentalement jeton et continuer tout. Donc on l'aura juste ici. Et au lieu d'un seul coup fera cela un mélange parce que le fait d'être sur le mur peut être activé et éteint. Alors faisons un clic droit ici et je vais ajouter un mélange T2. Et ce mélange deux va être, est sur le mur. Donc, comme nous connectons la sortie de notre un coup double saut pour être l'entrée sur est sur le mur et déconnecter est sur quoi ? Le one-shot pour finir la tendance. Et avant d'ajouter l'animation, nous devons en fait la corriger. Donc, dans le sprite animé, nous pouvons voir que nous avons une animation de saut mural ici. Mais en fait, ce n'est pas exact. C' est vraiment une animation de glissement mural. Le saut va ressembler à une animation de saut standard. Nous allons donc renommer cette animation en diapositive murale. Et maintenant, allons dans notre arbre d'animation que je puisse cliquer avec le bouton droit de la souris sur une animation et choisissons cette diapositive murale. Eh bien, nous n'avons pas créé cette animation dans le lecteur d'animation non plus. Donc, dans le lecteur d'animation, Allons à l'animation inactive et dupliquons. Ok, donc on peut renommer ça pour être, je pense que j'ai besoin de changer ici va être la valeur ou l'animation. Et bien sûr, on va changer ça pour être tout en glissant. Maintenant, nous pouvons aller dans l'arborescence Animation, supprimer ce nœud d'animation, et en ajouter un nouveau pour qu'il soit mis à jour avec la légère animation du mur. Et maintenant, nous connectons ça dans le mélange. Donc, si notre valeur de mélange est définie sur un, nous allons bien dormir. Et si elle est réglée sur 0, nous allons jouer une de ces autres animations. Alors maintenant, plongons dans le code. Donc, avec le corps cinématique 2D, il y a une fonction qui est, est sur le mur avec des parenthèses. Ainsi, vous pouvez exécuter cela sur n'importe quel corps cinématique 2D pour vérifier si le personnage est sur le mur ou non. Mais dans ma pratique, je ne suis pas sûr à 100% pourquoi, mais je trouve que vous obtenez des résultats plus cohérents en vérifiant s'il y a un mur bordé, si vous faites juste un re-cast. Donc, plutôt que l'utilisation est sur le mur et en utilisant cela pour vérifier si nous devrions aller dans l'état coulissant, nous allons utiliser tableau cast pour voir si nous sommes juste à côté contre un mur. Et puis que les objets muraux sont supposés aussi devoir correspondre pour être sur la couche mondiale parce que nous voulons seulement des choses comme les briques et les plates-formes pour pouvoir réellement compter comme une femme, nous avons heurté un ennemi qui ne devrait pas compter. Heureusement, cependant, si vous vous souvenez, notre joueur a le masque de collision où nous ne cherchons que le monde. Donc, fondamentalement, tout ce que nous pouvons entrer en collision avec une
pauvre opération physique 2D est ce que nous allons utiliser pour les masques ou nous allons juste utiliser ce masque. Alors allons de l'avant et créons notre fonction pour tester si nous sommes à la frontière contre le mur. Donc je vais appeler ce funk est sur le test de refonte de mur. Je veux m'assurer qu'il est clair que nous n'utilisons pas seulement la norme est une fonction malveillante,
mais que nous faisons notre propre chose ici. Et puis nous allons avoir besoin d'une variable. Donc ça va être l'état de l'espace. Donc, dans un jeu de ghetto, nous pouvons obtenir cet objet d'état de l'espace, qui a la capacité de faire des tests re-cast en utilisant Git world 2D, puis en vérifiant cette propriété d'état de l'espace direct. Donc, avec cela, nous pouvons faire un cast de rayon, qui prend fondamentalement un point de départ, aller vers un autre point dans notre monde 2D et voir s'il y a des collisions entre le point de départ et le point de fin. Donc, nous allons avoir une variable de résultat, qui va être un dictionnaire des collisions qui se produisent. Et ça va être égal à notre objet d'état spatial faisant la refonte et nous allons le faire comme un rayon intersecté. Nous partons de la position de nos objets de joueur. C' est donc la position globale. Et nous allons mettre la position finale sur ce rayon. Fondamentalement notre position de départ plus un certain nombre de pixels vers la direction que notre personnage fait face. Là où notre personnage est confronté, c'est le mur auquel nous nous soucions. Nous pouvons donc commencer par notre position globale ici. Et un nombre arbitraire de pixels. J' ai trouvé que 10 fonctionne vraiment bien. Et vous pouvez mettre une propriété en haut si vous voulez la mettre là et tout ça. Et nous allons à temps cette fonction phi et u écrira direction face. Alors allons de l'avant et écrivons cette fonction maintenant. Donc, la fonction devient direction orientée. Donc, ça va être assez simple. On va juste jeter un coup d'oeil. Euh, dans quelle direction le sprite du personnage est orienté. Et puis ça va être notre direction face. Donc, nous pouvons juste vérifier si le sprite animé blip H est faux. Donc si c'est faux, alors notre personnage est face à droite. Donc nous voulons retourner un vecteur deux points, non ? Donc, en termes de valeurs, ce serait juste une virgule 0,
0 pour y, un pour x, ce qui signifie que nous sommes face à la droite. Sinon, fondamentalement, il est orienté vers la gauche. Donc nous pouvons juste retourner le vecteur deux points à gauche. Tellement facile. Bon, maintenant on peut revenir à nos fonctions de test de refonte. Il y a donc quelques paramètres supplémentaires ici. Donc, vous pouvez voir le troisième paramètre juste là est exclusion et il faut un tableau, donc nous voulons exclure l'objet actuel de cela. Ce n'est pas vraiment nécessaire ici, mais juste au cas où, pour une raison quelconque, nous ne voulons pas que le joueur se présente comme un mur pour les résultats. Donc, il pourrait aussi bien se faire ici que le tableau. Notez donc les crochets. C' est ainsi qu'il l'a défini comme un tableau. Et cela doit être un tableau parce que c'est le type pour le périmètre. Ensuite, nous pouvons mettre un masque de collision ici pour faire en sorte qu'il y ait vous
intersectoriel quand il sort et vérifie les collisions, ça ne le fait que sur la couche mondiale. Donc, la façon la plus simple de le faire est de prendre le masque de collision ici. Et nous pouvons juste tirer ça à droite du corps cinématique 2D en faisant un masque de collision auto-point. Donc ça va faire la vérification de refonte pour le mur pour nous. Et maintenant, nous pouvons juste faire quelques vérifications très simples. Donc s'il y a un résultat et le dictionnaire, cela signifie
qu'il y a eu une collision. Et probablement cette collision se produit dans la couche du monde, ce qui
signifie qu'il s'agit d'un bloc ou d'un autre objet qui compterait comme un mur. Et on veut juste voir s'il y en a. Donc, nous pouvons le faire assez facilement avec si la taille du point de résultat est supérieure à 0, alors évidemment il y a quelque chose là-bas. Donc nous revenons vrai. Sinon, il n'y a pas de collisions. Donc il ne devrait pas y avoir de mur juste devant nous, pour que nous puissions retourner faux. Donc, selon la façon dont nous codons, il aura probablement besoin du résultat de ceci plusieurs fois pour chaque boucle de notre processus physique, cela va être une variable utile pour déterminer quel statut devrait être dans et quelles actions et quels mouvements nous devrions prendre. Donc, si nous exécutons ceci ici et que
notre fonction de processus physique pourrait juste mettre juste ici à côté de définir les paramètres d'animation. Donc, nous allons exécuter cette fonction et ensuite nous allons enregistrer le résultat de celle-ci dans une variable booléenne. Donc nous pouvons venir ici et faire var est le mur bordant. Encore une fois, juste changer le nom un peu pour qu'il soit distinct
du corps cinématique est sur la fonction Wolf. Tout comme le mur bordant. C' est juste le résultat de cela, est sur les tests de refonte murale. Et maintenant on peut l'utiliser quand on a besoin de voir s'
il a quitté le mur ou si on a sauté de la guerre, peu importe. Donc, ce sera très utile. Ok, alors prenons cette valeur et allons là-bas pour choisir le prochain état. Donc, après cela, sinon ajoutera un autre. Donc, nous allons faire quelque chose avec ça et une seconde ici. Mais pour l'instant, nous allons en avoir un autre si en bas. Donc nous devons changer ceci d'autre et à un autre si, comme il n'y a qu'une seule condition ici de toute façon, nous pourrions aussi bien tirer ça ici. Et je le colle comme ça. Et maintenant dans ce cas, nous
entrerions l'état de double saut devrait fonctionner exactement comme avant. Et maintenant, nous avons besoin d'un autre. Si vous allez plus loin, si toutes ces autres conditions n'ont pas été remplies, alors voici où nous allons utiliser. C' est en bordure du mur. Donc, si nous sommes sur le mur, alors nous voulons entrer dans l'état de glissement du mur. Donc, faisons auto point état actuel égal à la diapositive de mur de point d'état. Et puis bien sûr, montons au sommet et ajoutons ceci à la liste de notre état. Nous pouvons également modifier cela un peu aussi. Donc, si le personnage est en l'air et fait le bouton de saut, alors généralement nous voulons que le double saut se produise, mais si nous sommes sur le mur, nous voulons que les sauts se réinitialisent. Donc, fondamentalement, il va être sauter de sauts sont également devrait faire un saut normal. Donc, ce que nous pouvons faire ici est de mettre que IF est mur bordant, et puis si c'est le cas, alors au lieu d'entrer double saut sera juste entré saut. Donc auto sombre état actuel égal point d'état sauté. Et puis l'autre en bas, double saut. Donc, pendant que nous sommes sur la diapositive murale, nous allons vouloir que le mouvement soit un peu différent, mais nous allons toujours exécuter la fonction d'état suivant PEC. Nous allons donc mettre en place une autre correspondance pour l'état actuel. Donc si on a le toboggan mural, on va toujours choisir le prochain état. Puisque fondamentalement nous avons déjà configuré les autres conditions dont nous avons besoin pour cela dans la fonction d'état de pique-niques. Mais pour le mouvement lui-même, nous allons changer comment cela fonctionne quand nous serons sur le mur. Donc je vais créer une nouvelle fonction pour la loi toiture toiture. Et cela ne va pas prendre d'entrée du joueur parce que fondamentalement, nous n'allons pas utiliser l'entrée x pour déterminer le mouvement x. Il va être coincé sur le mur jusqu'à ce que le personnage saute loin du mur. Alors allons de l'avant et créons cette fonction ici. La hanche. Donc fonctionner tout en mouvement léger. D' accord ? Et comme les autres fonctions pour bouger, nous allons retourner un vecteur. Et pour le x, nous allons prendre la vitesse actuelle et nous allons juste garder ça tel quel. Donc s'il n'y a pas de mouvement X, nous ne changerons pas le mouvement X. Et puis en plus de cela, nous allons encore faire des hommes prenant le moindre des deux valeurs. Donc la vitesse, pourquoi la vitesse y actuelle et un peu similaire à avant, nous allons ajouter la gravité des paramètres de jeu, mais nous allons multiplier cela par une valeur de friction. Donc je vais appeler ce frottement de glissière de mur. Et puis tout comme la fonction normale, nous voulons toujours que cette vitesse finale soit notre vitesse absolue la plus rapide. On va les suivre. Donc, évidemment, nous avons besoin de cette valeur de friction de glissière murale. Donc, je vais juste monter ici en haut et faire une autre variable de flux. Et je vais vouloir que ce soit en dessous d'un parce que le personnage devrait glisser plus lentement quand il est sur le mur, sorte de battre le mur, alors il serait normalement juste tomber libre. Donc, je peux multiplier cela par 0,5 et puis il glissera le long du mur assez lentement. Et donc cela va fondamentalement nous donner notre glissière de mur lorsque nous sommes dans les états de diapositive de mur afin que nous ne puissions pas changer notre vitesse x. Et le glissement vers le bas du mur va être plus lent qu'il ne le serait. Donc, dans notre code quand nous sommes dans l'état du mur, dans la plupart des états, nous pouvons appuyer sur saut pour sauter. Donc, si nous bordons le mur, nous allons obtenir ce state.com, sinon, état dot-dot. Et si nous nous souvenons, cause de la fonction satyre pour cet état actuel, si nous venons ici, cela signifie
qu'il va exécuter la fonction de saut, qui va ajouter une impulsion de saut vers le haut et augmenter la valeur de saut. Donc, en général, c'est correct, mais nous voulons que cela fonctionne un peu différemment quand nous le faisons. Du mur.
25. Mouvement Wall de mur: Donc, si nous entrons dans cet état de sauts depuis le mur, et nous pouvons vérifier cela en vérifiant l'état actuel avant de le changer. Donc l'état actuel double égale la diapositive de perte de point d'état. Et puis juste au cas où nous passions à l'état Sauts de quelque façon que ce soit sans appuyer sur saut, que nous ne sautions pas du mur. Donc, par exemple, si le personnage glisse un peu hors du mur, mais pas sous le sol, et nous entrons dans l'état de saut pour l'animation. On ne veut pas qu'il saute immédiatement. Donc point d'entrée est action, juste crête. Et nous vérifions le saut. Ok, c'est un ensemble de parenthèses en plus. D' accord ? Et si c'est le cas, alors on peut faire un saut au mur. Donc, ce serait similaire à sauter, mais pas exactement la même chose. Sinon. On peut faire, le saut normal et d'autres circonstances. Alors montons ici au saut de base et créons un saut mural. Donc, les choses vont être les mêmes à propos du saut de mur. Donc pour le saut au mur, on va faire la même chose. La vitesse y sera la même quand nous entrerons dans ce saut de mur. Et parce que nous sommes entrés par
le mur, les sauts devraient toujours commencer à un. Puisque nous considérons le mur comme
le sol en ce sens qu'il réinitialise nos sauts. L' autre chose que nous allons vouloir avoir ici, essentiellement verrouiller notre mouvement de base pour que nous puissions sauter loin du mur avec une certaine vitesse en plus de la vitesse y. Mais nous ne voulons pas que ce soit quelque chose que le joueur puisse contrôler pendant une seconde. Donc ici, pour notre mouvement normal standard, nous pouvons vraiment vérifier ici si la minuterie de saut d'eau, que nous sommes sur le point de créer, a commencé, et si elle n'a pas commencé, alors nous ferons un mouvement normal. Mais s'il est en cours, alors on va renoncer à ce geste normal. Même si nous sommes dans l'état Jumps afin de faire un saut de mur spécial temporairement. Alors créons un minuteur de saut mural et notre joueur. Donc je vais créer la minuterie, je
vais faire une minuterie de saut de mur ici. Et nous allons enlever le mouvement normal du joueur pour la branche, disons 0,15 seconde. Donc, si vous changez le temps d'attente à 0,15, assurez-vous qu'un tir est vérifié car une fois la minuterie terminée, nous ne voulons pas qu'elle se relance jusqu'à ce que nous redémarrions un nouveau saut de mur à un moment donné dans le jeu. Donc maintenant, nous devons référencer ce minuteur dans le script, tout comme le minuteur invincible. Donc non prêt var log saut minuterie égale signe dollar saut mur minuteur. Donc on peut vérifier ici si la minuterie de saut est arrêtée. Et c'est une fonction. Donc, si c'est arrêté, alors nous ferons le mouvement normal ici. Sinon, nous allons faire un, un autre mouvement spécial. Alors que ce mouvement spécial, Faisons une autre fonction pour que nous pouvons l'appeler tout en sautant mouvement. Et encore une fois, nous n'avons pas besoin de l'entrée car c'est une sorte de contrôle forcé pour l'axe X. Et venons ici. Ainsi fonctionne tout en sautant mouvement. Et la raison pour laquelle nous avons besoin de cette fonction est parce que contrairement au saut, qui est un peu juste une impulsion rapide standard, cela va en fait être sur quelques images. Donc nous voulons qu'il continue à faire cela jusqu'à ce que la minuterie sur le saut de mur soit terminée. C' est pourquoi nous devons exécuter chaque image jusqu'à ce que la minuterie soit activée. Donc on peut juste retourner un vecteur ici. Et cela va faire de la vitesse de déplacement. Et une autre variable devra définir qui est alors la direction sautée, qui va être dans cette fonction de saut de mur. Donc, fondamentalement, la direction dans laquelle le personnage saute loin du mur va être la direction et continue à se déplacer jusqu'à ce que la minuterie soit terminée. Et puis ici, le mouvement sera le même qu'un mouvement standard. Il suffit de retirer le mur, léger frottement. Donc c'est juste la vitesse y plus la gravité. Et maintenant, nous devons créer la direction de saut de mur. Alors passons à la fonction de saut mural. Encore une fois. Une chose que nous allons devoir faire est de démarrer la minuterie pendant que la minuterie Jam démarre. Et nous avons aussi besoin d'obtenir la direction de saut de mur. Et cela va être égal à la direction opposée du courant au cadre où nous commençons le saut de mur. Porte donc négative face à la direction. Et c'est une fonction. Donc, c'est aussi déclarer cette variable ici en haut. Dans ce devrait être un vecteur deux. Donc, c'était beaucoup de code. Allons à définir l'état actuel. Et nous devons nous installer un peu ici pour quand nous entrons dans l'état du mur. Donc, faisons l'état de la glisse de mur de point 11 sur le mur. Une chose que nous voulons certainement définir est les sauts égaux à 0. Depuis qu'on réinitialise les sauts pour le joueur. Et nous voulons également que l'arbre d'animation va définir le paramètre est cette valeur de mélange de barre oblique sur le mur ON. Et ça va être réglé à un. Et donc cela doit être un pour que l'animation des diapositives murales puisse jouer. Ok, et il semble que j'ai mal écrit le nom de cette variable ici. Donc, nous allons juste coller cela dans la direction Jam est ce que nous voulons. Maintenant, enfin, nous voulons également que le est indésirable à mettre à jour sur chaque image. Donc, nous vérifions simplement si le personnage est toujours sur le mur ou non et ensuite mettre à jour cela. En fait, peut-être que nous n'avons même pas besoin de ça ici parce que nous allons juste mettre en place à chaque image. Donc je vais juste couper ça. Et nous monterons ici pour définir les paramètres de l'anime. Et c'est ce qu'on va faire à la place. Donc, nous allons prendre qui est le mur bordant et le convertir en un ou 0 selon si c'est vrai ou faux. Alors écrivons sur la loi et je suppose que je peux déclarer que ça va être un ORL évidemment. Et nous pouvons le faire si c'est bordant le mur et si c'est bordé par le mur, nous disons que c'est sur le mur. Donc, la variable devrait être une variable. Donc est sur, alors que nT est égal à 1, sinon est sur le mur, va être égal à 0. Et maintenant que c'est un entier, nous pouvons définir le paramètre. Donc, les paramètres de l'ensemble de points de l'arbre d'animation sont sur la quantité de mélange de barre ob Et ce sera quelle que soit l'heure est sur l'entier de la loi est définie sur. Donc maintenant notre arbre d'animation devrait être mis à jour chaque image pour savoir si nous devrions jouer l'animation de glissement mural ou non. Assurez-vous que dans l'arbre d'animation nous avons ce paramètre ici. Donc, nous pouvons voir les paramètres est sur le mur, les mélanger. Et on peut voir cette configuration avec le toboggan mural.
26. Tester des sauts du mur et finaliser le mouvement de personnages: Ok, donc après tout ce code, allons de l'avant et voyons vraiment où nous en sommes. Allons frapper jouer. D' accord. Voyons voir. Nous avons le mur coulissant, ok, et vous pouvez voir quand nous sautons du mur, les paramètres d'animation se définissent correctement. Donc c'est l'une des raisons pour lesquelles je n'utilise pas son propre contrôle de mur parce que quand vous utilisez la webdiffusion, j'obtiens juste de bien meilleurs résultats. Dès qu'on sera là, il vérifie ici la refonte. Il ne trouve pas de mur. Donc, nous passons immédiatement à l'animation de l'automne du cavalier, qui semble juste beaucoup mieux. Donc, une chose que nous pouvons noter ici est que notre personnage se déplace assez vite actuellement, avec la possibilité de double sauter et de faire des diapositives murales. C' est tout à fait au-dessus, donc nous allons probablement avoir besoin de tonifier ça. Une autre chose que j'ai remarqué est qu'il ne se sent pas toujours bien aller au bord de l'un de ces blocs et ensuite glisser avec cette capsule 2D formes. Donc, en fait, a changé la forme du caractère en un rectangle aussi. Je crois que j'ai dit vers le début de ce cours, c'est à vous de décider ce que vous préférez. Et je pense que par ce point, je préfère que ce soit un rectangle. Donc une chose qui ne fonctionne pas très bien actuellement, c'est quand on fait ce saut de mur, on est coincés dedans. Donc, je ne suis pas sûr si nous vérifions correctement pour voir si le minuteur s'est arrêté. Parce qu'une fois que la minuterie est arrêtée, vous devriez pouvoir reprendre le contrôle de votre personnage. Ok, alors faisons le fruit bas en premier dans le joueur, on peut changer la forme de collision. Donc, nous allons changer ceci en forme de rectangle. Et je crois que les tailles que je voulais mettre pour ce travail, 10707 et 10, je suppose que c'était. Donc à peu près la forme de notre personnage,
mais, maintenant, notre forme de collision le fera de sorte que nous ne devrions pas avoir glissement hors du bord et pourquoi le B clairement allumé sont clairement éteints. Je pense qu'une autre façon de contourner potentiellement pourrait être utiliser la fonction de collision mobile au lieu de déplacer et de glisser. Puisque les mouvements comme la fonction va en quelque sorte vous déplacer le long du sol. Mais la fonction de collision en mouvement, s'il y a quelque chose dans le chemin, cela va juste arrêter complètement votre mouvement, grosso modo. Mais je pense que ça marchera plutôt bien pour le moment. Ensuite, je veux limiter une partie du mouvement dans
le jeu pour que nous puissions baisser l'impulsion de saut. Je vais ramener cela à 500 par défaut. Et puis dans les paramètres de jeu, je vais abaisser la gravité à 40. Appuyez sur Play et voyons comment cela affecte les choses. Peut-être que nous voulons même réduire la vitesse des personnages d'un peu. Alors voyons dans le joueur, ok, il utilise toujours 200. Donc je suppose qu'on pourrait le mettre à 180. Ok, donc c'est encore assez rapide. Mais je pense qu'avec cette gravité, c'est un peu moins ridicule. Distill serait une plate-forme assez rapide un peu, peut-être pour une grenouille ninja, ça a un peu de sens. Donc, nous pouvons le laisser dans les paramètres pour maintenant. Ok, donc on a le problème avec un mouvement de saut de mur qui dure trop longtemps. Donc, je vais prendre la minuterie de saut mural et imprimer le temps restant. Donc, nous allons imprimer le temps restant dans le journal de la console et
voyons combien de temps cela dure réellement devrait être 0,15 secondes, ce qui est assez rapide. D' accord ? Donc il a fallu un cadre, ils sont essentiellement et après ça, ça va toujours. D' accord. Tu vois ce qui se passe ici ? Quand on quitte le mur, il est toujours sur le mur. Les états de diapositive, c'est pourquoi nous ne pouvons pas contrôler le mouvement. Donc, ce que nous pourrions faire ici est juste ajouter une autre façon d'entrer dans l'état Jumps, mais faire en sorte que nous fassions cela sans vraiment sauter. Donc, nous savons déjà à ce stade que le mur bordant est faux. Donc on n'a pas vraiment besoin de vérifier. Donc, nous pouvons juste faire l'état actuel de point auto ici est égal à l'état dot-point point. Donc, quand nous entrons dans l'état comme ça, puisque cela va être fondamentalement quand quelque chose provoque le personnage à quitter le mur qui n'appuie pas sur le bouton de saut. Alors on veut s'assurer ici qu'on y entre sans sauter. Et c'est pour ça que j'ai écrit ça ici. D' accord ? Donc, c'est essentiellement juste pour distinguer qu' il existe différentes façons d'entrer dans l'état Jumps. Et nous n'essayons pas toujours de faire une fonction de saut, même si nous jouons cette animation de saut. Alors allons de l'avant et frappons maintenant. Et j'espère que le personnage devrait être capable de le faire, oh Dieu. Ok, alors allons-y et jetons un coup d'oeil. Et de toute évidence, ce n'est pas ce que nous voulions. Donc je pense qu'on a besoin d'une condition ici en fait. Donc on va faire Else-sinon le mur bordant, je suppose. Mettons donc l'else-if et nous allons vérifier que l'état actuel est égal à la diapositive point wa de l'état. Donc, nous ne devrions être en mesure de arbitrairement et à l'état de saut de l'état de glissement de mur comme ceci. Et juste pour qu'il soit un peu plus lisible, compréhensible aussi important. Et ce n'est pas le mur bordant. Donc, si ce bit a déjà fonctionné, alors cela devrait déjà être vrai. Donc ça ne sera pas vraiment nécessaire. Mais je suppose que ça donne un indice sur ce qui se passe ici. Alors allons de l'avant et frappons le jeu. Et nous ne devrions pas pouvoir entrer dans ce saut depuis le début parce que nous n'étions pas sur le mur, mais maintenant nous sommes sur le toboggan mural. Sautons du mur. Et vous pouvez voir qu'il donne un moyen pour nous d'entrer dans le saut, mais sans réellement ajouter une autre animation de saut. Donc nous n'avons qu'un seul saut loin du mur. Et c'est ce qu'on cherchait. Donc, nous pouvons voir bien que le saut de mur soit forcé, nous pouvons appuyer vers le mur et il retourne assez rapidement. Techniquement, cela fonctionne comme prévu. Peut-être qu'il se déplace un peu trop vite et l'air, sorte que nous pourrions ralentir les caractères par défaut, le mouvement de l'
air ou l'accélération horizontale de l'air si nous le voulions. Mais si vous aimez la sensation du personnage maintenant, alors il devrait être assez bon d'aller pour tous les enregistrements d'animations, configurer ce personnage avec peut-être un peu de glisser autour de la carte. Mais beaucoup de cela va juste être de peaufiner les variables. Donc découpons ce petit peu qui est l'impression dans le journal de console un tas. Je vais juste frapper le contrôle F et vérifier les empreintes de pas. Celui-ci va bien, je suppose. Mais nous allons nous débarrasser de ce mur saut Timer Text. Maintenant, encore une chose à montrer. Plus tôt, j'ai dit que lorsque nous faisons notre webcast, nous voulons nous assurer que cela ne se produit que lorsque nos personnages sur le mur comme ceci. Et peut-être qu'on ne veut même pas que le mur
s'embrasse si on est sur le sol et le mur comme ça. Donc c'est une autre chose que nous pouvons éteindre. Peut-être qu'on aime, je ne sais pas. Mais nous voulions nous assurer que le cochon ne peut pas compter comme le mur. Et vous pouvez voir que clairement le cochon ne
compte pas comme le mur parce qu'il est sur une couche séparée, c'est sur sa couche ennemie, ce qui rend les couches physiques vraiment utiles. Pour qu'on puisse encore rebondir sur eux. On peut toujours, on va voir si on peut avoir une attaque et un double John. Ok, gentil. Et puis après cela, nous pouvons aller pour quelques belles glissades murales dans un saut ou tout en glissant dans un
double, décharges, tout ce que nous voulons faire. Donc notre personnage travaille à peu près pleinement ici. Donc il y aura encore quelques choses que nous voulons ajouter au jeu encore comme un deuxième ennemi et en fait construire quelques niveaux. Cela fait longtemps que nous n'avons pas touché le jeu de tuiles, mais il pourrait être amusant de passer d'un niveau à l'autre. Lorsque vous battez le niveau un, vous pouvez passer au niveau deux, ainsi de suite et ainsi de suite. Donc ce sera un peu ce que nous regardons dans les dernières vidéos.
27. Nettoyer et corrections: Ok tout le monde, Alors que nous approchons de la fin de ce cours, je veux avoir une vidéo rapide ici pour nettoyer certaines des choses qui étaient un peu désordonnées plus tôt. Donc, en commençant par cela, augmente l'animation de double saut à 0,35 seconde. Donc, si on jette un bref coup d'oeil au double saut, je pense qu'il se termine un peu brusquement là. Et je trouvais que si nous augmentons un peu la durée de l'animation, elle reconvertit un peu plus en douceur dans ses animations de chute ou de saut. Allons donc dans le joueur, le joueur d'animation. Et si nous trouvons l'animation double saut, nous pouvons augmenter la durée ici à 0,35 seconde. Modifiez cet instantané à 0,05 seconde. Et nous allons zoomer et déplacer simplement cette animation terminée à la marque 0.352. Donc maintenant, quand on retourne dans le jeu, je pense que l'animation va juste un peu mieux là-bas. La prochaine chose que je veux faire est d'ajouter un deuxième cochon au jeu. Donc, nous ne construisons pas vraiment nos niveaux tout à fait encore. Mais je pense que ce troisième point de cheminement était assis ici depuis longtemps. Et puisque notre cochon en colère est complètement fait, c'est dommage si nous ne réutilisons pas une partie du code, sélectionnons simplement notre cochon dans la hiérarchie et faisons une commande ou un contrôle D pour le dupliquer. Si vous maintenez la touche Alt enfoncée à l'endroit où vous passez la souris sur les porcs, nous sélectionnerons et déplacerons celui actuellement sélectionné. Alors déplacons ce cochon en colère ici à droite. Et maintenant, dupliquons le waypoint 3. Alors je vais à Alt. Donc je vais à la commande D sur Mac. Et puis je vais aller là où il est dans le monde du jeu. Maintenez la touche Alt D pour déplacer ce point de cheminement spécifique et comme couler ici. Donc, puisque nous avons le code mis en place assez bien, nous avons déjà créé le chemin pour le choix en colère. Maintenant, nous avons juste besoin de définir que le cochon en colère va utiliser les points de cheminement 3 et 4. Donc, nous allons cliquer sur Angry choisi pour aller au tableau waypoints. Et sélectionnons le waypoint trois au lieu d'un dans le waypoint quatre au lieu de trois. Un autre petit problème est que si nous regardons la forme de collision de notre cochon en colère et que nous frappons le monde du jeu, nous pouvons voir qu'il rebondit un peu au-dessus de l'endroit où se trouve le sol. Donc ça n'a pas l'air tout à fait correct. Donc, si nous allons dans le cochon en colère, nous pouvons juste prendre notre forme de collision, la principale pour les collisions du monde réel. Et puis prenons la position ici et changeons-la à deux
d'un trois pour la position y. Donc ça le déplace un peu vers le haut. Et maintenant, il va entrer en collision avec le sol beaucoup mieux et il aura l'air plus correct. Allons-y et prévisualisons où nous en sommes jusqu'à présent. Donc nos cochons sont un peu plus contre le sol et nous avons ce deuxième cochon en colère. Sachez comment ça fait des distances beaucoup plus loin, mais je travaille toujours comme le premier cochon en colère. Et c'est vraiment cool. C' était tellement plus facile de créer le deuxième ennemi. Et quand on doit tout coder à partir de zéro, réutilisabilité, ouais. Donc un autre problème, et celui-ci est un peu important, c'est qu'avec nos mécaniciens de saut, parfois si on saute à un angle comme celui-ci, on endommage le cochon même si on monte,
ce qui ne fait pas vraiment sens. Donc, ce que nous pouvons faire est d'ajouter non seulement un, était les joueurs sauter frappé boîte en collision d'en haut, mais était la vitesse comme ascendant ou descendant. On ne devrait donc qu'endommager les porcs. On est en train de tomber dessus. Pas quand on envoie un angle comme ça. C' est un peu bizarre. Donc c'est une solution rapide. Allons dans le script du joueur et puis allons trouver où nous vérifions pour infliger des dégâts à un ennemi. Donc je pense que cela aurait pu être sur Jump Box entré. Et ici, nous pouvons voir la ligne pour si nous infligeons des dégâts à l'ennemi. Ok, donc cette ligne est juste pour vérifier si on frappe l'ennemi de la bonne façon. Donc, la position devrait être au-dessus. Donc, nous allons aller ici et ajouter une condition supplémentaire, qui est que le point de vitesse y. Je pense que nous voulons que ce soit inférieur à 0. Nous voulons nous assurer qu'il va vers le bas sur l'écran. Alors frappons le jeu et jetons un coup d'oeil. Il y aura immédiatement évident. Donc si on saute sur l'ennemi, d'accord ,
c'est en fait l'inverse. Et donc c'est un peu déroutant puisque la direction y est en quelque sorte inversée. Donc, si nous descendons, c'est vraiment positif et négatif serait aller vers le haut sur l'écran et notre personnage va descendre pour atterrir sur l'ennemi. Alors frappons le jeu, testez ça à nouveau à quelle heure, assurez-vous
qu'on peut rebondir. C'est ce qu'on veut. Mais maintenant, on ne peut pas faire ce mouvement de dégâts inclinés bizarres. En fait, ce qui se passe, c'est que nous sommes endommagés, ce qui est un peu comme ça devrait être. Je pense. L' autre chose avec le cochon en colère, et si nous allons dans il est vu et jeter un oeil à cela, Désactivons la collision principale en forme de 2D. Nous pouvons voir que quand j'ai fait la forme de collision ennemie est vraiment petite. Et cela ne paie que le joueur beaucoup. Mais je pense au point où ça n'a pas de sens. Ainsi, le joueur peut être ici et ne pas subir de dégâts de l'ennemi. Donc je vais le faire un peu. Alors prenons la forme de collision ennemie sous la boîte de frappe de collision ennemie, et prenons les étendues et faisons cela 10. Donc maintenant vous pouvez voir que cela ne correspond toujours pas vraiment au cadre sprite. Donc, vous pouvez voir que cela est encore plus petit que le sprite lui-même. Et si nous allumons la forme principale de collision, celle pour si le cochon entre en collision avec le monde, vous pouvez voir cela encore plus grand. Donc il y a encore du vol. Donc, cela favorise encore le joueur, mais peut-être que cela a un peu plus de sens maintenant. Ok, donc avec ces correctifs, sortir avec les cochons en colère devrait être un peu plus propre. Alors frappons le jeu et testons tout. Donc d'abord, s'assurer que nous pouvons encore faire une attaque de rebond sur l'ennemi. C' est tout bon. Et essayons juste d'être un peu sournois et essayons d'éviter les dommages. Bien, évidemment, nous pouvons voir que les formes de collision vont nous favoriser, mais
28. Jeu sur l'écran et les limites de caméra: Une des choses suivantes que je voudrais ajouter est la capacité
pour le personnage de tomber du bord et de perdre le jeu. Mais en ce moment, nous avons une caméra de suivi sans limites. Donc je peux montrer ce qui va se passer en ce moment, si on sort du bord, vous pouvez voir, peu importe où le joueur va, il va juste continuer à suivre. Ce serait un peu bizarre d'avoir un jeu ici. Donc la prochaine chose que nous allons vouloir faire est de prendre cette caméra et de lui fixer des limites. Donc, avec n'importe quel appareil photo, vous pouvez définir manuellement des limites en utilisant la catégorie limite ici. Ainsi, vous pouvez voir à gauche, en haut, à droite et en bas. Mais je pense qu'une meilleure façon de le faire est d'utiliser les nœuds 2D de position afin de définir où se trouve
la limite supérieure gauche et la limite inférieure droite est exactement comme nous fixons des cibles de waypoint. Et puis pour appliquer cela à la caméra 2D et un script chaque fois que le script se charge. Alors allons-y et prenons cette caméra 2D. Je vais le renommer quelque chose comme suivre la caméra pour être un peu plus spécifique. Lorsque nous faisons cela, cela nous donne un avertissement sur notre transformation à distance. Donc tu dois réinitialiser le chemin vers la caméra de suivi sur ce chemin à distance par ici. Alors maintenant, prenons cette caméra de suivi, faites un clic droit dessus et transformez-la en une scène réutilisable. Je suis peut-être un peu exagéré, mais je suppose que je vais créer une catégorie ici, une photo plutôt. Donc, si je clique sur Nouveau dossier et je vais juste appeler cet appareil photo. Donc, si vous avez d'autres caméras, cela pourrait être un peu redondant. Mais j'ai créé un dossier ici appelé caméra. Cliquez avec le bouton droit sur le nouveau dossier Et nous allons ici et nous pouvons sauver cette scène comme un objet réutilisable, mais ils sont donc maintenant nous allons plonger dans la scène des caméras. Et cette scène. abord, nous allons vouloir réinitialiser la transformation à 000 par défaut. Et deuxièmement, nous devons ajouter dans une certaine position les mardis, mais nous ne voulons pas que la position de ceux-ci se déplace avec la caméra si la caméra change de position. Mais au contraire, nous voulions qu'ils occupent une position plus globale dans notre jeu. Donc, nous pouvons nous assurer, même si c'est un enfant qu'il ne va pas hériter de la position en cliquant avec le bouton droit de la souris, Ajouter un nœud enfant, puis en utilisant le nœud comme base. Pour que je puisse appeler ça bornes. Et puis à l'intérieur de ce nœud de limites va créer la position mardi. Ce que vous allez maintenant avoir une position totalement séparée de la caméra de suivi. Donc avec la position 2D ici, je vais appeler ça en haut à gauche. Je vais au commandement D, dupliquez-le, et on appellera ça en bas. droite. Maintenant, nous allons juste définir une position par défaut afin que nous sachions qu'il n'est pas assis là à l'origine. Je vais sélectionner le haut à gauche tenir sortant, et déplacer le haut à gauche vers la droite ici. Et je ferai la même chose avec en bas à droite. Sélectionnez-le, maintenez la touche Alt enfoncée et déplacez-le vers la droite. Maintenant dans le script, lorsque les charges de script vont définir le haut, laissez définir le médecin gauche et supérieur ici, et les positions bas et droite de la caméra en utilisant cette position. Alors prenons l'appareil photo, faites un clic droit dessus, ajoutez un script. Bien sûr, nous appellerons cette caméra suivre, enregistrez-le dans le dossier de l'appareil photo. Maintenant, nous allons avoir besoin sur déjà var ou en haut à gauche, lié, ou juste en haut à gauche ou autre. Et définissons cela égal au signe dollar en haut à gauche. Maintenant, notez, lorsque vous avez des enfants imbriqués, vous avez besoin du chemin complet. Donc nous allons avoir besoin de limites slash en haut à gauche, mais Godot sait déjà ce que nous allons faire là-bas. Il est donc assez facile d'avoir la saisie semi-automatique. Donc, faisons var en bas à droite égale les limites du signe dollar, en bas à droite. Donc maintenant, dans le funk prêt, nous pouvons prendre les limites. Faisons self.view limites. Ok, je suppose que vous devez définir chacun individuellement, pas comme une catégorie entière. Donc, nous allons faire des limites de soi. Commençons par le haut. Et cela va être une valeur. Alors obtenez la position, la position mondiale absolue du haut à gauche. Donc, ce sera une position globale en haut à gauche, soulignement
en haut à gauche point. Et puisque nous sommes en tête, nous regardons la valeur Y. Donc, point de position globale y. Maintenant, nous avons besoin de limite gauche égale en haut à gauche, point de position
globale x k. Et l'enregistrement ne devrait pas avoir d'erreurs actuellement. Et maintenant, nous faisons la même chose avec le bas à droite. Donc ça va être égal au fond, non ? position globale point x, parce que droite va à gauche et à droite, qui est x. donc point auto inférieur droit égal en bas à droite, point de position
locale y, et ce n'est pas en bas ici, c'est Limites en bas. Et ici, il devrait être limité, non ? Donc maintenant que nous avons l'ensemble seulement besoin de faire est de s'assurer que la caméra est au niveau un et ensuite nous pouvons définir les limites. Donc en ce moment, il y a la caméra de suivi n'est pas correctement obtenir la scène, donc je vais juste ajouter une nouvelle caméra de suivi et je viens de le mettre juste ici. Supprimons l'ancien qui n'a pas le rebond. Et puis celui-ci, nous pouvons renommer suivre caméra, car il a le même chemin que le chemin à distance transforme le chemin que le genre de corrige lui-même. Et maintenant, nous avons une caméra avec ces bornes. Donc, ce que nous devons faire est de faire un clic droit sur suivre la caméra, choisir des enfants modifiables. Et maintenant, nous pouvons éditer les limites en haut à gauche et en bas à droite. Donc, les limites en haut à gauche, c'est le dire. Je ne sais pas quelque part ici pour l'instant. Ce sera donc la limite supérieure et la plus à gauche pour notre appareil photo. Et puis ici, d'abord, cachons le jeu sur l'écran. Mais nous allons prendre le bas à droite et nous allons le déplacer
vers ou juste le mettre à juste autour de là. Il pourrait être utile d'activer une grille de pixels pour maintenant si nous le voulons. Maintenant, pour montrer que ces limites sont séparées de l'appareil photo en termes de position, sélectionnons l'appareil photo, maintenez Alt enfoncé et déplacez-le. Donc, vous voyez même si nous bougeons qui suivent la caméra, les limites ne bougent pas leur position, ce qui est, nous avons mis en place ce noeud de bornes. Donc maintenant, pour obtenir nos limites parfaites, nous pourrions vouloir mettre en place une grille de pixels. Peut-être que nous voulons que la coupure inférieure de l'écran soit
juste là pour qu'on ne puisse rien voir en dessous de ça. Allons donc activer l'accrochage de la grille et la ligase de capture intelligente. Et maintenant, tirons ça là où il s'alignera ici sur la grille. Donc je vais tirer ça juste là. Et on peut vérifier la transformation ici. On peut voir que c'est un peu un multiple de deux. Donc je pense que ça ne va pas marcher assez bien. On pourra toujours l'ajuster plus tard. Alors maintenant, nous allons nous assurer que je suis caméra fonctionne réellement ou plan de la hanche. Ok, Maintenant, notez, peu importe à quel point le personnage se déplace vers la gauche, nous ne pouvons pas aller plus loin que cette limite gauche et la limite supérieure aussi bien. Donc vous pouvez voir qu'on arrive en haut de l'écran. Donc avoir des contraintes comme celle-ci signifie que nous n'avons pas à simplement les identifier. Donc avoir des contraintes comme celle-ci signifie que nous n'avons pas à concevoir un niveau sans fin. Alors voyons quand nous tomberons du bord ici, eh bien, notre personnage est parti. Techniquement, il est toujours capable de bouger. Vous pouvez voir qu'on n'a pas joué dessus ou quoi que ce soit. Ce sera le prochain. Nous devons créer une sorte de zone morte où nous terminons le jeu pour notre personnage. Réactivez également la visibilité
du jeu sur l'écran si vous voulez qu'il soit toujours en mesure de fonctionner.
29. Zone de mort et plus encore sur des signes: Ensuite, nous devons créer une zone qui fondamentalement quand le joueur entre, nous obtenons un jeu sur le joueur mourir est citation unquote, quoi que vous vouliez l'appeler. Donc cette zone sera juste en dessous de nos limites. Donc, le personnage s'éteint de l'écran, descendant sous l'écran. Et pendant que vous obtenez le GameOver, assez plate-forme standard de choses. Commençons donc par créer une telle zone. Je vais faire un clic droit sur notre niveau. Ajoutons une note enfant. Il y aura une zone 2D. Et on peut appeler notre zone 2D comme on veut. Et peut-être la zone morte. Je pense que je vais le prendre et l'appeler en bas de l'écran. Et maintenant, nous devons définir la zone pour cela. Donc, je vais cliquer avec le bouton droit de la souris Ajouter un nœud enfant, et ajoutons une forme de rectangle, je pense que cela fonctionnerait parfaitement pour cela. Nous avons donc besoin d'une collision en forme de 2D. Et puis je vais prendre forme,
faire une forme de rectangle, et nous allons juste un peu étirer la taille de celui-ci pour qu'on puisse dire quelque chose comme ça. Maintenant, nous avons juste besoin de le déplacer dans une position où il est sur le bord droit de l'écran. Alors faisons-le glisser juste là. Je pense que c'est à propos de ce qu'il faut. On est juste un peu précis. Peu importe où il est à gauche et à droite, puisque nous allons juste l'avoir au moins aussi grand que la taille du niveau. Donc l'avoir comme ça, ok,
ça doit juste être juste là sous le bas de ce qu'on peut voir visiblement. Donc maintenant, je peux ajouter un script à cela. Donc, en fait, faisons une scène séparée pour l'instant. Donc, je vais cliquer avec le bouton droit de la souris et nous allons sauver les branches est vu. Donc, nous pourrions mettre cela dans des cartes ou peut-être un autre dossier pour quelque chose comme les
zones sont des zones spéciales que nous utilisons à travers le jeu pourrait être correct. Donc, sauvegardons et ils vont cliquer dessus avec le bouton droit de la souris et attacher un script. Donc on peut laisser ça en bas de la capture d'écran, GED. Ou vous voudrez peut-être l'appeler jeu sur les zones car il peut s' différentes zones du jeu autres que
le bas de l'écran où vous souhaitez déclencher un jeu immédiat. Pour l'instant, on peut juste l'appeler comme ça juste pour qu'il corresponde à notre nom de scène. Je pense que c'est le plus simple. Alors créons ça. Et maintenant, nous allons juste nous débarrasser de ce code supplémentaire dont nous n'avons pas besoin. Donc, comme nous l'avons fait quelques fois auparavant, si nous prenons une zone à D aller à l'inspecteur, alors nous avons la possibilité de choisir s'il surveille et surveille terriblement et de définir les couches que nous allons entrer en collision ou vérifier. Donc, nous pouvons juste éteindre le bol du moniteur parce que rien ne va vraiment avoir besoin de vérifier cela. Donc à moins que vous ne vouliez le faire dans l'autre sens avec le joueur vérifie la zone. Mais je pense en quelque sorte le séparer avec les zones, dire au joueur quand il entre et quelque chose devrait arriver, mais le joueur se rend compte que plutôt que le joueur constamment vérifier pour différentes zones. Je pense que le briser de cette façon, c'est juste un peu plus logique pour moi. Donc, je vais éteindre les problèmes de moniteur. En tant que tel, nous n'avons pas besoin d'une couche ici pour la collision, mais nous devons vérifier la couche de joueur. Donc, prenons le masque et définissez-le sur le quatrième bit pour le
joueur ou partout où vous l'avez configuré et vos paramètres 2D de physique. Donc, ce bas de l'écran, nous serons en
mesure de ramasser quand un joueur entre en bas de l'écran. Donc, nous pouvons aller à la note, nous pouvons faire la forme du corps entré, et nous pouvons simplement créer une méthode de récepteur pour cela à l'intérieur du script du bas de l'écran. Alors ajoutons ça. Donc, sélectionnons le bas de l'écran ici, en connectant de l'objet à lui-même. Donc, pour notre corps quand il entre, il devrait être un joueur. Donc, il devrait avoir toutes les fonctionnalités qu'un joueur a. Si ce n'est pas le cas, nous aimerions qu'une erreur soit lancée afin que nous puissions comprendre comment quelque chose est entré et a été récupéré sans être réellement un joueur. Donc, nous pouvons juste prendre notre corps et exécuter fonction
que nous attendons du corps qu'il ait sur cet objet. Certains. Donc peut-être qu'on peut juste l'appeler « body dot die » ou quelque chose comme ça. Et maintenant, nous allons dans le joueur et nous avons juste besoin de créer cette fonction. Alors descendons ici vers le bas. Je le ferais, je le mettrai ici, fonction dy. Et pour cela, nous allons certainement vouloir déclencher la surestimation du jeu. Donc, nous allons vouloir émettre le signal comme si notre santé tombait à 0. Alors émettons le signal, posons votre mort, et passons-nous en tant qu'objet joueur à ce gestionnaire de jeu. Ou plutôt, nous ne le transmettons pas directement au gestionnaire de jeu. Mais si vous vous souvenez, dans le gestionnaire de jeu, nous avons eu la connexion ici établie entre le gestionnaire de jeu chaque fois qu'un joueur charge dans le jeu à ce signal de joueur. Donc, ce n'est pas le dire directement au gestionnaire de jeu, mais plutôt il émet le signal pour que tout ce qui connecté à ce signal puisse répondre à la mort du joueur. Ce qui signifie que ça pourrait certainement être d'autres objets. Ou selon la façon dont nos codes menacent, le gestionnaire de jeu peut ne pas nécessairement répondre à cette connexion, mais il le fait comme rouge. Donc l'autre chose, bien sûr, est à Q3. Maintenant, si vous aviez une animation pour le personnage mourant, ce serait un endroit idéal pour passer dans cet état, créer un état totalement séparé pour cela. Exécutez l'animation. Lorsque l'animation est terminée, alors vous q3. Et ainsi de faire la file d'attente pour vous immédiatement. Mais nous n'avons pas cette animation, donc nous allons simplement faire avec du simple Q3 et faire avancer les choses. Donc je pense que ce sont en fait
les deux choses dont nous avons vraiment besoin là-bas. Donc, tant qu'on n'a pas d'erreurs, on pourrait tout avoir bien maintenant. Donc, testons le jeu et voyons si cela fonctionne. Donc, nous pouvons toujours suivre, peut se déplacer vers le bord, mais nous ne pouvons plus voir en bas le bas de l'écran plus. Alors nous allons juste sauter là-bas et voir ce qui se passe. On dirait qu'on a un match immédiat. Évidemment, c'est un peu plus amusant si vous avez une animation, faites une grosse affaire avec, euh,
peut-être de la musique, ce genre de choses. Mais c'est au moins une façon aussi simple de le faire. Maintenant, vous remarquez une autre chose qui est qu'avec notre jeu sur l'écran ici, ce n'est pas 0% transparent. Vous pouvez en fait voir un peu de l'arrière-plan là-bas, ce qui n'est pas vraiment trop mauvais. Je veux dire, peut-être que je ne veux pas que ce fond soit transparent à 100 %, mais en tant que rétine, ce n'est pas censé le faire. Alors jetons rapidement un coup d'oeil à ce jeu sur l'écran. Et vous savez quelle est la raison. C' est le dans cette dernière image où la minuterie est arrêtée, alors je pense que la raison en est dans cette dernière image, si le temps a été effectivement arrêté. Il ne va pas faire la mise à jour finale ici. Voyons s'il y a un moyen de mettre à jour cela. Donc, si nous sautons dans le jeu sur l'écran, nous pouvons probablement créer une méthode de récepteur avec la minuterie. Alors allons dans le noeud. Voyons le délai d'expiration émis lorsque le minuteur atteint 0. Oui, parfait. Ok, alors connectons ça dans le jeu sur script. Et maintenant, nous avons ce petit peu ici. Donc, tout ce que nous devons faire est de définir la couleur de modulation de l'écran et de transformer cette valeur finale en une. Alors, voilà. Plus de pratique libre avec les connexions de signal et vous pouvez voir comment ils deviennent assez utiles et assez faciles à utiliser quand ils deviennent une sorte d'intuitif.
30. Déposer des plateformes et Drop de joueurs: Donc, une des choses qui est assis autour du jeu depuis le début, mais nous n'avons pas vraiment fait quoi que ce soit avec ce sont ces plateformes. Donc, je vraiment plate-forme standard et mécanicien est la capacité de tomber vers le bas. Donc, une plate-forme et un mécanicien vraiment standard est d'être au-dessus d'une plate-forme qui est alors comme ça. Et pour être en mesure de descendre en dessous, aussi, pour être en mesure de réviser à travers elle de sauter de bas en bas. Donc, comme les choses sont en ce moment, si on saute à cette plate-forme d'en bas, on va juste cogner notre chapeau sur la plate-forme, peu près comme cellule. Donc ce n'est pas ce qu'on cherche. En outre, nous avons vu que nous avons réussi à jouer très rapidement. Ramenons cette santé à trois, juste pour que nous n'obtenions pas accidentellement un jeu à partir de tests vraiment simples comme ça. Et maintenant, nous devons mettre en place la carte de tuiles de sorte que lorsque nous créons ces tuiles, ils aient une collision unidirectionnelle afin que nous puissions passer par le bas. Donc, si nous cliquons sur la carte de tuiles et que nous allons à notre ensemble de tuiles ici, nous pouvons cliquer sur nos tuiles de terrain. Allons zoomer un peu. Et regardons ces tuiles qui devraient avoir la collision à sens unique, qui sont ici sur la droite. Donc, si nous regardons l'inspecteur maintenant, nous pouvons voir une collision sélectionnée dans un sens. Donc nous avons juste besoin de vérifier ça pour toutes ces neuf tuiles et toutes les autres tuiles que nous aimerions pouvoir passer par le dessous. Alors faisons tout ça. Maintenant, allons de l'avant et frappons le jeu. Et on peut essayer de sauter à travers ça. Nous pouvons voir que nous sommes capables de sauter à travers le sol, mais quand nous sommes en haut, nous ne passons pas à travers lui. Donc, essayons juste cela un peu plus et semble fondamentalement travailler à travers. Donc, pour que notre personnage passe à travers le bas, nous devons mettre en place une sorte de fonction de dépôt. Donc, dans ce jeu, comment je vais le mettre en place, c'est que quand vous appuyez deux fois, ce que vous êtes vers le bas touche est pour nous en ce moment c'est S. Ensuite, il va déposer le personnage en dessous de la plate-forme. Nous ne voudrions pas simplement tomber automatiquement à travers la plate-forme parce que alors ce serait fondamentalement comme une tuile sans collision. Mais nous voulons être en mesure de s'asseoir dessus ainsi que de tomber à travers elle. Donc, comment nous pouvons mettre en place une fonction de dépôt serait avec un minuteur de chute. Alors allons dans le joueur et créons une autre minuterie. La raison de ce minuteur est que nous voulons vérifier si le bas a été appuyé deux fois dans un court laps de temps. Et si oui, alors vous avez sous la fonction de dépôt. Donc, je vais faire un clic droit sur le lecteur à un nœud enfant et nous allons ajouter dans la minuterie. Alors appelons ce minuteur, interrompre le minuteur. Et je vais régler le temps d'attente à 0,2 seconde. Cela doit être au moins la durée d'une ou deux images d'animation. Donc, je pense que point à fonctionne assez bien pour moi plus tôt. Allons dans le script du joueur maintenant. Donc, vous pouvez choisir où vous voulez le mettre. Je pensais le mettre dans l'entrée du joueur, mais c'est plus précisément juste pour obtenir le mouvement gauche-droite, haut en bas. Alors je suppose que je vais le mettre juste en dessous. Donc, ce que nous allons faire, c'est vérifier si le bouton bas est enfoncé. Donc input.txt, et puis nous verrons l'action juste pressée. Donc c'est celui qu'on veut. Ensuite, nous devons choisir l'action vers le bas. Et si cela vient d'être pressé, alors nous devons voir si la minuterie est en cours d'exécution ou non. Donc, si la minuterie est déjà en marche, cela signifie
que nous avons juste appuyé précédemment, donc nous devrions tomber. Sinon, nous devrions démarrer la minuterie. Donc, si, disons que la minuterie de chute est arrêtée. Donc, comme fondamentalement comme tout autre minuteur, mais nous devons le déclarer ici sur le minuteur var Schwab
prêt est égal signe dollar drop minuteur. Donc, si c'est arrêté, alors on veut démarrer la minuterie. Alors laissez tomber la minuterie. Sinon, la minuterie est en cours d'exécution. Donc, nous voulons exécuter une fonction de dépôt sur le joueur qui va créer une seconde ici. Maintenant, notez que nous ne voulons pas que ce minuteur bouclera. Nous voulons qu'il fonctionne seulement lorsque nous le
démarrons spécifiquement jusqu'à la durée de cette période abaissée. Cliquez sur la minuterie de dépôt, puis assurez-vous qu'une prise de vue est cochée. C' est important. Donc maintenant, nous avons juste besoin de créer une fonction de dépôt. Donc je vais le mettre un peu ici avec les autres fonctions de mouvement, saut, balle, saut. Et ensuite, nous allons faire tomber la fonction. Ok, Donc pour que notre personnage
passe à travers la plate-forme quand il y a un collisionneur, il faut juste ajuster la position de notre personnage et nous pouvons le faire un seul pixel. Donc, si nous prenons un médecin point y et y ajoutons un,
alors cela se déplacera à travers le collisionneur sur ces plates-formes et notre personnage tombera à travers la plate-forme. Donc c'est aussi simple que ça. Allons de l'avant et frappons le jeu et le test où nous en sommes. On vient ici, on peut appuyer sur S deux fois. Nous tombons à travers la plate-forme et là-bas aussi, devrait tomber à travers celle-là. Et celui-là par ici. Donc n'importe quelle plate-forme que nous avons mise en place avec cette collision à sens unique devrait fonctionner pour nous. Et nous devrions aussi être en mesure de sauter directement à travers elle. Si vous trouvez qu'il est un peu difficile de passer à travers, parfois vous pouvez envisager de monter le temps d'attente ou 2s ou 0.25 secondes. Et si, pour une raison quelconque, vous trouvez que vous n'êtes pas en mesure de passer par l'une des plates-formes. Il suffit de vérifier le jeu de tuiles et de s'assurer que cette collision à sens unique est vérifiée. Donc, c'est juste pour une correction de bug. Mais une chose que j'ai remarqué est que pour notre personnage essayant de faire des dégâts sautés à un ennemi, parfois cette position globale n'est pas toujours cohérente. Donc je pense que nous pourrions être en mesure de se débarrasser de la vérification de collision et ensuite juste vérifier si la vitesse tombe et laisser comme ça. Alors allons de l'avant et frappons le jeu et voyons si cela fonctionnera pour nous afin que notre personnage puisse rebondir. Essayons à partir d'une position plus élevée. Nous pouvons faire ce qui suit tout en sautant. D' accord, et là aussi. Et puis nous allons juste retester ne devrait pas être capable d'infliger des dégâts par le bas. Et oui, c'est toujours le cas. Donc, je suppose que dans ce cas, plus simple est mieux. Donc je vais juste quitter cette position, vérifier hors de ça. Depuis parfois, la position de la boîte de frappe peut être un peu en dessous de la boîte blessée. Vous pourriez également avoir un plus grand ajustement en faveur du joueur. Mais même si vous faites cela, il peut encore y avoir des exemples extrêmes où les caractères frappent les boîtes. Pour une raison quelconque, dix pixels au-dessous de la boîte de blesser ennemis. Donc, cela semble juste être une solution beaucoup plus simple. D' accord ? Et maintenant, nous pouvons faire un dernier test, en nous assurant que toutes nos plateformes fonctionnent et que nous pouvons endommager correctement les ennemis. Donc, cela semble être beaucoup, beaucoup plus fluide et juste mieux en général. Donc, ce sera à peu près tout pour cette vidéo rapide.
31. Transitions de niveau et création de niveaux 1 et 2: Dans cette vidéo suivante, j'aimerais créer un niveau 1, créer un niveau 2, puis créer un moyen pour nous de passer entre les deux. Donc, comment vous concevez votre niveau dépend à peu près de vous. Nous avons déjà créé tous les outils pour cela. Donc, si vous voulez ajouter des tuiles et des plates-formes supplémentaires, nous pouvons aller dans la carte de tuiles. Et bien sûr, créer des porcs en colère supplémentaires va juste être une question de les dupliquer ou de faire glisser la scène de notre système de fichiers et de créer de nouveaux waypoints pour qu'ils passent entre les deux. Donc, tout d'abord, comme une astuce que vous pouvez utiliser, vous pouvez utiliser la fonction de sélection lorsque vous avez sélectionné la carte de tuiles. Et nous pouvons simplement sélectionner ces tuiles. Je vais contrôler X eux ou Commande X sur Mac. Et vous pouvez voir que vous pouvez le coller. Mais vraiment, je vais juste me débarrasser de tout ça. Revenons donc à l'outil crayon. Je vais aller de l'avant et dessiner ce dont j'ai besoin. Bon, maintenant je vais aller de l'avant et créer le niveau 2. Je pense que le moyen le plus rapide de commencer, ce sera de dupliquer le niveau 1. Donc, je vais aller dans mon dossier de cartes, cliquez avec le bouton droit de la souris sur le niveau 1, dupliquer cela, et juste appeler le niveau 2. Maintenant, nous pouvons l'ouvrir et évidemment je vais renommer le nœud racine au niveau 2. Donc, pour qu'il soit évident que c'est un niveau différent, la première chose que je vais changer, ce sera l'arrière-plan. Alors passons à, je suppose que nous allons voir le fond de couleur violette. Donc maintenant les niveaux un et deux sont distincts les uns des autres. Permettez-moi d'aller de l'avant et de créer un
scénario de niveau 2 , en gros d'ajouter et de créer
un laboratoire, un, un niveau 2, et nous avons un niveau 3, mais c'est vraiment dit que le niveau aussi, vous pouvez passer dans niveau 3. Alors maintenant, allons de l'avant et créons notre chemin pour que le personnage passe du niveau 1 au niveau 2. Donc, je vais utiliser la zone à D pour que le commutateur
déclenche cet événement où nous avons sauté les niveaux. Donc, je vais faire un clic droit sur le niveau 1, ajouter un nœud enfant. Nous voulons la zone 2D en bas. Je vais renommer ça et on peut l'appeler bouger. Nous ne les appelons peut-être pas nécessairement niveaux, donc nous voulons être un peu générique ici, plus le dossier s'appelle maps. Donc avec Matt déménagement, je vais sauver ça comme une nouvelle scène. Cliquez avec le bouton droit sur Enregistrer les branches Et mettons-le dans les zones. Puisque c'est une zone qui déclenche une sorte d'événement, un peu comme le bas de l'écran GameOver four. Alors gardons ça ici et plongons dans la scène. Donc, pour notre zone de déplacement de carte, nous allons avoir besoin d'un déclenchement d'une forme de collision. Alors faisons une collision en forme de 2D. Je vais faire la valeur par défaut pour cela une forme de rectangle. Et puis nous pouvons le voir dans notre premier niveau. Donc, je vais sélectionner le mouvement du tapis et maintenons Alt et le déplacer ici. Donc clairement, ce ne sera pas une forme de collision assez grande pour vraiment justifier être la fin du niveau. Donc on va probablement agrandir ça. Mais une autre chose que nous voulons faire est de donner aux joueurs un moyen d' indiquer que c'est la fin
du niveau afin qu'ils sachent quel but ils tournent. Donc, à l'intérieur de l'art pour ce jeu, nous pouvons vérifier notre aventure pixel un et descendre à des objets et vérifier le point. Et nous pouvons trouver un drapeau assez cool que nous pouvons utiliser pour la fin de ce niveau. Donc je vais aller dans la scène de mouvement de carte, et ajoutons un sprite ici. Et donc si je fais glisser ce point de contrôle sur l'écran, on peut voir qu'il y a un tas d'images d'animation pour cela. Donc, je vais appuyer sur Control Z pour annuler l'ajout de ce spray. Et un noeud parfait pour nous serait un noeud de sprite animé. Alors je vais chercher ça. Et puis nous allons prendre ce drapeau inactif et le mettre dans des cadres. Eh bien, d'abord nous devons créer un nouveau cadre de sprite. Cliquez donc sur les cadres, vider les nouveaux cadres sprite. Et maintenant, ajoutons à cette animation de drapeau inactif. Donc, je vais renommer l'annonce d'animation et je vais cliquer ici, ajouter des images de feuille de sprite. Donc ça va aux objets, aux points de contrôle, au point de contrôle noir, au ralenti. Ok, et prenons tous ces cadres. On dirait qu'il y en a 10. Donc nous voulons dix horizontaux, un vertical. Puis sélectionnez Effacer toutes les images, ajoutez-les dans. Et puis assurez-vous que cette animation est en cours de lecture et de mettre le FPS à 20. Maintenant, nous allons aussi vouloir déplacer cet objet sprite animé vers le haut. Donc je vais maintenir Alt et le déplacer vers le haut. Avoir accrochage peut aider ici. Ensuite, prenons aussi la forme de collision et remontons-la aussi. Et si vous en avez besoin à n'importe quel moment, vous pouvez également désactiver la capture. Ce n'est pas une exigence. Et nous voulons redimensionner la forme de collision pour qu'elle soit un peu plus grande que notre drapeau. Donc ce sera une bonne fin du point de niveau pour notre personnage à atteindre. Maintenant, nous pouvons regarder le niveau 1 et nous pouvons positionner cet objectif de déplacement de carte. Je suppose que je vais le mettre juste là. Maintenant, si nous revenons dans notre mouvement de carte, nous pouvons définir les couches de collision
dont nous avons besoin, ce qui sera essentiellement à ramasser lorsque le joueur y entrera. Collision ouverte sur la droite, comme nous l'avons fait pour toutes les autres zones. Désactivez le masque du monde et la couche du monde, puis mettez le joueur comme masque. Et vous pouvez également désactiver mono terrible parce que ce sera, parce que ce sera un événement à sens unique. Donc nous allons seulement vérifier le joueur. Ok, donc maintenant nous avons juste besoin d'ajouter un script simple à notre mouvement de carte. Donc, je vais joindre un script qui est créé. Et dans ce script, nous allons en avoir besoin d'un, recevoir une méthode qui va provenir de la zone 2D. Vous savez probablement où je vais avec cette forme de corps entrée sur la section de noeud à droite. La forme du corps saisie se connecte au script de déplacement du tapis. Et ici, ce ne devrait être que les joueurs qui entrent. Lorsque le joueur entre dans cette zone, nous voulons changer de niveau. Donc nous pouvons faire voir point changer Scène 2. Et nous allons avoir besoin d'une scène remplie ici. Donc, comment nous pouvons définir notre scène emballée pour le script est de créer une variable d'exportation. Donc, nous allons exporter un pack vu variable. Et on peut dire scène de destination. Et maintenant, bien sûr, nous devons utiliser cette variable comme paramètre. Alors, collez ça là-bas. Maintenant, si nous cliquons sur notre carte déplacer, nous devrions être en mesure de voir que nous pouvons définir une destination vue ici. Donc, au niveau 1, je vais prendre notre tapis et nous allons définir la destination considérée comme le niveau 2. Donc, vous pouvez cliquer ici un lotus voir. Et bien sûr, on va passer au niveau 2 de Maps. Vous pouvez y voir un petit aperçu pour notre scène. Allons au niveau 2 et ajoutons une scène de déplacement de carte. On va le mettre ici pour la fin de ce niveau. Assurez-vous que ce n'est pas sur la carte des tuiles, bien sûr. Mais en termes de hiérarchie, vous pouvez le vouloir au-dessus du joueur afin qu'il apparaisse derrière le jeu plutôt que devant lui. Alors bougeons ça. Ok, je vais arrêter de claquer ici pour qu'on puisse le faire correctement. Ça a l'air juste. Prenons la destination vue ici et faisons le niveau trois, cartes niveau 3. Ok, maintenant on peut tester notre jeu ici un peu. Je vais jouer. Alors je vais juste courir à travers ce niveau très vite. Ok, je dois passer ce cochon sans subir trop de dégâts. Juste un peu l'ignorer et faire la fonction déroulante pour descendre ici, j'ai demandé cela intentionnellement et juste un peu d'un saut précis là-bas. Allons au deuxième niveau. Ok, et il a rencontré ce problème plus tôt. Il s'avère donc que vérifier si un objet n'est pas nul n'est pas suffisant ici. Donc ce que vous voulez vraiment utiliser ici, et c'est de retour dans le script de gestionnaire de jeu que nous avons mis en place. Est-ce que l'instance est-elle valide ? Et bien sûr, cela va être un joueur actif. Donc, si vous avez créé un objet dans votre jeu et que vous voulez vous
assurer qu'il est toujours là avant d'exécuter quelque chose. C' est le bon code. Si vous cochez, s'il n'est pas égal à null, cela peut finir par fonctionner à la place, qui ne fonctionnera évidemment pas lorsque les joueurs actifs ont déjà été supprimés de la scène. Donc maintenant, nous pouvons aller de l'avant et relancer le niveau et il devrait fonctionner cette fois. Alors rebondissons sur ce type. Notez l'attaque de dégâts. C' est un peu délicat ici en termes de conception de jeu. C' est peut-être un peu injuste, mais on teste toujours juste le montant. Alors passons à ce deuxième niveau, puis boum, nous entrons au niveau 2. Bien sûr, nous pourrions vouloir une transition d'une sorte, un peu comme nous l'avons fait avec le jeu sur écran. Ici, on doit sauter, ok, il
faut un cochon en colère pour s'occuper d'aller sauter ici. Et ici, c'est un peu délicat parce que nous
devons rester loin du bas de l'écran. Donc ça va nécessiter un peu de faire un double saut. Et puis on doit continuer à sauter autour de K. Ça semble être un peu un bug là-bas avec cette collision à sens unique. Je pense que c'est la mauvaise direction. Donc je vais devoir vérifier ça parce que comme vous pouvez le voir, ça peut tomber par là, mais je ne peux pas revenir en arrière. Et puis pour le reste du niveau 0, pourquoi dois-je réparer le rebond de la caméra ? Mais vous pouvez voir que je suis allé au niveau 3 là-bas et encore une fois, la collision à sens unique est la mauvaise direction là-bas. Alors réparons les bandes de caméra et le niveau 2, je vais verrouiller la carte de tuiles pour que je ne gâche pas accidentellement avec ça. Prenons le haut à gauche et déplacez-le ici. En fait, il devrait être aligné avec le côté gauche. Donc c'est notre liaison. Et puis en bas. Et puis en bas à droite en bas à droite, ça serait là, je pense. Ok, donc voici un problème lorsque vous construisez vos cartes de tuiles. Vous devez vous assurer de ne pas faire pivoter accidentellement vos tuiles. Donc, vous pouvez voir ici que ces plates-formes sont évidemment en bas. Donc, si vous appuyez sur un S et éventuellement sur d'autres touches comme Z et X sur votre clavier, vous pouvez réellement faire pivoter les tuiles que vous placez. Donc, si vous voulez une tuile à sens unique qui va aller beaucoup fondamentalement de bas en bas, vous pouvez sauter, alors vous voulez vous assurer que cela fait face au sommet comme ceci. Mais si vous appuyez accidentellement sur la touche Z, vous allez retourner le pourquoi vers le bas. Et puis ça va inverser la direction de vos collisions à sens unique. De même, ils vont venir ici et réparer celui-ci parce qu'il ne devrait pas être sur le dessus, mais retourné vers le bas avec z, mais il devrait plutôt être juste face au dessus. Donc, cela devrait empêcher le personnage de tomber accidentellement à travers le sol ici sans réellement faire le mouvement de chute. Ce serait plutôt ennuyeux. Déplaçons un peu ce drapeau vers le bas. Et maintenant, cette plate-forme devrait fonctionner comme prévu. Et de même, au niveau 3, c'est un peu stupide de laisser tomber le joueur dans l'océan ici. Alors réparons ça aussi. Alors voyons le titre auto. Mettons cette plate-forme et retirons celle qui est sur le dessus. Alors on y va. Cela devrait résoudre ce problème et nous apprenons même quelque chose dans le processus. Donc maintenant, nous pouvons juste aller de l'avant et jouer tester le jeu une fois de plus. Maintenant que nous avons fixé les limites de la caméra et que nous avons fixé les directions de la plate-forme. D' accord. Donc nous avons eu notre là-haut, n'avons pas pris de dégâts en recevant ainsi. Et nous arrivons à notre niveau 2. Ok, ils ont pris des dégâts, ils vont faire le saut délicat. Et d'accord, on y va. Maintenant, cela fonctionne correctement. Et c'est juste finir le jeu et l'os. D' accord. Tout fonctionne bien.
32. UI: Ok, nous allons maintenant créer une interface utilisateur de santé simple afin que nous puissions montrer la santé du joueur à tout moment donné. Donc, je vais descendre à la couche de toile. Donc, si nous voulons garder les choses simples, nous pouvons simplement ajouter un contrôle simple et ensuite ce contrôle sera la barre de santé. Donc, en dessous de la barre de santé, nous allons avoir besoin d'ajouter un rect de texture. Donc, je vais cliquer avec le bouton droit ici sur la barre de santé à un nœud enfant, puis choisir la texture, correct. Et puis pour la texture à l'intérieur de cette texture, je vais utiliser l'indicateur de santé kiwi. Et donc j'ai pris cette image de
ce kiwi de l'aventure pixel. Vous pouvez voir cette image ici. Il suffit d'extraire le premier cadre et il est de 18 x 18 pixels maintenant. Donc j'apporte ça dans la texture et ça va apparaître là. Et si nous changeons le mode d'étirement en tuile, nous pouvons continuer à répéter cela autant que nous en avons besoin. Donc, si nous contrôlons la taille de notre texture, un peu comme ça. Mais dans le code, alors nous pouvons montrer
combien de points de santé le joueur a laissé à un moment donné. Débarrassez-vous de cette texture, puis appuyez sur Play et assurez-vous qu'il apparaît là en haut à gauche. Peut-être qu'on veut un peu de marge aussi. Donc je peux prendre la barre de santé et on peut lui donner une marge supérieure et gauche de cinq. Ok, ça semble un peu mieux maintenant. Donc maintenant, la barre de santé va avoir besoin de savoir combien de points de santé le joueur a à un moment donné. Donc, il sait combien de mots-clés à montrer. Un est égal à un kiwi. Je vais donc ajouter un script à notre barre de santé. Cliquez avec le bouton droit sur le script joint à la barre d'intégrité Et voyons, ça ne sera pas sur les cartes. Cela devrait aller sous le dossier de l'interface utilisateur. Donc, barre de santé, qui est ouvert et créer. Donc, dans notre barre de santé lorsque le script se charge, nous pouvons essayer de trouver le joueur qui devrait être dans le gestionnaire de jeu. Donc je vais le mettre dans une lecture funk. Et nous allons fondamentalement définir le joueur actif égal au joueur actif du gestionnaire de jeu. Alors créons un joueur actif var. Et il est dû flare égale gestionnaire de jeu point joueur actif. Et ce n'est pas le cas, créons un signal pour notre joueur, mais au lieu de le mettre dans le joueur, mettons-le en point g, d. Donc n'importe quel personnage peut émettre ce signal, mais nous n'avons pas nécessairement besoin de se connecter à pour tous les objets comme les cochons en colère. Alors créons un signal de caractère. Et cela va être changé. Et on va passer une nouvelle santé ici. Donc, avant d'attribuer la valeur, la nouvelle santé à la variable de santé, nous pouvons voir si elles sont les mêmes. Et sinon, alors nous émettons santé changé parce que le nombre est différent maintenant. Donc, si le reste n'est pas égal à la valeur, alors nous émettrons la santé du signal a changé et passerons la valeur comme le nouveau total de santé que nous allons envoyer à tout ce qui est connecté à ce script. Donc maintenant, avec notre barre de santé, nous pouvons nous connecter à ce doc de couche active et adopter. Et nous voulons nous connecter à la santé a changé. L' objet récepteur est nous-mêmes que l'écorce de santé. Et nous allons créer un message sur la santé changée. De cette façon, en utilisant un signal plutôt que de vérifier la santé sur chaque image, C'est juste un peu plus efficace. Donc nous allons écrire func sur la santé a changé ici. Et cela va en fait prendre la nouvelle santé. Et donc faisons référence à notre texture rect. Donc ici, je vais faire sur prêt notre épave supplémentaire égale dollar signature texture érect. Et nous allons multiplier la largeur de cette texture en rack égale à la nouvelle fois de santé 18 pixels car c'est la largeur de l'image sprite. Assurez-vous donc que vous êtes un vecteur de texture est égal au nombre de sain que j'ai multiplié par la largeur de votre taille d'image. Alors faisons la texture effacée. Des points. Voyons voir, serait avec, ou nous pouvons effectivement cliquer dessus et juste vérifier. Donc, donc je suppose que c'est détruit point de taille de point x. Donc, nous allons trouver ce point de taille de point naufragé x. Et nous allons faire cela égal à la largeur de Sprite fois la nouvelle santé. Et on peut faire une variable ici pour pouvoir mettre le sprite avec l'inspecteur. Voyons donc, exploiter ENT ont raison, largeur est égale à 18, puisque c'est juste la valeur par défaut que j'utilise. Et on peut voir si ça marche vraiment. Alors je vais aller de l'avant et jouer à jouer. D' accord. On l'a vu là-bas. Voyons ce qui se passe quand il a subi des dégâts. Rien encore parce que j'ai oublié le trait de soulignement ici. C' est donc une méthode qui n'existe pas. Maintenant, ils ont le même nom. Alors sortons et jouons pour voir si on peut faire fonctionner ça. Ok, on prend les dégâts. Continuons. Invalide, index effacé sur la texture. Donc, il ressemble à ce que vous voulez réellement souligner la taille. Et puis nous pouvons définir la valeur x de cela. Donc la taille du vecteur est un vecteur deux et nous nous soucions seulement de la x. donc nous mettons cela là. Allons de l'avant et frappons le jeu et voyons si ça répare ça. Et oui. D' accord. Cela semblait fonctionner en gros. Oui. D' accord. Il nous reste une santé et puis, bien sûr, après cela, nous perdons le jeu, mais il ne se met pas à jour avec cette dernière santé. Donc, il semble qu'avec les paramètres par défaut, il ne peut pas réellement aller moins qu'une image de texture. Donc il y a probablement une poignée de façons de résoudre ce problème. Mais je pense que le moyen le plus rapide qui vient à l'esprit
serait juste de désactiver la texture en rack si la santé est 0. Donc, si la nouvelle santé est, disons inférieure ou égale à 0, alors nous allons juste prendre la texture dressée, visible et nous allons définir ça sur false. Sinon. Je suppose que si jamais nous frappons 0, mais alors pour une raison ou une plus élevée, ou juste dire que c'est la visibilité est égale à vrai. Alors maintenant, on peut frapper Play. Et voyons ce qui se passe. Ok, eh bien d'abord, nous avons réglé l'état de santé sur 2, donc il s'est étendu, il descend, et puis maintenant il est entièrement désactivé parce que l'état de santé est réglé sur 0. Et maintenant vu qu'au début de la partie, il n'en a montré qu'un. Il nous faut un peu plus de code. Donc, quand cela est configuré, nous devrions réellement définir la barre de santé pour être égale à la santé de départ du joueur. Donc, nous allons exécuter ça une fois aussi. Nous allons vouloir la santé du joueur,
donc faire de la santé des points de joueur actif. Et théoriquement, nous n'avons plus besoin de garder une référence à cela puisque nous utilisons vraiment le signal pour y répondre. Donc x2 bar joueur actif, le joueur se connecte. En fait, juste un joueur actif var connecté. Donc, nous obtenons le joueur actif, nous nous connectons à la couche active. Nous définissons la barre pour la santé du joueur actuel et chaque fois que le joueur subit des dégâts, nous répondons à cela. Ok, maintenant tout devrait bien fonctionner. Donc, au début de la partie, nous avons trois points de santé, donc non, ça s'est étendu à ça et nous subissons un dommage. Allons prendre un autre dommage. Et maintenant, eh bien, si nous perdons notre troisième santé et c'est la fin. Donc, c'est comme ça que nous avons mis en place la barre de santé. Assurez-vous simplement de l'enregistrer en tant que scène afin que vous puissiez la réutiliser dans votre jeu. Donc, je vais frapper, je vais le mettre dans scène Bardot de santé de l'
interface utilisateur et nous pouvons nous assurer qu'il est sur les niveaux futurs. Mais pour aller plus loin, je pense qu'une bonne façon de le faire serait de mettre en place une couche de toile de base que nous utilisons pour chaque jeu. Donc, je vais juste appeler cette interface utilisateur de jeu. Et créons une scène à partir de cette branche si sûre comme elle l'a vu, et ce sera notre objet parent de l'interface utilisateur du jeu. Donc on peut passer au niveau 2 maintenant. Et je vais couper ça. Et nous allons aussi le couper du niveau 3. Et puis nous allons juste mettre dans l'interface utilisateur du jeu vu. Si nous avons besoin d'ajouter quelque chose à tous les niveaux de notre jeu maintenant, tout sera dans une seule interface utilisateur. Et si vous avez besoin de voir l'un des enfants à tout moment, vous pouvez cliquer avec le bouton droit de la souris sur votre interface utilisateur de jeu et les enfants modifiables UX, et vous pouvez toujours voir la barre de santé et le jeu sur l'écran. Assurez-vous donc que vos niveaux sont enregistrés. Et si vous appuyez sur le jeu, j'espère que cela fonctionne toujours et tout. Alors nous allons frapper. Ok, et en fait, passons au niveau suivant. Niveau VSA, notre réinitialisation de santé parce que c'est un nouveau joueur. Et bien, c'est essentiellement là. Maintenant, quand le niveau se termine et que nous ne prenons pas de dégâts pour causer réellement la défaite. Nous pourrions également ajouter à la suppression de cette barre de santé aussi. Donc, je pense que ce que nous pouvons faire avec notre Health Bar est juste de répondre à l'événement game over de notre manager de jeu. Puisque nous devons référencer le gestionnaire de jeu à l'inprêt de notre Health Bar. Quoi qu'il en soit, nous pourrions aussi bien faire référence ce signal et avoir un joueur sur la mort ou sur GameOver. Alors allons voir notre assistant. Et quand nous aurons le Game Manager, nous pouvons également nous connecter à cela. Donc, voyons un gestionnaire de jeu point connecter jeu sur, auto sur le jeu sur. Et mettez le trait de soulignement là pour une méthode de récepteur et nous allons créer ces méthodes de récepteur. Donc, fonction soulignement sur le jeu terminé. Et nous avons juste besoin de prendre la visibilité du vecteur de texture et de le définir sur false. Copions donc ce code, collez-le là-dedans. Et maintenant, si nous obtenons une partie pour une autre raison, alors le joueur qui subit des dégâts ,
comme par exemple, tombe du bord ici. Alors cela va montrer qu'il est invisible, qui est un peu ce que nous attendrions.
33. Configurer des abeilles: Donc, dans cette partie, qui peut être la dernière pour le parcours, nous allons construire un deuxième ennemi
, une activité plus amusante. Et l'ennemi que nous allons créer est un B qui vole avec un projectile, sera capable de réutiliser une partie du même code de cochon en colère, éventuellement en déplaçant une partie dans le script ennemi pour qu'il soit réutilisable. Et puis on y ajoutera des trucs supplémentaires. Évidemment projectile ou quelque chose que nous n'avons pas encore fait pour ce prototypes de jeu, nous devons
donc ajouter cela. Et donc tout comme le cochon en colère, les abeilles vont aussi se déplacer d'un point à l'autre, mais il sera capable de se déplacer verticalement aussi. Ils ne vont pas seulement aller à gauche et à droite, et ils ne répondront pas non plus à la position du joueur de la même manière que le cochon en colère le ferait là où le joueur entre dans cette zone, puis la cheville en colère se déplace plus vite. Ainsi, nous pouvons déplacer le code waypoint dans la classe ennemie pour les ennemis qui vont utiliser le waypoint. Et puis nous pouvons leur demander d'avoir chacun leur propre méthode de déplacement où ils
découvrent à quelle vitesse ils se déplacent et dans quelle direction. Allons-y et ouvrons le script Pig en colère. Donc, fondamentalement, nous allons tout prendre ici et le déplacer dans le script ennemi comme une fonction appelée waypoint blue. Alors allons de l'avant et écrivons ça ici et on passera Delta dedans. Alors maintenant, dans notre script ennemi, montons ici et nous pouvons écrire le waypoint de fonction, qui va prendre delta et coller ça là-dedans. Donc, quand nous faisons ça, nous pouvons voir que nous n'avons pas la position de waypoint, donc nous devons prendre ça du cochon en colère aussi. Donc le b ou les autres ennemis vont avoir tous ces trucs ici. Waypoint est arrivé distance pour les waypoints de commutation, un tableau de waypoints pour aller entre la position de point de cheminement de départ, index de cela, et probablement aussi face à droite aussi. Alors découpons ça dans le script ennemi. Et on peut en quelque sorte positionner ça ici. Aussi longtemps que l'ennemi l'aura,
ça éliminera tous les problèmes que nous avons pour le cochon en colère aussi. Donc, évidemment, nous avons une erreur où nous n'avons pas cette méthode d'index de waypoint défini, donc nous devons prendre cela de cochon en colère aussi. Donc, coupez et collez ça dans le script ennemi. Une autre erreur que nous avons est pour le déménagement spécifique de nos porcs. Donc, plutôt que tout cela et le script ennemi, nous allons créer une fonction que nous
pouvons implémenter sur chaque ennemi spécifique pour leur propre client. Et ensuite, on peut l'appeler « Get Move Velocity ». Et ça va prendre le delta et aussi la direction vers laquelle nous nous dirigeons. Donc, nous calculons cela en déterminant où va le point de cheminement. Donc, si nous faisons un mouvement de waypoint, nous allons vers ceux qui se dirigeaient vers ces waypoints. Donc maintenant, nous avons juste besoin de nous assurer que nous avons une fonction virtuelle ici. Alors, obtenez la vitesse de déplacement. Donc ça va prendre la direction Delta N. Et si nous exécutons ceci, nous allons vouloir imprimer une erreur car elle n'a pas été implémentée. Donc, vous pouvez simplement écrire un message d'erreur comme ça. Donc, l'idée est que lorsque le script est en cours d'exécution, il exécute cette version ennemie de la méthode, nous obtenons une erreur. Nous devrions l'implémenter dans le personnage de haut niveau, ce cochon en colère ou le B. Donc c'est juste nous dire, Hey, nous devons écrire plus de code pour que cette fonction puisse fonctionner correctement sur l'ennemi final. Et ça va retourner
la vitesse pour que nous puissions l'utiliser pour notre mouvement et notre glissement. Alors mettons juste notre vitesse égale à obtenir la vitesse déplacée. Ok, donc maintenant pour tout ce qu'on découpe qui devrait aller ici. On prend ça en cochon en colère. Alors allons dans le cochon en colère et implémentons cette fonction. Tellement souligné, bien. Déplacer pour la vitesse, la direction delta. Et puis il suffit de coller ce n. Et au lieu de régler la vitesse, nous allons retourner ça. Nous pouvons également prendre la vitesse var hors d'ici parce que nous n'en avons plus vraiment besoin dans le script pour le moment. Et assurez-vous juste que ce sont un onglet sur la gauche. Donc, pour l'autre bit de code, nous l'utilisions avant pour déterminer s'il devait se déplacer à gauche et à droite. Puisque nous passons dans la direction de l'avant dans cette fonction, nous allons le mettre à deux endroits différents. Alors reviens et asseyez-vous et le script ennemi, je vais coller ça pour que nous puissions l'utiliser pour vérifier s'il doit faire face à droite ou à gauche. Ensuite, enfin, nous devons obtenir cette vitesse retournée, la stocker dans une variable ici. Donc, la vitesse barrée est égale à obtenir la vitesse déplacée. On le transmet ici. Sprite animé. Nous allons le déplacer du cochon en colère dans notre classe ennemie, ainsi que dans l'arbre d'animation. À peu près tous les ennemis vont avoir besoin de ces deux. Alors, allons juste les coller là-dedans. D' accord, alors on devrait retourner dans le cochon en colère et s'
assurer que les erreurs sont prises en charge ici. Ici, nous pouvons voir un de vitesse y est ajouté à la gravité du jeu. Donc, le personnage a fondamentalement encore sa gravité. Donc, pour cette raison, ce que nous devrions vraiment faire ici est de définir la nouvelle vitesse égale à cette vitesse MOOC. Et puis avoir une variable ici à laquelle tous les types d'ennemis pourront accéder. Donc, si notre vitesse et ce sera un vecteur à, nous pourrions même l'initialiser à un vecteur à 0 par défaut. Et puis les mouvements glissent, je crois que retourne la vitesse. Donc, si nous avons des collisions. Devrait mettre à jour la vitesse pour nous aussi. Donc maintenant la vitesse est déclarée ici. Et si nous allons vérifier le cochon en colère et ici, alors cette vitesse y va utiliser la vitesse y de l'ennemi. Une autre façon de le faire, si vous pensez que c'est un peu moins salissant, est que nous pourrions passer la vitesse actuelle et en
tant que variable, puis l'utiliser dans le script et le retourner vers l'extérieur. Cela devrait fonctionner pour l'instant, donc je ne suis pas trop inquiet à ce sujet. Donc maintenant, ce que nous devrions vraiment faire est de nous assurer que la cheville en colère fonctionne comme avant. Même si tout ce qu'on a fait c'est de déplacer des trucs du cochon en colère dans le script ennemi. Alors allons de l'avant et frappons le jeu et testez ça. Ouais, on dirait que notre ennemi est toujours en mouvement. Ce qu'on peut faire, c'est prendre notre scène de cochons en colère, la
dupliquer et le système de fichiers et l'utiliser comme base pour notre B. Donc je vais venir ici où nous avons une scène de cochons en colère. Je vais faire un Alt D et dupliquer ça et on appellera ce B dot t SCN. Donc c'est notre être vu. Maintenant, on peut ouvrir cette scène. Et d'abord, je vais renommer le personnage pour être en haut. Ensuite, nous pouvons descendre chacun de ces et supprimer et ajouter ce dont nous avons besoin. Donc d'abord, nous n'avons pas besoin d'une zone de détection en colère dans le script. Donc je vais juste me débarrasser complètement de ça. Et si vous voyez des erreurs surgir ici, ça ne vous laisse pas voir l'inspecteur passer à une autre scène et revenir. Et maintenant ça devrait être pour qu'on puisse enlever la scène de détection en colère. Pour le sprite animé. Nous allons vouloir redéfinir ça pour les sprites de notre personnage B. Donc, je sais que le bébé a une animation à succès et animation
inactive dans une attaque il et supprimer ceux qui ne sont pas pertinents pour nous ici. Alors faisons-le juste celle-là. Et maintenant, nous pouvons ajouter N et attaquer. Et en s'assurant que c'est 20 FPS. L' animation Hit restera à 10 FPS chez les hommes et faire la même chose pour un coup et une attaque. Donc, nous allons supprimer toutes les images actuelles, aller à frapper cinq horizontales, une verticale, sélectionner tout, ajouter l'animation d'attaque chaque image. Donc, huit horizontales, une verticale, sélectionnez tout à, Ok, et il y a notre petite animation d'attaque qui joue leur prochaine dans l'arbre d'animation. Nous pouvons aussi le mettre en place pour notre nouveau personnage. Donc d'abord, il n'y a pas de variations de succès. Il y aura juste une animation Hit pour ce personnage, qu'on se débarrasse de tout ça. La prochaine ne sera pas une zone de détection de joueur. n'y a qu'une seule animation inactive que nous allons utiliser pour l'abeille qui vole autour. Donc nous n'avons pas besoin de ça non plus. Mais nous allons avoir besoin d'un coup de plus pour une attaque. Donc, cela ira avant le coup d'un coup, prendre des dégâts en étant touché a la priorité sur faire une attaque. Donc, un coup, et puis c'est l'attaque, grâce à la sortie alimente dans l'entrée pour cela. Et nous avons besoin de l'animation Hit pour entrer ici. Je vais en fait supprimer ça pendant une seconde. Nous devons mettre à jour notre lecteur d'animation. Donc, dans le lecteur d'animation, va renommer frapper un pour juste frapper. Ensuite, pour l'animation, assurez-vous qu'elle est sélectionnée comme HIT. Nous pouvons laisser l'animation Hit terminée parce que nous allons créer une version de cela pour notre B aussi. Frappez deux, on va juste supprimer ça. Et puis idole, je pense qu'on peut laisser celle-là tel quel. Assurez-vous juste que je serais toujours la bonne animation jouant sur le sprite d'animation et puis exécutez, nous supprimons cela et puis marchons. Nous pouvons soit supprimer cela, soit vous pouvez simplement le renommer pour attaquer. Donc je vais renommer ça en attaque. Et je sais que plus tard, ce sera un seul coup. Donc, je vais changer la durée à 0,4 et ne pas boucher 0,4 car il a huit images à 20 images par seconde. Et puis ici, nous pouvons ajouter une piste appelée piste de méthode sur le B. Mais nous n'avons pas créé la méthode, donc nous ne pouvons pas vraiment l'ajouter là-dedans encore. Donc notre oisiveté ressemble à ça. Notre HIT aura terminé l'animation en cours là-bas, puis l'attaque est par ici. Ok, Donc maintenant, de retour dans l'arbre d'animation pour les images uniques, assurez-vous qu'ils sont fondus et que le temps de fondu est 0. Nous voulons qu'ils jouent immédiatement après avoir entré ces animations. C'est important. Et puis pour le premier off, je vais changer l'animation par défaut pour les enfants inactifs. Lampe de poche sur l'écran tout le temps est assez ennuyeux. Donc, ici, nous allons faire un clic droit, ajouter une animation et nous allons frapper, connecter cela à la seule prise de vue. Et puis pour le seul tir ici, l'attaque, on veut l'animation de l'attaque. Donc attaque d'animation, connectez ça dans le seul coup. Et puis pour tous les autres cas, nous voulons juste qu'il fasse l'animation inactive. Alors connectez ça ici. Donc, c'est fondamentalement notre arbre de mélange d'animation le plus simple à ce jour. Assurez-vous juste d'avoir 21 coups de feu. Hit va avant l'attaque et que les deux ont le fondu dans, temps
de fondu out est défini sur 0. Je connecte ensuite les animations que vous avez besoin. Ok, Donc ce personnage va toujours avoir une
boîte de saut blessé puisque nous ne vérifions plus la position sur les boîtes blessées, je pense que juste faire une plus grande forme pourrait vraiment aider un peu le joueur frappant le personnage . Je ne sais pas, je vais juste le rendre un peu plus grand là-bas pour
qu'il y ait plus de place pour le joueur à frapper. Donc je prends juste la valeur y et la mets à trois. Ce n'est pas vraiment nécessaire, mais je ne pense pas que ça fasse mal non plus. La boîte de frappe ennemie utilisera toujours ça pour notre ennemi. Tous les ennemis vont être en mesure de rencontrer le joueur pour lui infliger des dégâts. Ce personnage pourra également lancer un projectile. Ok, donc maintenant nous devons détacher le script Pig en colère de ce b. Donc si je clique sur détacher et que je vais cliquer avec le bouton droit de la souris, attacher un script. Nous créons donc un nouveau script dans le dossier des personnages ennemis. Ça va s'appeler BDD. Et cela va en fait hériter de l'ennemi. Alors nous allons juste changer ici et nous taperons l'ennemi, appuyez sur Créer. Alors maintenant, quand nous créons le script en haut, il étend l'ennemi. C' est ce qu'on veut voir. Coupons ça. Et maintenant, nous pouvons commencer à travailler sur ce script B. Donc, comme les autres personnages du jeu, nous allons toujours avoir des états dans un sens. Donc, je vais mettre l'état
enum et les trois états de ce personnage vont être inactifs. Toucher quand il prend des dégâts et attaque quand il joue l'animation d'attaque, nous allons nous assurer que l'ennemi ne peut pas bouger pendant qu'il attaque. Pour ce script, je pense que cela fera de sorte que l'ennemi ne
bouge pas pendant qu'il attaque seulement les wilds et l'état inactif, bien que vous pourriez l'avoir attaqué mouvement en même temps. Ça dépend de ce que tu veux. Nous allons aussi avoir besoin d'une vitesse pour que le personnage bouge. Donc exportez, float, var, Lightspeed, et je vais définir cela sur 50 par défaut. Alors plus tard, on va installer un projectile, bien sûr. Nous pouvons donc inclure cela comme quelque chose que nous pouvons générer une instance de pour notre B en ayant une variable de scène emballée à l'exportation. Donc exportez la scène emballée. Et puis nous disons juste au B avec cette variable ce que nous avons vu de notre projet. C' est un TSC et un fichier que nous voulons créer une copie de, et ce serait juste un projectile var. Nous allons également avoir besoin d'une variable d'état actuel, puis d'une fonction d'état actuel définie. Donc je pense que nous pouvons mettre ça en ennemi aussi. Donc, donc ce caractère va également avoir besoin d' une variable d'état actuel et d'un set get pour l'état actuel défini. Donc, ce caractère va également avoir besoin d' une variable d'état actuel et d'une fonction de setter d'état actuel. Donc, nous pourrions envisager de tirer cette ligne de code de cochon
en colère vers l'ennemi afin que fondamentalement chaque personnage ait un état actuel à définir. Et puis nous pouvons définir une méthode d'état actuel de jeu personnalisé pour chacun d'eux. Donc un cochon en colère, je vais juste sortir ça. Donc, comme les murs du joueur vont avoir besoin d'un état actuel, votre variable. Donc un état actuel variable, et nous allons définir ça égal à l'état point AIDL. Par défaut, nous allons écrire un ensemble de fonction pour son état actuel défini. Donc, quand nous entrons dans un état, nous voulons que certaines choses arrivent pour ce personnage. Et nous allons aussi avoir besoin d'une direction d'attaque et d'une cible d'attaque pour lancer des projectiles. Donc, la direction va être la direction pour lancer le projectile n. Et puis ici, nous allons avoir la cible d'attaque. Et puis ici, nous allons avoir la cible d'attaque. Quand un joueur entre dans le rayon du B pour attaquer, il va se verrouiller sur ce joueur. Et il va continuer à lancer des projectiles sur ce joueur jusqu'à ce
que le joueur quitte la zone d'attaques. Et nous allons vouloir que les projectiles se lancent périodiquement, pas sur chaque image, mais plus comme une fois par seconde, sinon vous pourriez même ralentir plus loin que ça. Donc nous allons vouloir une minuterie, donc je vais faire un clic droit sur notre ennemi à une note enfant, créons une minuterie. Et cela peut être attaqué minuteur. Assurez-vous qu'il s'agit d'un tir à droite. Et vous pouvez faire le temps d'attente aussi long que vous voulez entre les lancements de projectiles. Donc, un temps d'attente de 1 seconde signifie qu'il lance une attaque par seconde. Maintenant, on peut se référer à ce minuteur d'attaque. Donc non prêt var, minuteur d'attaque égale signe dollar minuteur d'attaque. Et il y a quelques autres nœuds et notre hiérarchie auxquels nous devons avoir accès, comme la boîte de frappe de collision ennemie afin que nous puissions activer et l'éteindre en fonction de l'état. Donc var non prêt, collision ennemie, boîte de
frappe égale signe dollar, collision
ennemie a frappé des dollars. Ok, alors nous pouvons écrire nos fonctions de processus de physique. Donc soulignons le processus physique, nous voulons seulement que le personnage se déplace dans un état, donc faisons correspondre l'état actuel. Et si l'état est inactif, alors nous allons bouger, donc état point inactif, et ensuite nous allons faire un delta de déplacement de waypoint. Alors rappelez-vous que nous devons configurer comment le personnage se déplace si nous revenons à l'ennemi et nous pouvons voir mouvement Waypoint a cette fonction, nous devons mettre en œuvre. Que faire cela en une seconde, mais tout le reste sur déplacement entre les waypoints est pris en charge pour nous. Donc la moitié de cela est déjà écrit. Et c'est juste une sorte de gain de temps car les images sont en cours d'exécution. Si nous sommes en état inactif, alors nous pouvons commencer à attaquer le joueur s'il est là. Donc, je vais juste mettre un commentaire ici pour nous le faire savoir pour l'ajouter plus tard. Donc on va installer ça dans une minute. Maintenant, nous allons travailler sur le mouvement de notre personnage. Ça va être super central pour le b. Donc, nous implémentons get move speed,
qui prend Delta et, et la direction. Tout ce que nous avons à faire est de retourner la nouvelle vitesse, qui va être Fly speed times direction. Donc, la direction est fondamentalement la même, mais la direction va être pointée vers le point de cheminement. Donc j'ai donné un coup de pied il se déplace juste vers le point de cheminement 1 son extrémité l'état de ralenti à la vitesse de la vitesse de vol. Et c'est vraiment tout ce dont nous avons besoin pour ça. Nous devrions également implémenter une fonction get hit. Cela va prendre des dégâts et flotter. Donc, chaque ennemi doit avoir une version de ceci. Donc self.age moins équivaut à des dommages et changera l'état actuel en état point frappé. Nous devons mettre en œuvre l'état actuel, le nouvel état. Maintenant, nous devons écrire cette fonction ici. Donc, la fonction définit l'état actuel et ce serait nouvel état 3 peut s'assurer que l'état actuel est égal au nouvel état. Et bien sûr, nous allons ajouter plus ici car quand nos personnages entrent dans un certain état, nous voulons que des choses se produisent. Mais voyons où on en est. Mais voyons où nous en sommes maintenant. Alors passons au niveau 1, et ajoutons une copie du B ici. Donc notre B, nous avons besoin de nouveaux waypoints pour, donc dupliquez les waypoints avec la commande ou contrôle D. Et déplacons simplement ces waypoints. Je ne sais pas. On va le mettre ici à des fins de test, je suppose. D' accord. Et puis les waypoints 6, B se déplacera ici, et ensuite il passera à déplacer de cette façon. Mais ce n'est que si nous avons réellement mis en place pour ces points de cheminement. Cliquez donc sur B et créez un. Définissez le tableau de points de cheminement à la taille de deux et la connaissance choisissez waypoints cinq et waypoints six. Ok, maintenant on peut jouer et voir comment ça marche jusqu'à présent. D'accord ? On dirait que nous avons eu l'erreur où la position du point de cheminement n'a pas encore été définie. Alors fermons ça. Allons au cochon en colère où je pense qu'on a besoin de ce morceau et de l'ennemi. Donc, l'index waypoint doit être défini sur le waypoint de départ au début du script. Ou plutôt que d'avoir ça, on pourrait juste en faire un bar rusé. Donc, l'index de point de cheminement sera le point de départ. Supprimons ça. Allez à l'ennemi. L' index Waypoint va par défaut au waypoint de départ. Et nous devons le faire sur var prêt. Donc, de cette façon, nous pouvons avoir cette configuration sans avoir une fonction prête et éventuellement remplacer un ancien. Donc, de cette façon, nous pouvons résoudre ce problème sans avoir à créer une fonction prête à l'intérieur d'ici pour cela. Allons de l'avant et jouons et voyons où on en est encore. Ok, donc ici, nous devons aussi définir la position du point de cheminement par défaut. Donc je pense que nous pouvons le faire avec un, avec une position de waypoint et nous obtiendrons les waypoints au point de départ. Et puis afin de faire sortir cela à la barre déjà, Allons obtenir le noeud à la, obtenons le noeud à la position 0 de ce chemin de noeud, ce waypoint de départ. Donc, nous voulons waypoints au point de départ de la position du tableau, qui est 0. Et ensuite, nous pourrons trouver la position de ça. Et ça. Et puis nous pouvons obtenir la position de ça, qui devrait être un vecteur 2D. Allons de l'avant et frappons le jeu et voyons si cela aide. Ok, ouais, ça semble marcher. Donc IB va entre les waypoints, sont cochon en colère va entre les waypoints. Voyons si on peut endommager le bec en ce moment. Oui. D' accord. Actuellement, vous pouvez, mais il ne joue pas l'animation Hit. Donc tout jusqu'à présent, si bon.
34. États et attaques de Projectile: Ok, Suivant dans notre état actuel pour le B, faisons correspondre le nouvel état. Et nous allons mettre en place certaines choses à se produire en fonction de l'état entré. Donc, si nous entrons dans un point d'état AIDL, nous voulons prendre la boîte de frappe de l'ennemi et l'activer, ce qui
signifie que cet ennemi peut tomber sur le joueur et infliger des dégâts au joueur quand il est en état inactif. Donc ça va être une collision ennemie, une boîte à
stands, un point, un ensemble de points différé. Depuis cela, lorsque vous définissez ces propriétés sur la zone 2D est il doit être fait avec une méthode définie différée. Et qu'est-ce qui s'éteint ? Et nous activons la surveillance. Et nous activons la surveillance. Ce qui veut dire qu'on rend ça vrai. Ok, ça veut dire que notre personnage peut encore infliger des dégâts aux joueurs. Et nous voulons également prendre la variable peut être touchée et définir cela à vrai aussi. C' est donc ce que le joueur recherche actuellement un ennemi pour voir s'il peut faire une attaque de saut et lui infliger des dégâts. Ensuite, nous voulons une attaque par point d'état. Donc, on va juste mettre ça en place à l'avance. Donc, dans une attaque d'Etat, juste au cas où, pour une raison quelconque, ce n'est pas le cas. Nous voulons que la surveillance soit vraie ici, afin qu'elle puisse toujours entrer en collision avec le joueur quand il fait une attaque de projectile. Et nous voulons aussi qu'il soit capable de frapper le style de joueur. Donc je vais dire que je vais copier coller ça. La seule différence ici que nous voulons activer le périmètre de l'arbre d'animation pour l'attaque active. Donc, prenez l'arbre d'animation et définissons les paramètres attaque active. Et nous mettons ça à vrai. Donc, tant qu'il ne joue pas actuellement l'animation Hit, il jouera l'animation d'attaque comme une priorité sur l'inactivité, qui est ce que nous voudrions et l'état d'attaque. Et puis enfin, ou état point head, nous voulons prendre la surveillance et l'éteindre. Alors, qu'est-ce qui désactive la capacité de l'ennemi à infliger des dégâts au joueur ? Nous pouvons aussi vouloir éteindre, peut être touché pour que l'ennemi ne puisse pas être blessé. Watts et l'état de succès. Sinon, le personnage peut simplement continuer à rebondir sur le dessus et le tuer très rapidement. Et puis nous voulons également définir le paramètre de l'arbre d'animation ici. Je vais juste copier la pâte. Sauf que maintenant nous le changeons en paramètre hit au lieu du paramètre d'attaque. Donc, quand l'ennemi est touché, nous ne voulons pas qu'il lance soudainement un projectile sur le joueur. Je pense que ce serait un peu injuste. Donc, nous pouvons réellement démarrer notre minuteur d'attaque ici aussi. Donc je vais faire l'attaque de point de minuterie démarrage. Notre minuterie est réglée à 1 seconde. Donc, pendant que ce minuteur est en cours d'exécution, aucune attaque ne sera faite. Ce qui veut dire que lorsque l'ennemi sera touché, il y aura au moins un délai d'une seconde avant qu'il ne recommence à attaquer. Maintenant, pour que nous puissions nettoyer les animations. Mais créons aussi quelques fonctions. Lorsque nos coups uniques sont terminés, nous voulons revenir à l'état inactif. Donc, nous allons créer la fonction, Hit animation, terminé. Donc, à ce stade, nous voulons juste revenir à l'état inactif. Donc, l'état self.contents est égal à l'état point inactif. Et puis nous allons également mettre en place l'animation d'attaque terminée. Donc, comme Hit animation terminée ou faire auto point état actuel est égal à point AIDL état point. Mais si nous regardons l'animation de l'attaque, nous pouvons voir que c'est l'accumulation du personnage qui lance ses attaques. Donc, le moment où nous voulons lancer le projectile sera à la fin de notre animation. C' est donc un endroit parfait pour mettre un projectile lancé, que nous allons installer dans un peu. Alors lancé projectile. Et puis nous allons de l'avant et créons cette fonction de projectile lancée. Pour l'instant, on va juste passer. Maintenant, allons au lecteur Animation et il est en train de configurer ces fonctions de rappel. Donc, je vais insérer une clé ici. Ok, voyons voir, c'est l'attaque. Donc, nous voulons faire sur un tack terminé partout où nous avons terminé l'animation d'attaque, et assurez-vous juste que c'est le bon qui est appelé ici. Maintenant, allons frapper. Et puis on veut sur le coup fini. Alors je vais cliquer là. On dirait qu'il a déjà été mis en place par le cochon en colère. Donc j'espère que nous devrions être en mesure de passer entre le coup et le ralenti correctement maintenant. Alors je vais jouer, je saute sur le B, ok ? Il ressemblait à frapper l'animation, frapper et il revient au ralenti. Après cela, 0,5 seconde est terminée. Juste pour tester une fois de plus. Ok, ça marche bien. Ok, Ensuite, nous devons créer un projectile pour notre B2B capable de déjeuner. Alors allons créer une nouvelle scène. Je vais créer ceci comme un corps cinématique 2D, car il va bouger. Et nous allons y ajouter, bien sûr, une forme de collision, cette forme de collision. Donc je vais renommer l'attaque ici, piqûre d'abeille ou le projectile d'autres. Et sauvegardons cela dans un nouveau dossier. Je vais appeler ça des projectiles. Et nous sauverons ça là-dedans. Donc notre collision. Maintenant, nous avons aussi besoin de ce brillant pour notre piqûre d'abeille. Donc je vais ajouter un sprite. Et puis allons dans notre art et trouver cette attaque, donc b, et ensuite nous avons la balle ici. Donc je vais mettre ça dans la texture. Donc, continuant sur notre projectile piqûre d'abeille, la forme principale de collision pour le corps cinématique 2D. Je vais seulement entrer en collision avec
le monde pour avoir effacé le projectile. Mais pour infliger des dégâts au joueur, nous allons avoir une zone séparée qui vérifie essentiellement en utilisant des couches de collision. S' il s'agit d'un joueur et infliger des dégâts à ce joueur avant de supprimer le projectile. Prenons donc l'objet de chaîne B et définissons la collision par défaut. Couches pour être fondamentalement juste monde et souder. Donc, pour notre corps cinématique de piqûre d'abeille aujourd'hui, nous allons éteindre le monde de la couche. Cet objet va seulement essayer de se heurter sur la couche du monde. Donc je pense que c'est tout ce qu'il nous faut. Et puis définissons la forme de collision pour cela. Donc, nous allons juste utiliser une forme de capsule. Je pense que ça correspond à ce petit être stinger, qui ressemble un peu à une dent pour moi. C' est d'ajuster la taille et la forme de celui-ci. Et aussi je vais positionner ça juste au-dessus pour que nous puissions voir la forme de la collision. Couchez-le sur le sprite. Et ça me semble plutôt bon, juste là. Je pourrais même juste tonifier juste un peu plus joueur préféré quand il s'agit de collisions avec cet objet. Donc maintenant, nous avons besoin d'une autre zone à D pour infliger des dégâts au joueur. Alors ajoutons une zone à D. Et puis je vais juste dupliquer cette collision forme 2D. Et nous allons juste le mettre ici pour cela aussi, est fondamentalement la même forme est pour les collisions du monde et pour les collisions des joueurs. Mais sur la zone de D, nous vérifions les joueurs et sur le corps cinématique nous vérifions les ennemis. Donc, nous allons éteindre la bulle du moniteur. On va éteindre la couche et le masque pour le monde. Et nous allons activer le masque pour joueur, que j'ai mis à la quatrième option ici, la quatrième. Mais maintenant, on peut renommer ça comme la zone d'attaque, je suppose. Et nous pouvons mettre un script pour notre piqûre d'abeille. Donc pour l'instant nous allons juste avoir cet héritage du corps cinématique 2D. Et nous allons aller de l'avant et appuyer sur Créer. Ok, donc notre script de piqûre d'abeille va être relativement simple. Supprimons tout ça pour l'instant. Donc notre projectile va avoir besoin de savoir combien de dégâts il inflige. Par conséquent, les dégâts d'exportation float ou VD sont égaux à un par défaut. Pour l'exportation de flotteur pour la vitesse de déplacement de ce projectile aussi, nous allons le rendre un peu plus rapide que le B lui-même, vitesse de
déplacement d'un 100 par défaut. Et maintenant, nous allons avoir besoin d'une variable pour la direction cible. Et nous allons par défaut vecteur de deux points 0. Maintenant, nous allons devoir mettre à jour cet objet pour chaque image qu'il existe dans le monde. Donc, nous allons exécuter le processus de physique. Et ici, nous aurons la collision qui se produit quand nous bougeons. Et nous allons faire un mouvement et entrer en collision jusqu'à ce point dans le jeu que nous avons fait déplacer et glisser, mais nous ne voulons pas vraiment que le projectile glisse sur le bord de quoi que ce soit. Donc, on ne fait que bouger en collision. Et puis s'il entre en collision avec quelque chose qui ne sera
actuellement que sur la couche du monde pour le corps cinématique 2D lui-même, alors nous allons juste le supprimer. Donc, nous utilisons le mouvement de collision au lieu de déplacer et de glisser. Il n'y aura donc aucune fonctionnalité de diapositive. Et nous avons besoin de la vitesse de déplacement, que nous avons déclarée là-bas en haut, fois la direction cible, que nous obtiendrons de l'objet de lancement lorsque nous allons de l'avant et créer ceci. Et puis on multipliera ça par Delta. Rappelez-vous que le déplacement de collision ne tient pas compte automatiquement de Delta, qui est le temps entre les images. Donc, vous devez multiplier par delta lorsque vous utilisez collision en mouvement. Vous n'avez pas besoin de le faire pour déplacer et glisser, que nous avons utilisé pour le reste de ce cours. Gardons ça à l'esprit. Et si nous avons une collision, donc je vais faire si est une instance valide sur cette collision, alors nous allons en file d'attente trois, qui supprime juste ce projectile du jeu. Donc maintenant, nous devons mettre en place quand nous frappons un joueur. Donc, nous allons utiliser cette zone d'attaque, passer à un noeud et faire la forme du corps entré et connecter cela à notre piqûre d'abeille. Donc maintenant, nous avons une forme de corps de zone d'attaque entrée. Ils devraient toujours être un joueur. Et quand ce n'est pas un joueur, Nous voulons probablement qu'il envoie une erreur d'une sorte,
surtensions, ne point de corps obtenir des dégâts frappés. Tous les joueurs devraient être en mesure de le faire. Et je pense qu'on l'a mis en place pour le caractère, mais ça devrait fonctionner pour le moment. Et puis après avoir infligé des dégâts au joueur, nous q3 parce que nous retirons le projectile du jeu, et c'est tout pour notre script de piqûres d'abeille. Alors maintenant, allons à l'être vu. Cliquons sur l'inspecteur B. Et chargeons le projectile n pour notre scène remplie de projectiles. Donc par ici, charge, Allons aux projectiles et choisissons l'asean piqûre d'abeille. Ok, donc on devrait pouvoir voir un petit aperçu de notre B là-bas. On peut voir les ressources du projectile slash d'abeille piqûre, asean point-point point. Donc, cela devrait être capable de créer cela.
35. Lancer des Projectiles: Maintenant, nous avons réellement besoin de créer la méthode pour lancer le projectile à partir du faisceau. Il a créé un projectile lancé, mais on n'a rien fait avec ça. Et nous allons en fait avoir besoin de passer un paramètre ici, qui va être la direction cible, qui va passer à la piqûre d'abeille aussi. Donc, un vecteur de direction 2D, et alors cette direction viendra d'une direction d'attaque. Et on va le mettre en place dans une minute. Donc, quand nous lançons le projectile en premier, nous devons en créer une instance. Donc, je vais faire var projectile lancé ici, et cela va être égal à l'instance de point de projectile. Donc, cette scène emballée, nous en créons une copie à l'intérieur de notre niveau, voyant quand nous, chaque fois que nous exécutons cette méthode. Donc, avec le nouveau projectile, nous devons définir la position de celui-ci. Donc lancé projectile point point position globale. Et nous voulons que cela soit égal à la position de notre objet B. Donc, en créant le projectile à l'emplacement du B, puis il se déplace de là. Donc égale la position globale de cet objet. Ensuite, nous devons définir la rotation du lancement un projectile pour correspondre à notre direction d'attaque. Sinon, ça aura l'air un peu drôle. Cela rendra juste l'animation plus belle. Donc lancé projectile, et je vais faire plus égaux sur l'angle parce que nous pourrions avoir à ajuster cela dans la scène de projectile elle-même pour configurer la direction par défaut du projectile. Et puis cela change. Il, le fait tourner à l'endroit où il devrait être confronté en fonction de sa trajectoire. Alors faisons l'angle de direction cible. Donc, cela convertit fondamentalement ce vecteur 2D en un angle que la rotation peut réellement comprendre. Donc, une fois la rotation du point de projectile doit être sur la gauche, puis plus égale à l'angle de direction cible. Ensuite, ajoutons le projectile lancé à notre scène actuelle. Alors obtenez l'arbre et puis obtenez la scène actuelle. Et nous ajoutons un enfant à cela. Nous ajoutons donc l'enfant de ce projectile lancé. Donc, cette ligne de bits signifie fondamentalement que lorsque nous sommes dans notre niveau 1, il va trouver cet objet de route de niveau 1 et nous
allons l'ajouter comme un enfant ici pour exister à l'intérieur de notre évier. Et la dernière ligne dont nous avons besoin ici est de
définir la direction cible du lancement, le projectile. Ainsi lancé la direction cible du point du projectile est égale à la direction de la cible. Quelle est la direction de la cible et comment mettre en place le lancement du projectile ici ? Donc, pour attaquer le joueur en premier, nous devons identifier que le joueur est entré dans une zone d'attaque. On n'a pas mis en place de zone d'attaque. Donc, nous allons créer une autre zone à D sur notre B. Donc je vais faire un clic droit ici à une zone de noeud enfant 2D, nous pouvons l'appeler l'attaque de projectile ou zone pourrait rendre un peu plus logique que les zones d'attaque de projectiles, mais j'irai avec, Cliquez avec le bouton droit de la souris ajouter une collision en forme de 2D. C' est comme à chaque fois, et faisons-en une forme de cercle. Donc cette forme de cercle, je vais prendre le rayon, l'expansion là-bas, et je vais en faire un 100. Donc c'est un assez grand rayon pour où nous dirons que nous attaquons le joueur s'il se trouve à l'intérieur d'ici. Donc, si nous cliquons sur la zone d'attaque des projectiles et aller au noeud, vous pouvez voir qu'il n'y a pas de signal pour le joueur existant là-dedans, mais il y en a un pour la forme du corps entré dans un accident de forme corporelle, donc sur entré, nous allons définir le joueur cible pour être le joueur qui vient d'entrer. Et à la sortie, nous supprimerons le joueur cible de la cible actuellement référencée. Donc s'il n'y a pas de cible, il ne lancera pas de projectile. Et s'il y a et que d'autres conditions sont remplies, alors nous lancerons des projectiles après chaque minuteur d'attaque est terminé en cours d'exécution. Nous allons donc connecter la forme du corps entrée dans le script B et aussi la forme du corps sortie dans le script. Je vais prendre ces petits morceaux ici, oui, juste par ici. Et maintenant, installons la cible d'attaque. Donc, c'est vraiment simple. Nous avons juste besoin de faire la cible d'attaque égale le corps. Donc c'est la chose que le corps cinématique ou le joueur dans ce cas, l'est entré dans notre zone d'attaque et nous l'enregistrons comme la cible pour essayer d'attaquer. Maintenant, quand cet objet quitte, nous allons juste dire que la cible d'attaque est égale à null. Maintenant, sur notre processus physique, qui va continuer à fonctionner au fur et à mesure que le jeu progresse. Nous voulons voir dans notre état inactif si nous devons passer à un état d'attaque. Donc, d'abord, nous allons voir si la cible d'attaque est valide. Donc, si l'instance est valide, et nous allons attaquer la cible ici. Mais aussi que le temps d'attaque ou est actuellement arrêté, alors nous allons faire une minuterie d'oeuf est arrêté. Donc le refroidissement de la dernière attaque est terminé. Nous avons une cible à attaquer, donc nous allons l'attaquer. Donc, faisons auto point état actuel est égal à l'attaque par point d'état. Et maintenant, définissons la direction d'attaque pour être égale à la direction vers le haut, pour être égale à la direction de la cible d'attaque. Ainsi, une direction technique équivaut à la direction du point de la position du point de la cible d'attaque. Et puis commençons la minuterie. Parce que nous voulons que cela ne se produise qu'une fois toutes les 1 secondes ou quelle que soit la durée de l'attaque. Alors attaque point de minuterie démarrage. Et cela doit être une direction aussi. Donc, ça nous met dans l'état d'attaque. Lorsque nous sommes en état d'attaque, notre animation active d'attaque va s'exécuter grâce à ce paramètre. Donc, l'animation d'attaque charge l'attaque. Et puis nous avons terminé l'animation d'attaque, qui va lancer le projectile vers
le joueur en fonction de cette direction d'attaque. Et nous allons revenir à l'état inactif jusqu'à ce que notre script nous dise le contraire. Alors allons de l'avant et appuyez sur Sauvegarder et voyons où nous en sommes. Ok, donc le projectile est en train de se lancer. Vous pouvez voir que pendant qu'il est dans l'état d'attaque, le B ne bouge pas. Ce que je pourrais ne pas aimer peut-être que je
veux qu'il puisse déplacer des attaques d'eau parce que cela semble juste un peu maladroit, n'est-ce pas ? Nous allons donc mettre en place un autre état de correspondance et lui permettre de faire un passage vers le bas dans le waypoint. Donc maintenant seulement dans l'état HIT, il ne sera pas capable de se déplacer. Allons frapper Play, OK ? Et maintenant notre b comme attaquant tout se déplace. Et nous devons faire pivoter le projectile de base pour que cela pointe réellement vers notre joueur. Donc si je me souviens, si on va à la piqûre d'abeille, la bonne façon de l'avoir face directement vers le haut. Donc, si je me souviens bien, prendre la piqûre d'abeille puis régler la rotation
de base à 270 ou 90 négatifs pour
le faire face à droite sera la bonne façon de le faire face lorsque vous ajoutez dans le angle par rapport au lancement de ce projectile. Ok, donc si nous allons de l'avant et frappons Play, nous pouvons voir que ce n'est pas en fait attaquer notre joueur. Actuellement, un qu'il attaque est le monde lui-même. Donc, si nous vérifions notre zone d'attaque de projectiles, vous pouvez voir que la surveillance est toujours allumée moniteur un garçon est toujours allumé. Ce que nous voulons utiliser en tant que masker est joueur, éteignez le masque que le monde et couches le monde. Et nous allons aussi éteindre Mano terrible. Alors maintenant, il devrait ramasser sur la bonne cible pour attaquer ce qui ne devrait être que le joueur. Donc, quand le joueur n'est pas dans cette zone, il n'attaque rien. Mais on peut aller dans cette zone pour qu'elle attaque. Et il semble que la direction du projectile soit plus précise. Alors que cela semble la plupart du temps correct. Sauf qu'un problème est qu'il n'entre pas réellement dans l'animation d'attaque actuellement. Alors allons de l'avant et jetons un coup d'oeil à notre scène B et un peu déboguer pourquoi l'animation n'est pas en cours d'exécution. Vérifie ici. Vous pouvez voir que l'animation d'attaque n'est pas en cours d'exécution. On peut vérifier Hit pour, et ça marche. Alors pourquoi l'attaque n'est pas en cours d'exécution ? Alors vérifions le sprite animé. Faisons en sorte que tout va bien ici. Et ça semble l'être. Donc on peut aller dans le lecteur d'animation. Et une chose que nous pourrions faire ici est juste de recréer l'animation d'attaque qui pourrait résoudre les bugs. Alors allons de l'avant et supprimons l'animation d'attaque, puis ajoutons une nouvelle, appelée attaque. Donc, une fois de plus, réinitialiser que nous allons prendre l'animation sprite animée sur l'image 0. Nous insérons la clé pour définir l'animation à attaquer que nous avons également besoin de la piste de la méthode d'appel sur le B. Donc, à, je pense que c'est 0.4 secondes. Et nous voulons faire un clic droit et insérer sur l'animation d'attaque terminée. Et aussi, nous voulons faire la durée totale des textes qui sont 0.4 seconde. Snap ici 0.05 seconde aussi. Maintenant, allons dans l'arbre de l'animation et ajoutons l'animation une fois de plus. Attaque. Connectez-le à un seul coup, et vérifions le seul coup. Donc maintenant ça va, je ne peux pas expliquer exactement pourquoi ça s'est produit. Maintenant. Ça semble fonctionner pour que nous puissions aller de l'avant et frapper le jeu. Et voyons s'il joue réellement l'animation. Donc c'est vrai, d'accord. Donc a joué l'animation, mais je suppose qu'elle ne l'a pas ramenée à un autre état. Nous devons donc nous assurer que cela sur l'attaque d'animation terminée se produit réellement. Et le problème ici, si nous zoomons, c'est qu'il est à 0,5 seconde, où vous le voulez à 0,4 seconde. Donc c'est important. Allons de l'avant et frappons le jeu. Et nous pouvons voir maintenant que ça va marcher. On va faire lancer ces projectiles. Et ça va être un peu traquer le joueur pour avoir lancé ces projectiles. Donc, nous pouvons encore sauter pour frapper le B. Et noter que lorsque nous avons frappé le B, qu'il y a certainement un retard pour qu'il commence à attaquer à nouveau depuis que nous redémarrons le minuteur quand nous avons frappé le B. Donc maintenant notre b fonctionne essentiellement. Nous avons juste besoin de créer quelques clones dans
le jeu et de définir des waypoints pour qu'ils se déplacent entre. Alors, allons cliquer sur le B et peut-être que je vais le faire commencer un peu par ici. Laissez-moi le faire attaquer le joueur quand il est un peu sur cette plate-forme et son mouvement nous 0.56, où nous voulons qu'il soit. Cette partie est totalement à vous juste positionner les choses où vous voulez qu'elles aillent entre et où vous voulez que l'emplacement de départ soit. Et peut-être allons dupliquer le B et mettre un B ici. Et peut-être à des fins de test, ne
donnons pas à ce soit des waypoints. Donc, je vais réinitialiser le tableau de waypoints ici à 0. Et allons de l'avant et frapper le jeu et voir si ça nous donne un bug. Donc, il le fait. Donc, fondamentalement, cela ne peut vraiment fonctionner que s'il y a réellement un waypoint dans le tableau. Donc, à ce stade, nous pourrions faire une fonction très. Alors funk, soulignement prêt. Et ensuite, on va mettre ça ici. Donc la position du point de cheminement est égale à ceci. Au lieu de le faire sur de très vrais virus, se peut que
cela ne soit pas toujours en mesure d'être réellement configuré. Donc, ne configurez cela que si la taille des points de waypoints est supérieure à 0, supérieure à 0. On y va. Allons de l'avant et frappons le jeu et voyons si cela nettoie toutes les zones. Donc ici, nous en avons un autre, qui est que, fondamentalement, s'il n'y a pas de waypoint, il n'y a pas de position de waypoint. Et s'il n'y a pas de position de waypoint, alors on ne peut pas vraiment faire un waypoint mover. Pour qu'on puisse faire un check-in ici. Si la taille des points de waypoints est supérieure à 0, si ce n'est pas le cas, alors fondamentalement waypoint move ne devrait rien faire. Alors essayons juste de tout faire. Et s'il n'y a pas de waypoints vont juste sauter tout cela. Il peut y avoir des cas où nous ne voulons pas que l'ennemi bouge. Donc maintenant, cela semble essentiellement être résolu. Ok, pour une raison quelconque, le B lance des projectiles à partir d'une position bizarre. On peut y travailler en une minute. Mais montons ici et voyons à propos de ce b. aussi lancer des projectiles à partir d'une position bizarre, mais au moins cela fonctionne sans que le B ait réellement un waypoint. Donc peut-être utiliser la position au lieu de la position globale pour projectile de
déjeuner fonctionnerait un peu mieux et allons de l' avant et frapper le jeu et jeter un oeil à cela. Ok, donc maintenant ça se lance à partir du B. Donc je suppose que ça marche. Et voyons ici, lancer à partir du b. nous pourrions également ajouter un point spécifique, comme une position à D d'où il va lancer le projectile. En fait, j'aime mieux ça parce que comme c'est un stinger B, ça ne devrait pas venir du centre de la BA, devrait venir ici. Ajoutons ça. Alors plongons dans le B en disant aller dans la vue 2D. Ajoutons une position 2D ajouter nœud enfant, médecin 2D, va appeler cette position de lancement. Je vais maintenir Alt et on va traîner ça ici jusqu'au fond des dingues, à peu près là. Maintenant, nous pouvons référencer cela dans notre script. Donc, nous allons faire sur la barre prête, Position de
lancement égale signe dollar position de lancement. Et puis nous aurons la position de cette position 2D. Et c'est là que nous allons créer le projectile lancé à. Alors allons de l'avant et frappons le jeu maintenant. Ok, ça n'a pas vraiment fonctionné. Peut-être avons-nous besoin d'une position globale pour la position lancée. Ok, disons jouer note qui provoque à nouveau ce problème. Ok, Donc nous pouvons voir que la position de lancement de cet objet n'est pas vraiment conforme au monde très bien là. Donc, comme je l'ai trouvé, j'ai accidentellement déménagé à la position du monde loin de 000. Nous pourrions donc ajouter la position
du monde à la position globale du projectile lancé. Ou on pourrait juste s'assurer que le niveau est toujours à 000. Donc, si nous positionnons sur un millier, alors prenons le niveau et fermons le. Donc maintenant, nous ne pouvons pas modifier sa position. Nous ne pouvons éditer que les enfants. Donc, si nous frappons maintenant, ça devrait résoudre ce problème. Et maintenant nos stingers ou lancements à partir de la position cible que nous nous sommes fixés là-bas. Et ça a l'air beaucoup plus agréable. Pour que nous puissions progresser à travers notre niveau. Ok, ce cochon souffre encore un peu. Et ici, nous devons être prudents parce que c'est juste que ça va continuer à nous tirer dessus. Alors installons aussi quelques abeilles au niveau 2. Je vais donc chercher le niveau 2. On va ouvrir la scène de niveau 2. On va installer un couple de B ici, B, k on a la scène B, pourrait juste la laisser tomber.
36. Finalisation des abeilles avec Mouvement de Waypoint vertical: Nous pouvons le positionner là et ensuite nous allons dupliquer quelques waypoints. Nous imprimons cinq ou 8,6, et nous allons les déplacer dans la position dont nous avons besoin. Et puis assurez-vous que notre position B m ici avec les autres ennemis va utiliser des points de cheminement de deux. Et nous allons assigner des waypoints 6 et Waypoint 5. Maintenant, nous pouvons ajouter que cela a juste eu deux abeilles supplémentaires. Pourquoi pas ? Ok, donc je vais déposer un B juste ici et un B juste là. Faisons en fait une sorte de difficile. On aura trois B. Et chacune de ces abeilles ne les met pas sous les autres abeilles. Voyons voir. Ils ne devraient pas avoir de points de cheminement. Ils ne vont pas bouger, ce sera juste une sorte de douleur pour nous. Maintenant, si vous voulez tester la scène actuelle plutôt que la scène de départ pour le jeu, vous pouvez utiliser cette option ici, jouer scène sur Mac, c'est Commande sont imaginées, c'est Control R sous Windows. Donc, nous pouvons juste commencer à partir de cette scène et sauter le niveau 1. Alors venons ici. Nous pouvons voir que notre B va essayer de nous attaquer quand nous serons dans la sphère. Si vous vouliez aller plus loin, Utilisez le re-cast pour voir s'il y a une ligne de vue entre ici et le joueur. Et puis quand ce taux entrera en collision avec ce monde, ça l'empêcherait de faire le lancement. Mais on va le mettre en place comme ça. Je vois aussi un autre bug, qui est que nous ne bougeons pas dans le y, donc je dois, ok, et continuons. Donc on va faire quelques sauts sur le mur. Et maintenant, nous venons ici pour R être ennemi. Ouais, c'est un peu une plate-forme rude, donc nous devons être prudents. D' accord. Je ne peux pas doubler de dégâts, ce qui fonctionne comme prévu, mais on ne peut pas aller un peu au-dessus de l'ennemi. C' est en fait assez délicat. D' accord ? Alors saute et saute. Ok, j'ai ce saut. Et là, nous pouvons battre le jeu tel qu'il est. Et puis nous arrivons à notre troisième étape. Donc je pense que je vais prendre ce b ici et peut-être
se débarrasser du B3 ou de la démo de ce jeu, parce que c'est un peu rude. Mais découvrons rapidement pourquoi ce B ne bougeait pas à ce niveau. Donc je vais vraiment déplacer le joueur ici. Et juste pour que nous puissions arriver à ce test un peu plus vite, je vais au Commandement R pour entrer dans la scène de cette zone. Et voyons, il ne semble pas qu'il exécute réellement la méthode move. La prochaine chose que nous pouvons tester est l'état actuel. Imprimons ça. Il devrait exécuter le cas du processus physique à la commande d'état prometteur R. Et il semble que c'est dans l'état 0, donc ce n'est pas l'état inactif. Je peux passer à l'état d'attaque, c'est aussi. Cliquez sur le B. Il a des waypoints, il a une vitesse de vol. Donc je suppose que la prochaine chose à vérifier est quelle est la direction ? Alors imprimons la direction ici. Ok, eh bien, dans cette scène, ils ont une direction, mais voyons ici, ça n'imprime pas la direction. Ok, voilà le problème. Nous vérifions seulement la distance x. Nous ne vérifions pas la distance totale aux points de cheminement. Donc peut-être que ce qu'on devrait faire au lieu d'ici, on peut toujours avoir ça spécifiquement pour le porc. Mais nous allons faire une autre méthode pour faire la distance par défaut deux waypoints parce que maintenant la distance pour x est 0 sur ce B,
il n'y a que de haut en bas. C' est donc tout à fait logique que ça ne bouge pas. Alors créons un var et nous l'appellerons distance. Et ce sera égal pour obtenir la distance, pour obtenir la distance au waypoint. Je pense que cela a juste besoin de la position waypoint. Donc peut-être que nous passons la position de waypoint et ok, et au lieu de la distance x, nous allons juste dire la distance ici d'une certaine valeur. D' accord ? Donc on va avoir besoin d'écrire la fonction ici. Cette distance jusqu'au point de cheminement. Mettez un trait de soulignement ici pour une position de point de cheminement virtuel. Ok, donc je vais passer ça. Et le cochon en colère, je vais coller dans la version cochon en colère. Donc, nous allons écrire une fonction qui a souligné obtenir la distance deux waypoints, position
waypoint, vecteur 2. Et puis nous allons coller ça et nous allons retourner ça, puisque c'est le cochon en colère x seulement distance. Maintenant, pour un ennemi standard aura une implémentation par défaut pour elle. Et comment on va faire, c'est qu'on va juste faire autoposition point distance deux, une position waypoint. D' accord ? Et nous devons le rendre bien sûr. Mais le soulignement là. Ok, et ça devrait effacer les erreurs. Revenons à notre niveau pour chanter,
aller au Commandement R. et nous pouvons diriger la scène telle qu'elle est. Et notre b devrait se déplacer parce que la distance est maintenant
en train de vérifier à la fois le x et le y pour des caractères comme celui-ci. Mais notez que nos porcs bougent toujours avec leur propre version de la fonction. Pour le prouver, passons au niveau 1. Et nous allons en fait déplacer le point de passage au-dessus des porcs, et le point de passage deux au-dessus des porcs avait aussi. Et bien que la distance soit définitivement supérieure à 10 pixels, je vais faire peser plus de 10 pixels là-bas. Le caractère ne va pas se déplacer car il ne fait que vérifier la distance sur l'axe X. Donc, nous pouvons voir que nous n'avons pas de cochon en mouvement, même si la distance à ces points de cheminement est bien supérieure, elle ne change pas d'un point à l'autre. Alors annulons ces positions. Et ça devrait nettoyer nos problèmes pour que le bébé ne bouge pas. Revenons au niveau 2. Je vais verrouiller ce niveau 2 pour qu'on ne bouge pas la position. Assurez-vous que transformer le service. Et déplacons le joueur ici. Et commandons R ou contrôlons R. Et nous allons exécuter la scène actuelle. Alors testons ça une fois de plus. Et bien sûr, je vais me débarrasser de ces informations de débogage. Donc, faisons juste une course rapide à travers ce niveau et vous pouvez ajuster la difficulté de celui-ci comme vous le devez. Évidemment, si le saut de mur est trop délicat, ça pourrait être un peu trop pour certaines personnes, un homme assez dur. Vous pourriez en fait vouloir rendre la plate-forme si peu plus grande que 1 carré, au moins certains d'entre eux. D' accord, mais de toute façon, tout semble fonctionner. Donc, revenons dans le script une dernière fois. Nettoyons l'impression. Je vais chercher un loyer où que nous l'ayons. Je vais juste le découper. On n'en a plus besoin. Et ça va être tout pour notre jeu de plateforme. Nous avons donc la configuration, les scripts de
mouvement pour notre joueur. Ou le joueur peut sauter sur les ennemis, leur faire des dégâts. Nous avons mis en place deux types d'ennemis. Nous avons mis en place une carte de tuiles. Avec le carrelage automatique, nous pouvons passer d'un niveau à l'autre. Nous avons un jeu sur DeathZone, un jeu sur écran, et une interface utilisateur de santé. Notez donc la plupart des composants de base dont vous auriez besoin pour créer un jeu de plateforme complet. J' espère que ce cours vous a aidé à commencer à Godot à comprendre comment mettre en place un jeu de plateforme. Donc, je vous remercie tous beaucoup d'avoir regardé et j'
espère que je vais voir certains d'entre vous dans certains de mes futurs contenus aussi.
37. Correction d'informe de l'abeille: Nous avons donc une dernière vidéo de correction de bug pour le cours. Si vous configurez le B exactement comment je l'ai fait, Vous pouvez rencontrer le problème où, surtout après avoir ajouté un second temps, qu'il ne semble pas jouer les animations de manière cohérente. J' ai donc trouvé qu'une solution à cela est de simplement recréer le lecteur d'animation. Donc, je vais couper ça et ensuite l'ajouter à nouveau. Donc, nous allons faire un clic droit sur l'abeille et ajouter un lecteur d'animation. Nous avons juste besoin de recréer ces mêmes animations à nouveau. Donc ici, nous allons faire une nouvelle animation inactive, va ajouter la piste animation sprite animée. Et puis à l'image 0, cela doit jouer l'animation inactive. Assurez-vous que les boucles. Snap réglé sur 0,05. Et ajoutons n les autres animations. Alors attaque piste annonce animation sprite animée. Et puis ça va être une attaque. Et je crois avoir un point zéro 35 secondes de temps avec 0,05 snap. Et les idoles devraient boucler. Ajoutez cet ensemble à 0,25. Maintenant, continuons et créons l'animation. Donc frappé propriété et a fait sprite animation. Ok, et donc la clé ici à l'image 0, et allons obtenir cette animation Hit là-bas. Donc c'était 0,05 pour le snap et 0,45 pour l'animation, je crois. Maintenant, nous avons juste besoin d'ajouter dans ces méthodes d'appel où notre B disait essentiellement hit finished, donc sur hit finished. Maintenant, nous allons nous assurer qu'il s'accroche à 0 45. Et maintenant, nous allons attaquer la méthode d'appel de piste publicitaire b. Insérer la clé. Animation d'attaque terminée. Et nous pouvons zoomer juste pour s'assurer qu'il s'accroche à l'heure correcte. Merci. Donc maintenant, nous avons frappé une attaque inactive. Maintenant, nous avons juste besoin de prendre notre arbre d'animation et de réinitialiser nos animations ici. Donc, cliquez avec le bouton droit de la souris sur l'animation, l'inactivité va au premier n. Ensuite, nous avons besoin d'attaque pour aller dans ce premier plan. Et puis pour la seconde, nous avons frappé. Alors connectons ça ici. Et maintenant, nous pouvons vérifier actif pour notre arbre d'animation. Nous pouvons tester nos animations en cochant le « on » pour le « one-shot » et pour le second « shot ». Maintenant, allons de l'avant et frapper le jeu et voir si cela fonctionne réellement dans le jeu. Donc, ici, nous avons notre animation qui fonctionne comme par magie. Donc je suppose que ce qui s'est réellement passé était juste rater quelque chose de 0,05 seconde. Peut-être que c'était le moment des appels d'animation. Mais cela semble réparer ce que nous avons. Et nous allons juste sauter au niveau 2 et nous assurer que c'est toujours le cas. Donc on va faire une commande R à ce niveau, et on va le tester très rapidement. Ok, donc ce B fonctionne très bien. Et maintenant, montons ici, ou les moins de trois B. Je suppose que je l'ai laissé à deux IP temporaires. C' est donc le genre d'enjeu de l'ONU. Vous pouvez bien sûr vérifier les paramètres de vos animations telles qu'elles sont. Mais recréer tout pourrait être un moyen un peu plus de temps pour résoudre votre problème. Donc, si vous avez des problèmes avec les animations pour votre b, votre joueur ou le cochon en colère. J' espère que cela aidera à résoudre certains de vos problèmes.