Créez des prises de vue verticales époustouflantes pour mobile avec Unity | Romi Fauzi | Skillshare
Recherche

Vitesse de lecture


1.0x


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

Créez des prises de vue verticales époustouflantes pour mobile avec Unity

teacher avatar Romi Fauzi, Game Developer, 3D Artist & VFX Artist

Regardez ce cours et des milliers d'autres

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

Regardez ce cours et des milliers d'autres

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

Leçons de ce cours

    • 1.

      01 Ouverture

      1:25

    • 2.

      02 Notion de script

      2:22

    • 3.

      03 Setup de projet

      5:41

    • 4.

      04 Mouvement des joueurs

      13:16

    • 5.

      05 Mise en commun temporaire

      3:14

    • 6.

      06 Objet scriptable pour armes

      3:47

    • 7.

      07 Mise en place de puces

      6:35

    • 8.

      08 Prise de vue automatique

      13:20

    • 9.

      09 Système de santé Partie 1

      10:11

    • 10.

      Effet à 10 coups

      6:29

    • 11.

      11 Système de mort

      10:06

    • 12.

      12 Objets de spawn et barre de santé

      15:13

    • 13.

      13 Déplacement de nœud - Créer un mouvement de courbe de Bézier

      16:56

    • 14.

      14 Éditeur de mouvements de nœuds

      11:36

    • 15.

      15 Déplacement de nœud - Déplacer des objets

      12:33

    • 16.

      16 Déplacement de nœuds - Du monde au local

      6:36

    • 17.

      17 Déplacement de nœud - Faire pivoter des objets

      9:36

    • 18.

      18 vagues ennemies

      12:56

    • 19.

      19 Rotation automatique

      14:18

    • 20.

      20 Regardez le joueur

      24:42

    • 21.

      21 Bouger dans le monde

      9:13

    • 22.

      22 Designing Boss

      29:29

    • 23.

      23 Mouvement des patrons

      12:01

    • 24.

      24 Sauvetage humain

      11:55

    • 25.

      25 Système de mise en commun de finition

      28:39

    • 26.

      26 Level Designing partie 1

      11:56

    • 27.

      27 Level Designing partie 2

      10:55

    • 28.

      28 Activateur d’ennemi

      12:08

    • 29.

      29 Réglage de pièces

      20:51

    • 30.

      Mouvement de la caméra 30

      5:01

    • 31.

      31 Intégration des patrons

      14:31

    • 32.

      32 Intégration des vagues ennemies

      7:53

    • 33.

      33 alimentations laser

      21:12

    • 34.

      34 méga-bombes power-ups

      17:34

    • 35.

      35 boucliers power-ups

      22:16

    • 36.

      Missile à 36 joueurs

      16:30

    • 37.

      37 Level Manager

      17:30

    • 38.

      38 Statistiques et mises à niveau partie 1

      14:36

    • 39.

      39 Statistiques et mises à niveau partie 2

      13:45

    • 40.

      40 Statistiques et mises à jour, partie 3

      22:05

    • 41.

      41 Point de mise à niveau poursuivi

      6:41

    • 42.

      42 Systèmes de dialogue

      19:06

    • 43.

      43 Systèmes de sauvegarde

      22:08

    • 44.

      Chargeur de scène 44

      11:39

    • 45.

      Menu de niveau 45 partie 1

      15:35

    • 46.

      Menu de niveau 46 partie 2

      14:14

    • 47.

      47 Transition de l’interface utilisateur

      26:56

    • 48.

      48 Finir l’interface utilisateur

      5:15

    • 49.

      49 Son

      12:30

    • 50.

      50 Commande tactile

      4:09

    • 51.

      51 Menu Power Up

      19:48

    • 52.

      52 Appliquer les statistiques

      17:16

    • 53.

      53 Système de notation

      12:01

    • 54.

      54 Menu de mise à niveau d’arme

      4:33

    • 55.

      Déverrouillage de niveau 55

      16:25

    • 56.

      56 Final fix et builds

      9:36

    • 57.

      57 Optimiser les déplacements des nœuds

      14:40

    • 58.

      58 Correction d’erreurs StatsManager

      7:30

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

Généré par la communauté

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

15

apprenants

--

projet

À propos de ce cours

Cours mis à jour pour être compatible avec Unity 2019.4 !

Prêt à faire passer vos compétences en développement de jeux à un niveau supérieur ? Rejoignez-nous dans ce cours passionnant où nous vous apprendrons à créer un jeu Shoot Em Up entièrement fonctionnel (Skyforce ou Raiden) à partir de zéro avec Unity.

Que vous soyez un développeur Unity expérimenté qui cherche à développer vos compétences ou un nouveau venu dans le monde du développement de jeux, ce cours est pour vous. Nous vous guiderons tout au long du processus de création d’un jeu, en commençant par la programmation orientée objet et en approfondissant l’API C # d’Unity.

Mais nous ne nous arrêterons pas là. Nous vous fournirons tous les éléments dont vous avez besoin pour donner vie à votre jeu, y compris des modèles 3D et de l’audio. Vous aurez également la liberté d’utiliser ces actifs dans vos propres jeux.

Tout au long du cours, nous vous présenterons également des notions avancées telles que le design basé sur les composants, le mouvement, les motifs de prise de vue, les mouvements courbes avec nœuds, les transitions de scène, l’épargne et le chargement, les objets scriptables de Unity, les pièces de monnaie et de sauvetage humain et les médailles, toutes les fonctionnalités dont vous avez besoin pour créer un jeu qui se démarque des autres.

Grâce à nos directives, vous comprendrez mieux l’API d’Unity et comment en tirer parti pour créer des jeux engageants, amusants et stimulants. Alors pourquoi attendre ? Inscrivez-vous dès maintenant et préparez-vous à libérer votre créativité et à créer le jeu de vos rêves !

Note : Il est recommandé de disposer d’une base de l’API C # d’Unity.

Qui est le public cible ?

  • Les développeurs de jeux qui souhaitent développer leurs compétences et apprendre à créer un jeu Shoot Em Up entièrement fonctionnel avec Unity.

  • Les programmeurs qui souhaitent améliorer leur compréhension de l’API C # d’Unity et apprendre à l’utiliser pour créer des jeux.

  • Les designers qui veulent apprendre à donner vie à leurs idées de jeux en utilisant le moteur de jeu et les outils puissants d’Unity.

  • Amateurs et passionnés qui s’intéressent au développement de jeux et qui veulent apprendre à créer leurs propres jeux Shoot Em Up.

  • Les étudiants qui étudient le développement de jeux ou l’informatique et qui souhaitent acquérir une expérience pratique dans le développement de jeux avec Unity.

Ce qu’ils disent de ce cours :

Jamie Lowe - "Ce cours s'adresse principalement aux développeurs intermédiaires / avancés, mais même si vous essayez cela en tant que débutant, vous apprendrez toujours des choses précieuses, La raison pour laquelle je me suis classé 5 étoiles est que Romi est toujours à disposition pour vous aider en cas de problème et pour la plupart des autres cours que j’ai suivis sur Udemy Je trouve parfois que cela doit attendre longtemps pour obtenir de l’aide, ce qui n’est pas bon pour résoudre les problèmes. Romi met toujours à jour ce cours pour corriger les bugs qui pourraient survenir, et c’est exactement ce dont les étudiants ont besoin, donc vous ne serez pas laissé avec un projet cassé à la fin du cours, je vais toujours être en train de faire des ajustements à mon projet, merci"

Lance Spence - "J’ai beaucoup appris de ce cours et j’ai appris de nouvelles choses que je n’ai jamais vues abordées dans d’autres cours Unity, tels que la mise en place d’un système de mise en commun, l’utilisation de directives de plate-forme et l’utilisation de Gizmos pour visualiser les objets se déplaçant le long d’un chemin. l’instructeur est compétent et réactif aux questions des étudiants. C’est l’une des principales raisons pour lesquelles il a obtenu une note de 5 étoiles de ma part. Je recommande vivement ce cours si vous avez toujours voulu apprendre à créer un SHMUP impressionnant."

Rencontrez votre enseignant·e

Teacher Profile Image

Romi Fauzi

Game Developer, 3D Artist & VFX Artist

Enseignant·e

Hi there, I'm Romi, a self taught 3d artist and game developer with more than 10 years of experiences in the industry.

Voir le profil complet

Level: Intermediate

Notes attribuées au cours

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

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

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

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

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

Transcription

1. 01 Ouverture: Bonjour, je m'appelle Romi Fozzy, je suis une artiste géniale depuis plus de 14 ans et une développeuse de jeux depuis plus de six Al jam Dalila, j'ai aidé et enseigné le développement de jeux à plus 10 000 étudiants du monde entier via ma chaîne YouTube et des cours en ligne J'ai également publié un jeu mobile appelé Bober Mraz, et Alam Dilla. Il a été téléchargé plus de 300 000 fois, et Google l'a présenté deux fois sur le Playstore Google l'a présenté deux fois sur le J'ai également travaillé sur divers projets Unity pour des clients tels que Nike, Bentley, Armes et bien d'autres Dans ce cours, vous apprendrez à créer un jeu de tir à défilement vertical similaire à Sky Force Nous aborderons les meilleures pratiques de développement pour Unity et C Sharp, ainsi que la programmation orientée objet , les objets scriptables, création d'une courbe sia de base pour les mouvements, système de sécurité et de chargement, améliorations des armes et des statistiques, succès, etc. Ce cours est destiné aux étudiants ayant un niveau intermédiaire de base et des connaissances pointues en C car nous allons aborder de nombreux sujets lors développement du jeu et la plupart des éléments de base ne seront pas expliqués. Ce cours a été mis à jour et il est désormais compatible avec Unity 2019 0.4. Donc, si vous souhaitez développer vos compétences en matière de développement de jeux et apprendre à créer un shoot them up vertical avec des fonctionnalités complètes similaires à Sky Force, ce cours est fait pour vous. 2. 02 Notion de script: Dans cette vidéo, nous allons donc discuter du concept de script En gros, nous allons créer une classe en tant que composant, et chaque classe possède ses propres fonctionnalités. Et par exemple, pour le joueur, nous aurons un script de mouvement attaché à celui-ci. tirons également, de la santé et détruisons un composant, afin que nous puissions subir des dégâts et s'il atteint zéro, nous pouvons détruire l' objet et aussi des dégâts en cas de collision avec un autre navire pour vérifier la collision, l' aimant et le ramassage de pièces. Et pour l'ennemi, nous allons également y ajouter quelques composants. Par exemple, il aura sa propre composante de prise de vue (note le mouvement), et la composante de prise de vue sera la même que la composante de prise de vue du joueur. Nous pouvons donc réutiliser le script et également alimenter et détruire le composant, et il aura un script qui émettra des pièces Comme vous pouvez le voir ici, les scripts de santé et de destruction sont les mêmes que ceux du script de santé et de destruction du script du joueur. Nous pouvons donc également le réutiliser. De cette façon, nous pouvons créer différents comportements entre les différents objets du jeu en mélangeant les différents composants qui y sont attachés. Pour un autre exemple, nous avons la tourelle à missiles, qui aura le même composant que l'ennemi, à savoir aider et détruire, tout en tirant, mais elle aura un autre composant différent qui regardera le joueur De cette façon, nous aurons un comportement différent de celui de l'ennemi par défaut. Nous allons également avoir une autre tourelle dotée de la composante santé et destruction, mais elle aura une composante rotative, de sorte qu'elle continuera à faire apparaître des balles grâce au composant sorte qu'elle continuera à faire apparaître des balles grâce rotation automatique et à l'élément tir qui y est attaché Un autre objet du jeu sera le bus ennemi. Il aura le même composant que l'ennemi. Il aura le pouvoir de tirer, de se déplacer, la santé et de détruire. Mais il aura un autre composant appelé parent-scroller Ainsi, chaque fois que le bus ennemi est activé, il est transmis au griffonnier et il suit le mouvement de la caméra Nous pouvons donc continuer à nous battre jusqu'à ce que nous vainquions le Et nous allons également avoir l'objet du jeu de sauvetage humain, et à cet objet de jeu de sauvetage humain, un composant de sauvetage y sera attaché. 3. 03 Setup de projet: Dans cette vidéo, nous allons configurer le projet de base pour le tournage de A Map came. C'est une application Unity ouverte. Et pour ce cours, j' utilise la version 2017 3p1p4. Vous pouvez utiliser n'importe quelle version, mais je vous suggère d'utiliser la même version que mienne ou au moins 2017 ci-dessus. OK. Et nous pouvons définir le projet 23d. Nous pouvons également désactiver les analyses car nous n' allons pas les utiliser , puis appuyer sur le bouton de création de projet. Unity est désormais ouvert. abord, nous devons importer le package que j'ai fourni dans ce cours. Vous pouvez le télécharger à partir du lien des ressources, accéder au menu des actifs, importer le package, puis cliquer sur Package personnalisé. Je vais aller dans le dossier où j'ai enregistré le package et le voici. Importons-le. Cette ressource contient les trois modèles, textures et audios en D nécessaires à la création de ce jeu Appuyez sur le bouton Importer. Et maintenant, les actifs sont en cours d'importation dans le projet. Bien, avant de continuer, je vais modifier les paramètres de notre plateforme, sont actuellement configurés sur PC Mac et Linux. Nous pouvons modifier cela via le menu Val, puis accéder aux paramètres de construction, sélectionner Android, puis appuyer sur Changer de plate-forme. Et pour le moment, il va réimporter tous les actifs que nous allons utiliser pour ce projet. Maintenant, il a déjà fini de changer de plateforme. Nous devons accéder aux paramètres du joueur dès maintenant et nous allons modifier quelques valeurs dans l'inspecteur. Je vais donc changer le nom de l'entreprise ainsi que le nom du package. OK. Nous devons également modifier les paramètres de résolution et de présentation, et définir l' orientation par défaut sur portrait, sorte que ce soit les paramètres des quatre joueurs. Maintenant, sauvegardons la scène et créons un nouveau dossier pour enregistrer toutes les scènes. Je vais appeler cela un gameplay. Ouvrons maintenant le dossier des modèles. Et à l'intérieur, nous avons ce modèle d'avion A, qui est le modèle d'avion héros. Faisons donc glisser ce modèle vers le panneau de hiérarchie. Et je vais aussi mettre le réservoir. Et comme vous pouvez le voir maintenant, les objets se chevauchent Résolvons donc ce problème de chevauchement. Nous pouvons passer à la vue du haut en cliquant sur l'axe y dans le gadget de vue en haut à droite de la vue de scène Dézoomons un peu et ajustons position de la caméra principale en l' alignant sur cette vue dès maintenant Mais avant cela, changeons le champ de vision 225. Maintenant que la caméra est sélectionnée, nous pouvons l'aligner en allant dans le menu des objets du jeu , puis en sélectionnant le menu Aligner avec la vue. Cela alignera automatiquement la caméra sur la vue actuelle. Maintenant, si nous passons à la vue du jeu, la vue de la caméra sera prise par le haut. Je vais mettre à zéro les positions x et z sous la transformation et régler le y à un nombre rond 35 dans ce cas. Comme c'est encore trop proche, je vais augmenter la valeur de notre champ de vision de 230. Nous avons maintenant configuré la position de la caméra. Ensuite, nous allons configurer la couche afin que le plan puisse être rendu au-dessus du réservoir et ne pas se chevaucher comme ça Créons donc d'abord une nouvelle caméra et changeons cette balise de caméra en tag. Chaque fois qu'un script recherche ultérieurement la caméra à l'aide de la balise principale, il saisit automatiquement celle-ci et n' oubliez pas de coupler la deuxième caméra à la première caméra. Pour la deuxième caméra, changeons le nom en caméra d'objet au sol, et cette caméra n' affichera que l'objet au sol, et renommons celle-ci en caméra d'objet aérien Nous devons également créer quelques couches Dans le menu déroulant des couches, appuyez sur Ajouter une couche. Et ici, je vais créer une nouvelle couche appelée objet aérien et objet terrestre. Transformons ensuite la couche plane en objet aérien et la couche panoramique en objet terrestre. Et il suffit de cliquer pour modifier les couches de l'objet de jeu pour enfants. Et pour la caméra à objets aériens, nettoyons la couche située sous le menu déroulant du masque d'abattage en ne sélectionnant rien , puis en sélectionnant l'objet aérien Et placez également le drapeau clair uniquement à mort. OK. Et pour la caméra au sol, nous allons laisser les options de sélection de la masse avec la valeur par défaut Mais nous devons nous assurer que son taux de mortalité est inférieur à celui des caméras aériennes. Modifions-le en moins deux. Maintenant, si nous zoomons la vue, vous verrez que le navire est dessiné au-dessus du réservoir. Bien qu'il occupe la même position y, parce que nous plaçons ces deux objets sur une couche différente, si nous rapprochons la caméra, vous pouvez voir que c'est le plan qui est dessiné en premier. Remettons la position y à 35, et je vais déplacer le réservoir de côté. Et maintenant, nous allons créer quelques balises. Nous avons déjà un tag de joueur. Nous devons donc créer une nouvelle étiquette pour l'ennemi, puis nous devons également créer le bullet tag et la balle ennemie. Maintenant, sauvegardons la scène et le projet, et nous allons continuer nos leçons dans la prochaine vidéo. 4. 04 Mouvement des joueurs: Poursuivons donc notre projet. Et dans cette vidéo, nous allons créer le script de mouvement du joueur. Supprimons d'abord l'objet du jeu Tank. Ensuite, créons un nouveau dossier dans le panneau du projet pour contenir tous nos scripts. Nous pouvons appeler cela des scripts. Et dans le dossier des scripts, créons un nouveau sous-dossier appelé transform Et ce dossier contiendra tous les scripts liés à la manipulation de la transformation Et dans ce dossier, créons un nouveau script C sharp, que nous pouvons appeler mouvement du joueur. Mais avant de travailler sur le script de déplacement du joueur, configurons la structure des objets du jeu. Dans le panneau de hiérarchie, créons un objet antijeu, et nous devons réinitialiser la valeur de transformation et renommer cet objet antijeu en joueur Nous devons également ajouter un box collider à cet objet de jeu vide ainsi qu'un corps rigide Mais comme nous n'allons pas utiliser les propriétés dynamiques, nous pouvons désactiver l'utilisation de la gravité et cocher l'option cinématique S. Nous devons le faire pour que cet objet puisse détecter une collision ou un déclenchement. Ensuite, transformons le modèle de l'avion A en objet antijeu du joueur Je vais donc diriger le modèle Plan A pour qu'il soit l'enfant de l'objet anti-igame du joueur et le faire légèrement avancer Les modèles sont donc positionnés au milieu par rapport à l'objet du jeu du joueur. Et ici, si vous regardez la rotation en X du modèle à trois D, elle est pivotée. Habituellement, lors de l'exportation d'un modèle par un prêteur, nous avons ce problème Et pour compenser cela, nous pouvons créer un autre enfant vide sur l'objet du jeu du joueur. Appelons ce psaume parce que nous allons mettre tout le modèle visuel comme enfant de ce vide Il suffit donc de planifier directement un modèle pour qu'il soit l'enfant de cet objet iSualGame Maintenant, pour mettre l'accent sur le mouvement bancaire, nous pouvons simplement faire pivoter l'axe z local de cet objet IsualGame Maintenant, avec cette configuration, sauvegardez la scène, et attachons le script de mouvement du joueur objet du jeu du joueur. Et puis ouvrons également le script. OK, maintenant le script est ouvert. Créons d'abord quelques variables. Tout d'abord, nous devons créer une variable flottante publique. Un nombre à virgule flottante est un nombre à virgule flottante, ce qui signifie qu'il s'agit d'un nombre avec une décimale Un entier est un nombre sans point décimal. Appelons cette vitesse variable flottante et définissons sa valeur par défaut sur cinq. En do dièse, les nombres flottants sont généralement désignés par un caractère F. Nous devons également créer une autre variable flottante appelée valeur bancaire et définir sa valeur sur 90, mais nous pourrons la modifier ultérieurement dans l'inspecteur. Et la variable suivante que nous devons créer est une variable privée avec le type de caméra Appelons simplement cette caméra. Nous devons également créer une variable flottante privée appelée distance pour contenir la valeur distante entre la caméra et le joueur. Nous devons également créer une variable privée à deux facteurs trois. La première sera la vélocité, et la seconde sera la dernière position. Et c'est pour calculer la vitesse plus tard, et le troisième sera la rotation, puis touchez pos et le dernier sera l'écran deux l. Et nous avons également besoin d'un l. Et nous avons également besoin autre type de transformation de variable publique appelé enfant visuel pour contenir la référence du modèle à trois D, afin de pouvoir la manipuler par transformation. Et dans la méthode de démarrage, nous allons initialiser un certain nombre de choses Tout d'abord, nous allons intégrer la caméra dans la variable cam utilisant la classe camera et en accédant à sa propriété principale. Il s'agit donc essentiellement d'obtenir le premier tag photo activé avec l'appareil photo principal. C'est pourquoi nous avons placé le premier tag sur la caméra principale et le second sur le tag nous pourrons saisir la caméra des objets aériens. J'ai oublié une chose, mais nous devons ajouter un autre type de corps rigide à variable privée. Créons-en un et appelons-le mon RB. Et prenons la référence du corps rigide en utilisant la méthode get component et passons-la à la variable MRV au démarrage Fondamentalement, la méthode get component est utilisée si nous devons récupérer un certain composant dans le même objet de jeu auquel ce script est attaché. Et c'est ce qu'on appelle la mise en cache du composant dans une variable. Ainsi, chaque fois que nous avons besoin d'accéder au composant du corps rigide à partir d'un script, nous pouvons simplement accéder à cette variable MRV Ensuite, nous devons également obtenir la distance entre la caméra et le joueur et transmettre à la variable de distance. Et pour calculer la distance, nous pouvons soustraire la position de la caméra à la position du joueur Trouvons donc la position de la caméra en accédant à la variable, transformons la position et soustrayons-la en transformant cette position, qui est la position du joueur Et comme la variable de distance est une valeur flottante et qu'il s'agit d'un calcul vectoriel, prenons la composante y de ce calcul vectoriel. Et pourquoi obtenons-nous les valeurs y ? Parce que, comme vous pouvez le voir ici dans la scène, la composante y est la distance due au positionnement de la caméra. Et ici, si nous sélectionnons l'objet du jeu du joueur, vous pouvez voir que la valeur y est nulle, et si nous sélectionnons à nouveau la caméra, la valeur y est certifiée Nous pouvons donc convenir que le delta y peut être considéré comme la distance. Et dans le cadre de la mise à jour, fixons la vélocité à la position actuelle, mais soustrayons-la à la dernière position Et exécutons une méthode appelée move. Mais nous allons créer cette méthode dans un instant. Commençons ensuite transformation de la valeur de position en dernière variable de position. Nous devons saisir la dernière position pour calculer la vélocité dans l'image suivante en obtenant les différences de position. Et maintenant, nous allons créer la méthode de déplacement. Nous devons donc d'abord obtenir la position de la souris. Et la position de la souris sera sur le même plan que la caméra. Mais nous allons remplacer la valeur z par la valeur de distance entre la caméra et le joueur. Nous allons donc aligner la position de la souris ou du toucher sur le plan du joueur. Réglons la valeur de la variable de position tactile sur la position de saisie de la souris , puis remplaçons les valeurs z par la variable de distance Certains d'entre vous se demanderont peut-être pourquoi nous utilisons le composant z au lieu de y ? Donc, ici dans la scène, si nous sélectionnons la caméra, puis si nous changeons la coordonnée ou Gizmo de globale à locale, la distance est représentée par l'axe z. Et comme les entrées dont la position la plus importante sera alignée sur le plan de la caméra, nous avons besoin de la distance entre la caméra et le joueur afin de pouvoir projeter la plus grande position la position mondiale alignée avec le joueur C'est pourquoi nous remplaçons la composante z de la variable de position tactile par la valeur de distance Ensuite, nous devons configurer la variable écran-monde en convertissant la position tactile en position mondiale à l'aide de la caméra, et nous pouvons utiliser méthode écran-point mondial et passer la position tactile comme argument. Nous utilisons maintenant la position de la souris, mais plus tard, nous allons la changer en une position tactile réelle. Ensuite, nous voulons créer une variable vectorielle temporaire à trois appelée mouvement, puis nous voulons interpoler les valeurs du vecteur à trois en utilisant De la position de transition actuelle au nouvel écran en passant par la position dans le monde, qui sera la position d'entrée dans le monde. Et pour le troisième argument, qui est le t ou la valeur d'interpolation, nous voulons transmettre la variable de vitesse Mais comme nous l' exécutons dans la mise à jour, nous devons multiplier la vitesse par le temps. Et cela permet de s'assurer que la vitesse dépendra du temps plutôt que de l'image, et qu'elle sera la même quelles que soient les performances du FPF sur les différents appareils Et maintenant, nous allons appliquer la valeur du mouvement en accédant à ma variable RB, et nous pouvons accéder à la méthode de position du mouvement à partir du composant du corps rigide, puis transmettre le facteur interpolé, qui est la variable de mouvement comme argument de la Maintenant, testons ce script. Retour à l'unité. Le script est en cours de compilation Et ici, comme vous pouvez le voir, nous avons exposé les variables publiques dans l'inspecteur, mais je ne vais rien changer pour le moment. Appuyons sur Play. Maintenant, comme vous pouvez le constater, le vaisseau du joueur suit le plus de position avec un léger retard ou un léger amortissement Cela fonctionne, mais nous devons maintenant ajouter les effets bancaires. Ici, c'est de l'itinérance qui vient du futur. Je veux juste que vous sachiez que si vous utilisez Unit 2019 ou une version ultérieure, vous devez modifier quelques paramètres pour que les mouvements du joueur fonctionnent correctement. abord, nous devons accéder aux paramètres du projet Under the physics. Assurez-vous de vérifier la transformation automatique. Et nous devons modifier un peu le script. Ici, dans le code b, nous devons modifier la position initiale, qui est la position de transformation , au lieu d'utiliser la variable du corps rigide dans cette position et la sécuriser. Et maintenant, cela devrait résoudre le problème selon lequel l'utilisateur ne peut pas déplacer l' avion sur la nouvelle version de Unity. Dirigons donc l'objet de jeu Visual enfant vers l' emplacement Visual Child de l'inspecteur, puis nous devons modifier sa transformation. Ensuite, nous devons modifier la variable de rotation, et nous devons uniquement modifier la valeur de rotation z. Fixons-le simplement à la valeur et multipliez-la par la valeur bancaire. Et puis appliquons cette rotation. En utilisant la variable MRB, nous pouvons accéder à la méthode de rotation par déplacement, et cela comme pour un quaternion en tant que paramètre Configurons donc une nouvelle valeur de quaternion en utilisant sa classe, puis ajoutons l'uleur et passons la rotation Et pourquoi modifions-nous la rotation en z ? Parce que si vous voyez ici dans l'éditeur et que vous sélectionnez l'objet fissile du jeu, si nous tournons sur l'axe Z, vous pouvez voir que le vaisseau est incliné, comme s'il se déplaçait latéralement Et c'est exactement ce que ce code va faire. Et ici, seule la valeur x de la vélocité qui influencera l'inclinaison, puis nous convertissons la valeur de rotation en quaternion et la transmettons à la méthode de rotation par mouvement du corps rigide OK, sauvegardons le script et retournons à Unity pour le tester. Comme vous pouvez le constater, il y a un léger mouvement bancaire Augmentons donc la valeur bancaire et faisons-la deux fois par rapport à la valeur précédente. Et testons cela à nouveau. Maintenant, on le voit mieux, mais le système bancaire est inversé. Nous pouvons facilement résoudre ce problème, ajouter un signe négatif à la valeur loc x, et la rotation sera inversée. Alors testons cela à nouveau. Ses opérations bancaires sont désormais correctes, mais le mouvement est un peu binaire. Nous devons donc également résoudre ce problème. Étant donné que nous modifions le corps rigide dans la méthode de mise à jour, il est recommandé de le faire plutôt dans la mise à jour fixe. Je vais donc changer la mise à jour en mise à jour fixe. Et nous devons également modifier le multiplicateur de la vitesse par rapport temps Delta et utiliser plutôt le Delta T fixe par point temporel. Point Tim Delta T est la différence de temps entre l' image d'un cycle de mise à jour, et le temps Delta fixe par points temporels est également la différence de temps, mais entre les étapes physiques entre les étapes de l'unité Enregistrez le script, et testons-le à nouveau. Et maintenant, nous avons un mouvement beaucoup plus fluide, et la rotation bancaire est également très fluide. Voici donc la fin de la leçon sur les mouvements du joueur. 5. 05 Mise en commun temporaire: Dans cette vidéo, nous allons créer une version temporaire de la traction d'objets, afin de pouvoir implémenter un mécanisme de tir et ensuite implémenter le système de traction approprié. Créons un nouveau dossier et nous pouvons le renommer en système de traction. Dans ce dossier, créons un nouveau script C sharp, que nous pouvons appeler pull manager. Ouvrons le script. Supprimons d'abord la méthode de démarrage et de mise à jour par défaut, puis déclarons une variable statique publique pour créer une référence statique afin de faciliter l'accès et définissons le type sur pull manager Appelons simplement cette instance. La référence statique sera disponible sur tous les scripts de ce projet, et elle sera facilement accessible sans utiliser le composant get ou le type fine object. Le champ statique ne peut être occupé que par une seule instance. Toute référence à celui-ci fera toujours référence au même objet. Dans ce cas, ce serait le responsable du pull. Ensuite, créons une méthode d'éveil. Lors de la création d'une référence statique, nous voulons l'initialiser au réveil Le représentant statique sera disponible sur classes d'erreur dans la méthode de démarrage si nécessaire. Pour initialiser la variable, il suffit de taper instance puis de transmettre ce mot clé Cela définira la valeur de la variable statique pour cette classe. Nous devons nous assurer qu' un seul objet utilise le script dans la scène. Ensuite, créons une méthode publique appelée use object. Cela sera utilisé pour récupérer l'objet du pool. Pour le paramètre, nous devons définir le premier sur un objet de jeu appelé OBJ Le second serait un arbre vectoriel appelé pause, le dernier serait un quaternion appelé rotation Pour l'instant, nous allons simplement instancier un objet dans cette méthode Mais plus tard, nous allons remplacer le code par le système de traction. Passons la pause OBJ et la rotation aux arguments d' instanciation Mais nous devons changer le type de retour en objet, afin de pouvoir renvoyer les objets de jeu instanciés Ajoutons le mot-clé return avant le code d'instanciation. De cette façon, nous transmettrons l' objet instancié D'accord. Sauvegardons le script, et pour la méthode suivante, nous voulons créer une méthode d'annulation publique appelée objet de retour. Cela va être utilisé pour retirer l'objet de la scène et le remettre dans la piscine. Mais pour l'instant, nous allons détruire l'objet du jeu, et plus tard, nous remplacerons le code une fois que nous aurons correctement implémenté le système de mise en commun. Enregistrez le script, et revenons à Unity. Maintenant, créons un nouvel objet de jeu vide et renommez-le en pull manager, puis ajoutons le script pull manager ce nouvel objet de jeu C'est ainsi que s'achève cette vidéo. D'accord. 6. 06 Objet scriptable pour armes: Dans cette vidéo, nous allons créer l'objet scriptable qui contiendra les caractéristiques de l'arme, telles que les dégâts et la cadence de tir, et cet objet scriptable sera utilisé la fois par le joueur et par les Créons maintenant un nouveau dossier dans le dossier des scripts, et appelons-le objet scriptable Et dans ce dossier, créez un nouveau script C sharp, que nous appellerons « profil de tournage ». Dans la console, un message d' erreur indique que nous avons deux écouteurs audio dans la scène Sélectionnons la caméra à objets au sol et retirons le composant d' écoute audio qui s'y trouve L'erreur aurait dû disparaître maintenant. Ouvrons le script du profil de tournage. Nous pouvons supprimer en toute sécurité les méthodes de démarrage et de mise à jour, et nous devons maintenant déclarer quelques variables flottantes publiques. Le premier serait la vitesse, puis la cadence de tir, l'intervalle de dégâts , le taux de destruction pour retirer la balle en quelques secondes si elle ne touche rien, et le degré de propagation. Nous devons également créer un entier public pour le montant. C'est pour décider combien de balles nous voulons tirer par intervalle en secondes. Nous devons également ajouter un attribut, afin de pouvoir instancier l'objet scriptable dans le panneau du projet avec menu de création d'actifs de type crochet, puis nous devons passer argument de chaîne comme paramètre de nom de fichier Je vais l'appeler shoot profile, et pour le second argument, qui est le nom du menu. Disons simplement que c'est un profil de tournage. Je vais ajouter l'argument optionnel, qui est l'ordre dans lequel le menu doit être affiché comme un. Il y a une erreur car je dois taper le nom du paramètre, qui est le nom du fichier, puis l'attribuer. Pour la deuxième chaîne, le nom du paramètre est le nom du menu. Configurons-le et je vais le fermer pour pouvoir le sauvegarder. Revenons à Unity . À la racine des actifs, créons un nouveau dossier que nous pouvons appeler « profil d'arme ». Dans ce dossier, nous pouvons créer le profil, qui est en fait une instance de l'objet scriptable que nous venons de créer Mais il y a une chose que j'oublie. Nous devons ouvrir à nouveau le script du profil de tournage. Ici, nous devons changer la classe de base d'un comportement mono à un objet scriptable Sauvegardons cela et cette fois, cela devrait fonctionner. Retournons à Unity et accédons au dossier des profils d'armes. Si nous cliquons ici avec le bouton droit de la souris, puis que nous allons dans le menu de création, nous aurons le menu du profil de prise de vue en haut. Cliquez sur le menu pour créer un profil, et renommons-le en joueur de soulignement de niveau 1 Définissons maintenant le profil. Pour ce qui est de la vitesse, je vais régler ce 230 et régler les dégâts à une cadence de tir de 20,1, et nous pouvons régler l' intervalle de 20 parce que nous voulons que le joueur tire en continu Taux de destruction, nous pouvons le régler à 2 secondes et trois degrés pour le spread et fixer le montant à un. Dans ce niveau, il ne tirera qu'une seule balle par cadence de tir. Dans la prochaine vidéo, nous allons continuer à travailler sur les mécanismes de prise de vue. OK. 7. 07 Mise en place de puces: Dans cette vidéo, nous allons préparer le bullet prefet, et la balle elle-même, c'est en fait un sprite Si nous accédons au dossier des sprites, il existe un actif appelé puces Si nous ouvrons l'éditeur de sprites, nous avons trois diapositives de sprites Le noyau, la colle et une forme différente de balle. Et ce devrait être un cercle de noms, donc je vais le renommer application du prix permettra d'enregistrer la modification apportée au sprite et d'étendre le sprite à puces Mais avant d'ajouter le sprite, créons un objet de jeu vide, qui servira de base au Bullet Perfect. Assurez-vous également que l'objet du jeu z ou l' axe avant sont orientés dans la même direction que le mot z, comme indiqué ici sur le Gizmo N'oubliez pas de régler le gadget ici sur local. Ajoutons ensuite un collisionneur à capsules. Et un élément de carrosserie rigide dessus. Sous le composant rigide du corps. N'oubliez pas de désactiver l'option d'utilisation de la gravité, mais de laisser l'iskinmatic désactivée, car nous définirons le flocit avant la télécopie plus tard Une fois le sprite à puces développé sur le panneau du projet, faisons glisser le sprite à base de puces vers l'objet de jeu vide dans la hiérarchie Cela fera du sprite l'objet enfant. Si le sprite enfant n' est pas centré, il suffit de mettre tout l'axe de position à zéro, et nous devons faire pivoter le sprite sur l'axe X de 90 degrés Il peut donc être visualisé correctement depuis le haut. Réglons ensuite la couleur du sprite à puces sur bleuâtre. Ensuite, je vais également ajouter l'objet luminescent pour qu'il soit l'enfant de l'objet de jeu vide. Réglez la position x sur zéro et faites également pivoter l'axe x sur 90. Réglons la couleur sur la même couleur bleutée. Nous pouvons maintenant voir une légère lueur sur la balle dans la vue du jeu. Pour rendre les choses plus intéressantes, nous pouvons remplacer le matériau de rendu Bullet and Glow Sprite par cet additif pour sprites que j'ai inclus dans l'emballage Il s'agit essentiellement d'un matériau additif à particules mobiles. Maintenant, appliquons le matériau sur le matériau à base de balles. Et aussi au matériau de rendu Glow Sprite. Je vais redimensionner la lueur à environ 1,5 sur les axes x et y. Ensuite, je vais ajuster la taille du collisionneur à capsules pour qu'il corresponde parfaitement au Bullet Sprite Commençons par modifier le rayon. Lorsque je supprime la valeur, il est clair que la direction n' était pas alignée sur le sprite Pour résoudre ce problème, changeons la direction du collisionneur à capsules sur l'axe z. Le collisionneur à capsules est maintenant orienté dans la bonne direction. Modifions la valeur de hauteur à environ 0,39 et le rayon à 0,1 Cela correspond parfaitement au sprite. Nous avons maintenant configuré la puce. Enregistrons-le dans le préfabriqué Mais d'abord, créons un nouveau sous-dossier dans le dossier Nous pouvons appeler ce dossier une arme. Renommons l'objet du jeu en bullet et définissons également sa balise two bullet Faisons-le ensuite glisser vers le dossier des armes. OK. Nous devons maintenant créer un script. Créons un nouveau sous-dossier dans le dossier des scripts et renommons-le en armes Dans le dossier, créons un nouveau script C sharp appelé bullet Move. Le script gérera le mouvement de la balle. Ouvrons le script. Ici, nous devons déclarer quelques variables, et la première sera une variable flottante publique appelée speed. Le second sera un corps rigide privé, que nous pouvons appeler MRB Et dans la méthode de démarrage, initialisons la variable MRB en utilisant la méthode get component avec le type de corps rigide, et cela renverra le premier corps rigide attaché du bullet game Nous allons également remplacer la mise à jour par une mise à jour fixe. Dans le cadre de la méthode, nous allons déplacer la balle en utilisant les propriétés de vélocité du corps rigide. Tapons simplement la vitesse MrBT, puis nous devons passer un vecteur ici Nous voulons nous assurer que la balle va se déplacer en fonction de l'avant ou de sa direction z locale. Heureusement, l'unité nous permet déjà de suivre l' orientation locale dans l'espace mondial, savoir transformer point en avant, et nous voulons multiplier cette valeur par la rapidité. Sauvegardons donc le script, et revenons à Unity. Je vais joindre le script aux préférences des puces. OK. Et puis réglons la vitesse 210. Sauvegardons la scène et testons cela. Et comme vous pouvez le constater, la balle se déplace dans la bonne direction le long de son axe avant. Assurons-nous également que l' option de déclenchement de la capsule Cleder of the bullet is est cochée Épargnons les préfabriqués à puces. Si vous utilisez une version Unity inférieure à 2018 0.3, vous pouvez simplement cliquer sur Appliquer dans l'inspecteur avec le préfabriqué sélectionné Et pour les versions 2018 0.3 et supérieures avec le préfabriqué sélectionné Vous pouvez sélectionner le bouton droit l'inspecteur , puis cliquer sur Appliquer A. Et nous voulons également activer l'option de déclenchement sur le player collider Nous pouvons maintenant enregistrer la scène, ce qui met fin à la configuration du préfabriqué à puces. OK. 8. 08 Prise de vue automatique: Dans cette vidéo, nous allons créer le script de tournage, et nous devrions déjà avoir des préfabriqués temporaires en classe de montage et à puces jusqu'à présent Maintenant, dans le dossier des armes, créons un nouveau script C sharp. Et nous pouvons le renommer en Auto Shoot. Ensuite, ouvrons ce script. Et dans ce script, au lieu d' utiliser la méthode de mise à jour pour boucler un code, nous allons utiliser une routine de base. Une routine C est une méthode spéciale qui renvoie des types d'énumérateurs, qui peuvent suspendre l'exécution et redonner le contrôle à Unity, puis continuer là où elle s'est arrêtée dans le cadre suivant Une coroutine peut également boucler son code avec un intervalle spécifique, que ce soit pour le boucler à chaque image ou à chaque seconde Cela rend la coroutine très utile dans le développement de jeux. Je vais vous montrer comment créer et utiliser une coroutine. Créons une nouvelle méthode avec un type d'énumérateur de retour, et appelons-la séquence de prise Dans cette co-routine, je vais créer une instruction while avec un mot clé true comme condition. Dans la déclaration WIL, imprimons simplement la prise de vue sous forme de message. Cela imprimera le message dans la console, et pour chaque routine, nous devons indiquer le déroulement de l'exécution en utilisant un mot clé yield return. Dans cet exemple, tapons simplement Yield return null. Cela bouclera tout le bloc de chaque image. Sauvegardons le script. Retournez à l'unité. Et je vais joindre le script au joueur. Ouvrez maintenant la fenêtre de la console afin que nous puissions examiner les messages, et laissez-nous tester cela. Il semblerait que j'ai oublié d'exécuter la routine de base. Revenons au script et nous devons appeler cette co-routine dans une méthode intégrée. Laissez-nous l'exécuter dans la méthode de démarrage. Et pour exécuter une routine co, nous devons l'appeler en utilisant une méthode appelée routine de démarrage et passer la routine co en argument. Enregistrez à nouveau le script et laissez-nous le tester à nouveau. Et maintenant, le message de tournage est imprimé à chaque image. Revenons maintenant au script, disons que nous voulons boucler le code toutes les 2 secondes. Ensuite, nous pouvons instancier une nouvelle classe en tapant une nouvelle attente 4 secondes après l'instruction return et en passant deux comme valeur de poids en secondes. Économisez et revenons à l'unité. Je vais vider la console et tester à nouveau. Et maintenant, le message de tournage est imprimé toutes les 2 secondes. Vous pouvez donc voir à quel point Coroutine est utile. Je vais remettre ça à non, et nous laisser commencer à travailler sur le script de tournage. Nous devons donc d'abord déclarer quelques variables. Le premier serait un objet de jeu public pour la pré-référence à puces. Nous pouvons appeler cela des préfeps de puces . Ensuite, ce sera un public avec une sorte de transformation, et ce sera le point de feu ou la position d'apparition de la balle. Nous aurons également besoin d'une variable publique avec un type de profil de tournage, nous appellerons simplement profil de tournage. Cela définira les caractéristiques de prise de vue. Nous aurons également besoin de quelques variables privées. Le premier sera le type de float et nous pouvons le nommer spread total. Et nous voulons également créer un type variable de poids pendant les secondes appelé taux et intervalle. Cela sera utilisé pour la boucle de routine de la séquence de prise de vue et le taux de retard. Remplaçons le début en inactivé et ajoutons également une méthode désactivée Il s'agit essentiellement de la méthode inverse de l'inactivation. Il est appelé chaque fois que le script est désactivé, ce soit en passant de la valeur active à false soit en cas de destruction des objets. Dans Disabled, nous voulons exécuter la méthode stop all coroutines Cela arrêtera l'exécution de toutes les coroutines dans cette instance de classe, ce qui arrêtera la séquence de prise de vue Dans la méthode on enable, initialisons la valeur de l'intervalle en tapant interval equals new weight pendant quelques secondes et nous pouvons transmettre un float à partir du profil de prise de vue, appelé intervalle Pour ce qui est de la cadence, nous voulons faire de même, mais nous voulons plutôt dépasser la cadence de tir du profil de tir. Je vais également vérifier si le point de feu est nul. Ensuite, nous voulons définir sa valeur sur la transformation du propriétaire du script. Maintenant, créons la méthode de prise de vue. Nous voulons transmettre un nombre flottant pour l'angle de propagation des balles. Supprimons cette ligne d'impression. Dans la méthode de prise de vue, je vais créer pour la boucle, et pour la longueur, je vais utiliser le montant du profil de prise de vue. J'ai fait une erreur ici. Ce code de boucle ne devrait pas se trouver ici, mais il devrait se trouver dans la boucle while de la routine de séquence de prise de vue. Laissez-nous le déplacer. Dans le cadre de la méthode shoot, créons une variable d' objet de jeu locale appelée TM, afin de pouvoir conserver une référence à la puce d'apparition Ensuite, nous pouvons utiliser le gestionnaire de traction en accédant à sa référence statique, appelée instance, puis en utilisant l'objet use pour générer les préfabriqués à puces Et utilisez la position et la rotation du point de feu. Ensuite, nous voulons faire pivoter le pion en utilisant la méthode de rotation par transformation, nous voulons utiliser la deuxième surcharge de cette méthode, qui nécessite l'axe de rotation prévu et la valeur de l'angle Nous pouvons passer le facteur trois points vers le haut dans l'axe, qui sera l' axe y et l'argument angle. Appelons cette méthode de prise de vue à l'intérieur de la routine de co-routine à quatre boucles. Mais avant cela, déclarons un flottant appelé angle avant la boucle et fixons sa valeur à zéro. Et nous allons calculer l'angle en fonction de la quantité et de la valeur d'écart à partir du profil de prise de vue. Nous devons d'abord définir la valeur totale du spread. Dans un enable, définissons-le. écart total serait la valeur de l'écart du profil de tournage multiplié par le montant du profil de tournage. Je vais créer une instruction if pour vérifier si le montant est supérieur à un et placer les quatre boucles dans le bloc d'instructions, puis nous pourrons calculer l'angle. L'angle serait le spread total multiplié par le I ou la valeur de l'indice de boucle divisée par le montant du profil de prise de vue. Mais nous devons le convertir en valeur flottante afin d'avoir une valeur décimale et de modifier la valeur de rotation Je vais vous expliquer cela. Si nous avons la direction de prise de vue, si le montant est égal à un, nous pouvons simplement le tirer droit vers le haut. Mais s'il y en a plusieurs, nous devons le faire pivoter en fonction de son indice. Par exemple, la deuxième puce serait pivotée comme suit, mais nous devons faire pivoter toutes les puces de la moitié de la valeur de l'écart total, afin que la distribution du spread soit agréable et centrée Si nous avons plus de balles, disons, alors si nous ne changeons pas la rotation, cela ressemblera à ceci Les balles ne s'étendront que légèrement vers la droite. Lors de la prise de vue, nous devons changer l'angle pour compenser cela. Décrémentons la valeur de l'angle par la valeur de l' écart total divisée par deux Ensuite, nous voulons renvoyer le taux à l'intérieur de la boucle. Et en dehors de la boucle, changeons le yield return le en yield return interval. Unité vectorielle, configurons maintenant la prise de vue automatique. Script sur le lecteur. Tout d'abord, nous pouvons transmettre le profil de tournage que nous avons créé auparavant à l'emplacement du profil de tournage. OK. Et aussi les préfabriqués à puces vers le slot préfabriqué Pour le point de tir, nous devons réussir une transformation, et dans l'objet du jeu pour joueurs, j'ai déjà ajouté un enfant vide appelé Shoot Point et défini sa position pour qu'il soit devant le navire. Lorsque les coordonnées sont définies sur local, assurez-vous que le z ou la direction avant du point de prise de vue pointe la même direction que l'axe z du monde. Affectons-le au champ du point de feu. Dans l'objet du profil de prise de vue, nous avons fixé la valeur à trois. Laissez-nous le tester et il ne tournera pas parce que j'ai oublié d'appeler la méthode de prise de vue. Ajoutons simplement un appel à la méthode de prise de vue et transmettons la valeur de l'angle. Je vais commenter temporairement le changement de code, et testons-le. Il semble que nous ayons un problème avec le pull manager ici. Et ce point de feu doit être égal à zéro. Comme nous exécutons la routine de base la méthode non activée, il se peut que nous ayons une condition de course avec l' initialisation du gestionnaire de traction ici au réveil Pour résoudre ce problème, nous pouvons simplement retarder un peu la séquence de prise de vue. Nous pouvons simplement copier la ligne du taux de retour et la coller au début de la routine. Revenons à Unity et appuyons sur Play. Maintenant, il tourne, mais nous avons un léger retard, ce qui entraîne une étrange distribution de spread. Revenons au script et résolvons le problème. Ajoutons d'abord une instruction if pour vérifier le taux de rendement. Fixons une condition. Si la cadence de tir est supérieure à zéro, nous voulons exécuter le taux de rendement. Sinon, nous ne voulons pas l'exécuter, donc la boucle s'exécute sur le même cadre. Maintenant, testons à nouveau, et j'ai oublié de remettre la cadence de tir à zéro. Remettons-le à zéro et testons-le à nouveau. Et maintenant, comme vous pouvez le voir, il se déclenche correctement, mais la propagation n'est pas centrée. La balle se propage vers le côté droit. Revenons donc au script et corrigeons ce problème. Nous pouvons maintenant annuler cette ligne, et en gros, cette ligne décalera l'angle de moitié par rapport à la valeur totale de l'écart Testons cela à nouveau. Maintenant, le spread est effectivement décalé, mais maintenant il est légèrement décalé vers la gauche. Nous devons compenser ce décalage en soustrayant la valeur correspondant à la valeur écart du profil divisée par la valeur profil divisée par la du profil de prise de vue Revenons à l'unité et testons cela à nouveau. Maintenant, le spread est bien centré. Si vous souhaitez obtenir un débit plus rapide, nous pouvons réduire la valeur de l'intervalle. Abaissons-le à 0,1, afin de créer différents niveaux d'armes avec caractéristiques différentes en essayant différentes valeurs dans le profil. Et cela s'applique également au comportement des armes ennemies. Par exemple, si nous voulons créer une puce qui se propage de manière séquentielle, nous pouvons définir le taux sur une certaine valeur Par exemple, fixons le montant à dix, la cadence de tir à 0,15 et l'intervalle à deux Nous avons maintenant un schéma de tir intéressant et nous pouvons certainement utiliser ce type de schéma pour l'ennemi. Avec un seul script, nous pouvons créer un modèle différent pour différentes armes. OK. 9. 09 Système de santé Partie 1: Dans cette vidéo, nous allons mettre en œuvre le point de départ du système de santé. Et d'abord, nous devons créer une balle pour l'ennemi. Passons donc au dossier de préface sous le dossier des armes Nous pouvons sélectionner les préfeps de puces et les dupliquer en appuyant sur Ctrl D, puis renommons les préférences en balles ennemies Et en sélectionnant les préférences de balle ennemie, nous pouvons remplacer l'étiquette située sous l'inspecteur balle ennemie et pour différencier le visuel, nous pouvons étendre la balle ennemie, sélectionner l'objet de jeu basé sur la balle Et ici, sous l'inspecteur, remplacez la couleur du sprite par une couleur légèrement orange, copions la couleur, puis collons-la dans l'autre couleur de l'objet de jeu du rendu des sprites, appelée Donc maintenant, si vous sélectionnez les balles préfabriquées ennemies, vous voyez qu'ici, pour l'inspecteur, la couleur de la balle est différente celle de la balle du joueur Ensuite, créons le script de santé. Passons donc au dossier des scripts et à l'intérieur du dossier des scripts. Créons un nouveau dossier, que nous pouvons appeler le dossier gameplay. Et dans le dossier de jeu, créons un nouveau script C sharp, que j' appellerai « système de santé ». Et ouvrons le script. Et comme d'habitude, nous devons déclarer quelques variables. Et d'abord, déclarons une nouvelle variable de chaîne privée, et appelons la balise variable. Et ce sera le bullet tag qui sera détecté chaque fois qu'une balle touchera cet objet de jeu auquel ce script est attaché. Je vais changer le nom en nom de tag car le tag a été réservé par Unity. Et nous voulons définir le nom du tag ici dans la méthode de démarrage. Mais avant de définir le nom de la balise, nous voulons créer une autre variable, qui est un type de lingot ayant une portée publique Appelons simplement this is my, et nous allons attribuer différentes balises en fonction de la valeur de ce lingot ici Et nous pouvons définir la valeur par défaut true car nous allons attribuer ce script du système de santé à de nombreux objets ennemis, et nous n'avons qu'à cocher celui-ci sur le préfabriqué du joueur. Je vais donc définir cette valeur par défaut sur true. Donc, au début, nous voulons créer une condition if et vérifier si la valeur du lingot est vraie Et si nous voulons vérifier la fausse valeur de ce lingot, nous pouvons ajouter un point d' exclamation au recto Et avec ce point d'exclamation, cela permettra de vérifier si la valeur du lingot est vraie ou Et si la valeur de l'ennemi est vraie, nous voulons définir le nom du tag sur bullet. Et ajoutons une condition L, et pour la condition L, nous pouvons définir le nom du tag comme balle ennemie. Alors maintenant, avec cette option bulon ici, nous allons définir une balise différente Donc, cet objet de jeu auquel les scripts sont attachés, nous saurons plus tard quelle puce nous devons prendre en compte dans la méthode de déclenchement. Et nous pouvons simplement supprimer la méthode de mise à jour ici, et nous devons créer une nouvelle variable flottante publique, que nous pouvons appeler MX health Cette variable définira l'état de santé de départ de chacun des systèmes de santé. Nous pouvons définir la valeur par défaut sur dix, et ajouter un autre type de variable publique à un objet de jeu, et appelons simplement cela un effet de frappe. Cela concerne les préfabriqués à effets que nous allons instancier chaque fois que cet objet est touché par une balle, et nous voulons ajouter une autre variable d'objet de jeu. Nous pouvons donc simplement ajouter une virgule ici, pouvons donc simplement ajouter une virgule puis taper la barre de santé du nom, ce qui déclarera deux variables différentes dans l'inspecteur, et nous allons créer une variable flottante privée Et nous pouvons simplement appeler cela souligner la santé actuelle. Et ce sera la variable locale qui sera calculée. Lorsque le jeu sera lancé, je vais supprimer le trait de soulignement ici pour des raisons de cohérence des noms Ensuite, créons la méthode untrigger enter. Et dans cette méthode untrigger enter, nous voulons vérifier les autres collideurs qui sont passés en paramètre À l'aide d'une instruction if, nous voulons vérifier sa balise, et l' autre objet du jeu sera celui auquel jeu script du système de santé est attaché. Nous pouvons donc utiliser la méthode de comparaison des balises pour vérifier leur balise, et nous pouvons simplement passer le nom du tag comme argument ici, et cela vérifiera si l'autre objet du jeu possède le tag que nous avons déclaré au début ici. Et si c'est vrai, nous voulons endommager l'instruction If. Mais au lieu de calculer les dégâts dans cette instruction If, créons une autre méthode, et je vais définir le champ d'application du type de retour public sur void, et appelons-le simplement take damage. Et j'expose volontairement cette méthode en utilisant une portée publique, afin que nous puissions l'appeler ultérieurement à partir d'un autre script, tel que le script de bombe et l'autre script qui n' utilisera pas le déclencheur classique pour faire des Et pour la méthode take damage, nous voulons transmettre un paramètre qui est un type de flotteur, et nous pouvons simplement appeler cela damage. Cette méthode peut donc prendre valeur différente pour la valeur des dégâts. Et dans ce mode de prise de dégâts, nous pouvons simplement soustraire la variable de santé actuelle avec la valeur des dégâts transmise comme paramètre Et ici, dans le déclencheur, entrez, sous la déclaration, nous pouvons simplement exécuter la méthode de prise de dégâts, et nous devons transmettre la valeur des dégâts ici Mais nous n'avons pas de valeur précise ici. Et en ce qui concerne les dégâts, nous allons mettre la valeur des dégâts dans le nom de la balle chaque fois que nous instancions la Mais nous devons modifier le script de tournage automatique. Passons donc au script de tournage automatique ici. Dans la méthode de tir, chaque fois que nous lançons la balle, définissons le nom de l'objet, qui est le nom TM, et nous pouvons obtenir la valeur des dégâts à partir de l'objet du profil de tir, et obtenons la variable de dégâts flottants ici, et nous pouvons simplement exécuter la méthode à deux chaînes Cette valeur flottante sera donc convertie en chaîne, afin que nous puissions appliquer la valeur des dégâts sous forme de nom. Et pour en revenir au script du système de santé, chaque fois que nous subissons des dégâts causés par une balle, nous pouvons maintenant créer une valeur flottante en passant le nom de l'objet de la puce à une valeur flottante. Créons maintenant une variable flottante temporaire appelée damage au-dessus de la méthode take damage. Et prenons l' autre nom du point, qui sera le nom de la puce. Mais nous voulons l'analyser en une valeur flottante. Nous pouvons donc taper le type float devant l'autre nom du point. Ensuite, exécutez la méthode pars et transmettez le nom ou la chaîne comme argument de cette méthode pars. Ainsi, le nom de la puce sera converti en une valeur flottante, qui est en fait un nombre que nous enregistrons dans le script de prise automatique Et nous pouvons transmettre cette valeur de dégâts flottants comme argument à la méthode de prise de dégâts ci-dessous ici. Maintenant, sauvegardons le script, et essayons-le. Retournons à l'unité et retournons à l'intérieur de l'unité. Je vais aller dans le dossier des profils d' armes ici et je vais modifier le soulignement du joueur au niveau 1, profils de tir ici, changer le nombre à deux, et régler la cadence de tir à zéro Et actuellement, comme vous pouvez le constater, les dégâts sont fixés à un. Je vais donc laisser la valeur des dégâts telle quelle. Maintenant, créons un nouvel objet cubique ici dans la scène, et nous pouvons le déplacer le long de l'axe z, vers l'avant du vaisseau du joueur, puis ajoutons le script du système de santé dans ce cube ici. Et comme vous pouvez le constater, la valeur Mx health est définie par défaut à 210, et pour en revenir au script du système de santé, nous voulons remplacer la méthode de démarrage par nous voulons remplacer la méthode de démarrage par une méthode non activée. Et inspectez cette méthode inactivable. Définissons la variable de santé actuelle dans la variable de santé mixte. Ainsi, chaque fois que cet objet est réactivé, nous voulons réinitialiser la variable de santé actuelle. Revenons donc à Unity, et ici, sous l'inspecteur, je vais changer le mode de débogage afin que nous puissions voir la valeur de santé actuelle et nous assurer que mon bulon est vérifié Et configurons également les options de déclenchement du box collider à activer Et lançons le jeu. Et maintenant, comme vous pouvez le constater, chaque fois que la balle touche le cube, la santé actuelle est réduite. Et actuellement, nous tirons deux balles à la fois, sorte que la santé est réduite à chaque fois par la valeur du che Maintenant, comme vous pouvez le constater, le système de santé fonctionne, mais je dois vous rappeler pourquoi n'ai-je pas mis un élément rigide dans ce cube ici ? Parce que sur l' objet du jeu de balles ici, dans le préfet, vous pouvez voir que des éléments de carrosserie rigides y sont déjà attachés. Ainsi, pour que la méthode d' entrée sans collision ou de déclenchement fonctionne avec chaque déclencheur ou chaque collision, un composant rigide doit être fixé à l' un des objets composant rigide doit être fixé à l' un Sinon, cela ne fonctionnera pas. Mais bien entendu, plus tard, lors de la conception de l'ennemi, nous allons également placer un corps rigide dans l'objet de jeu ennemi, car l'ennemi va se déplacer. Donc, pour les objets qui se déplacent, nous devons y fixer un composant de carrosserie rigide pour des raisons d'optimisation. Et comme vous pouvez le voir précédemment, lorsque nous effectuons des tests, l'état de santé actuel fonctionne actuellement. Et dans la prochaine vidéo, nous allons étendre ce système de santé et créer le système de mort et ses effets. 10. Effet à 10 coups: Dans cette vidéo, nous allons continuer à travailler sur le script du système de santé. Ouvrons maintenant le script du système de santé. Reprenons là où nous nous sommes arrêtés. Et maintenant, créons l'effet it. Et pour créer l'effet « it », modifions le script pull meager Ouvrons le script de mesure de traction, et dans le cadre de la méthode d' objet wturn, ajoutons un autre paramètre de type f. Nous pouvons appeler ce délai, et ajouter une valeur par défaut de zéro Nous n'avons donc pas besoin de saisir le délai à chaque fois. Et pour l'instant, nous voulons transmettre la valeur du délai comme heure sur l'argument de la méthode de destruction. Nous pouvons donc simplement ajouter un deuxième argument à la méthode de destruction , puis transmettre la valeur du délai. Et cela ajoutera un délai lors de la destruction de l'objet en utilisant la méthode de destruction ici fonction de la valeur du délai en secondes. Et revenons au script du système de santé. Et ici, sous le déclencheur, nous ne pouvons pas détecter le point de collision car nous utilisons la méthode d'entrée déclenchée et la position de collision ou la position d'impact n'est disponible qu'avec la méthode de saisie de collision Mais il existe un moyen de le calculer. Et pour le calculer, nous pouvons utiliser la méthode du point sur les limites le plus proche de l'objet du collisionneur Créons donc une variable temporaire avec un type de facteur trois, et appelons simplement cette position de déclenchement. Et nous pouvons utiliser l'autre objet du collisionneur ici. Et à partir de ce collisionneur, nous voulons utiliser le point le plus proche sur les limites, d'obtenir le point le plus proche du boîtier de délimitation du collisionneur attaché Cela détectera donc la position du déclencheur ou la position de collision lors l'utilisation de la méthode de saisie du déclencheur. Et ici, nous devons passer une position et nous pouvons passer cette position de l'objet du jeu. Transformons donc simplement la position, et nous devons également définir la direction de cet effet de frappe. Créons donc une autre variable temporaire du facteur trois, que nous pouvons simplement appeler direction. Pour obtenir cette valeur, nous pouvons simplement soustraire la position du déclencheur, qui est la position la plus proche sur limites de l'autre objet qui touche cet objet Ensuite, soustrayez cette position de déclenchement avec cette position du support du script, qui est la position transformée Et avec ce calcul, nous obtiendrons la direction à partir de la surface vers laquelle le collisionneur fait face Et avec ces deux vecteurs calculés, nous pouvons maintenant instancier l'effet hit Maintenant, nous pouvons simplement créer une variable d' objet de jeu temporaire, et nous pouvons simplement l'appeler F x. Utilisons cette instance dans le gestionnaire d' extraction et nous pouvons utiliser la méthode use object, et nous devons transmettre les préfabriqués, savoir la variable hit e x. Passons donc simplement la variable d'effet hit dans le paramètre de l'objet du jeu. Et pour la position, nous voulons passer le facteur de position de déclenchement. Et pour la rotation ou la direction de la particule ou les effets d'impact, nous pouvons utiliser la méthode de rotation du look issue de la classe des quaternions , puis passer la direction du facteur trois Cela calculera la rotation à partir du facteur de direction et convertira cette valeur en quaternion, afin que nous puissions l'utiliser comme rotation de l'effet de frappe que nous allons instancier ici Essayons maintenant d' utiliser cette valeur. Mais si elle est inversée, nous pouvons toujours inverser la valeur de direction. Et nous devons également détruire l'effet de frappe dans un délai d'une seconde. Ainsi, chaque fois que l' animation des particules cesse de jouer, nous pouvons détruire l'objet du jeu ou le retirer de la scène. Utilisons donc à nouveau le gestionnaire de traction, accédons à la référence statique de l'instance, et nous pouvons utiliser la méthode de l'objet de retour. Et cette fois, nous voulons transmettre l'objet du jeu F x, non le préfabriqué hit fx, car nous voulons supprimer celui que nous sommes instancier, et pour le délai, nous pouvons simplement transmettre la valeur de un, ce qui retardera la destruction Et ici, nous devons également détruire l'autre objet du jeu, qui est la balle. Alors maintenant, détruisons simplement l'autre objet du jeu ici. Je vais mettre le code ci-dessous pour prendre des dégâts ici. Et maintenant, nous pouvons à nouveau utiliser le pull manager. Et c'est une instance de référence statique utilise la méthode de l' objet de retour. Et nous voulons transmettre l'objet du jeu Bullet, afin de pouvoir simplement le récupérer sur l'autre objet du collisionneur, mais obtenir son objet de jeu en utilisant la propriété de l'objet du jeu, et nous ne voulons pas transmettre de valeur, afin qu'il soit détruit immédiatement. Maintenant, sauvegardons le script, revenons à Unity, et essayons-le. OK, il y a une erreur car nous avons oublié de placer les préfabriqués à effet dans l'emplacement préfabriqué du système Sélectionnons donc l'objet du jeu Cube. Et nous pouvons mettre les préfabriqués Sparks ici, et je les ai déjà fournis à partir des ressources initiales que nous avons importées au début du cours Passons donc simplement au dossier des préférences. Sous le X, nous avons les préférences de Sparks. Il suffit donc de sélectionner les préfebs Sparks , puis de les faire glisser vers l'emplacement des effets de frappe Sauvegardons la scène, et essayons à nouveau. Et comme vous pouvez le voir ici, ce parc est créé, en fait, mais nous ne pouvons pas le voir car tous les préfabriqués sont désactivés par défaut Corrigons donc simplement ce problème dans le script du gestionnaire de tirage. Ici, dans la méthode use object, nous devons créer une variable d'objet de jeu temporaire. Et nous pouvons simplement mettre le code instancié ici pour l'assignation temporaire de l'objet du jeu Et nous devons supprimer la commande set active. Ensuite, nous pouvons simplement activer l'objet du jeu en accédant au nom T, puis exécuter la méthode active définie fois l'objet instancié, puis définir la valeur des méthodes actives définies. Nous renvoyons l'objet du jeu , enregistrons le script, revenons à Unity, et réessayons Et maintenant, comme vous pouvez le constater, nous avons une très belle étincelle chaque fois que la balle touche le cube, et comme vous pouvez le constater, elle calcule correctement la position et la direction en fonction de la normale de la surface du collisionneur Et c'est la fin de la configuration des effets à succès. Et dans la vidéo suivante, nous allons configurer la barre de santé ainsi que le système de décès. 11. 11 Système de mort: Maintenant, continuons à travailler sur le script du système de santé, et ouvrons à nouveau le script du système de santé. Et depuis la dernière vidéo, nous avons implémenté l'effet, ce qui nous permet d'avoir un retour visuel chaque fois que la balle touche l'objet. Créons maintenant une nouvelle fonction pour vérifier l'état de santé. Nous pouvons donc simplement taper le type de retour void, et nous pouvons appeler cette méthode checked health. Et dans cette méthode, nous pouvons simplement ajouter une déclaration, et nous voulons vérifier la valeur de santé actuelle. S'il est inférieur ou égal à zéro, j'ajoute une comparaison inférieure, car parfois la valeur de santé actuelle peut être inférieure à zéro. Si le substrat ou la valeur des dégâts sont supérieurs au dernier montant de points de vie Ainsi, par exemple, si le dernier montant de santé actuel est de un et que les dégâts sont de deux, il deviendra négatif de un. Nous devons donc nous assurer de vérifier si la valeur est inférieure à zéro. Et si la santé actuelle est inférieure ou égale à zéro, alors nous voulons détruire l'objet du jeu ou nous voulons faire mourir ou détruire cet objet de jeu ou cette entité . Voici donc la méthode de santé actuelle. Créons quelques commentaires pour le code que nous allons créer plus tard. Et dans un premier temps, nous allons créer le code pour détruire ou faire mourir cet objet de jeu. Et nous voulons également vérifier s'il s'agit d'un ennemi, puis nous voulons ajouter un point ou un score. Et maintenant, créons le système de mort. Retournez donc à Unity et créons un nouveau script dans les scripts, puis dans le dossier de jeu. Créons un nouveau script C Sharp, que nous appellerons système de mort. Et nous voulons également créer un autre script C sharp, nous pouvons appeler create object, et ce script de création d'objet sera utilisé pour instancier un autre objet lors de la mort d'un objet Ainsi, lorsqu'il y a un objet que nous voulons détruire, lorsque le système de mort est invoqué, nous pouvons déclencher cet objet de création pour créer un autre objet , tel qu'une pièce de monnaie ou une explosion. Et maintenant, ouvrons d'abord le script du système de mort. Et supprimons simplement les méthodes de démarrage et de mise à jour. Et nous devons déclarer quelques variables, et j'ai déjà préparé les variables. Je vais donc coller ceci et l'expliquer un par un. Et la première variable est un type de lingot, je vais l' appeler destroy, et je vais définir sa valeur par défaut sur true Cela décidera donc si nous voulons détruire physiquement l'objet du jeu dans la scène ou si nous voulons laisser l'objet activé sur la scène. Par exemple, pour l'ennemi au sol, nous voulons garder l' objet sur place, mais nous voulons ajouter un effet de flamme et d'explosion chaque fois que cet objet du jeu est battu. Et pour la deuxième variable, le type sera un float et nous pourrons appeler destroy après. Cela décidera du nombre de secondes que nous voulons détruire chaque fois que la mort est invoquée. Ce sera donc le délai pour détruire cet objet. Et la troisième variable est un tableau de classes d' objets de création Nous pouvons donc simplement connecter le script de création d'objet au slot plus tard lorsque nous voulons faire tourner l'objet Par exemple, si nous voulons lancer l'explosion et la pièce, nous pouvons ajouter deux scripts de création d'objets différents dans la machine à sous, et chacun incitera à créer un objet de jeu différent dans ce Et la dernière variable sera un type d'événement unitaire. Et c'est pour invoquer une autre méthode à partir d' un autre script chaque fois que la mort survient sur cet objet Nous pouvons donc associer une autre méthode à cet événement d'unité ici. Et cet événement Unity déclenchera l'autre méthode ajoutée à l'entrée de l'événement Unity. Et pour l' événement Unity, nous pouvons simplement appeler la méthode en cas de décès. Et pour utiliser cet événement Unity, nous devons importer l'espace de noms des événements point du moteur unitaire Ajoutons donc simplement ceci ci-dessus ici en tapant using puis Unity Engine point event. Et une fois que nous avons ajouté cet espace de noms ici, vous voyez que le mot clé de l'événement Unity devient bleu et que les lignes ondulées rouges qui le soulignaient n' apparaissent plus. Et sauvegardons le script. Revenons à Unity et sélectionnons l'objet du jeu en forme de cube. Et maintenant, nous voulons y ajouter le système de mort. Voici à quoi ressemble l'événement Unity, et nous pouvons ajouter une entrée. Et pour chaque entrée, nous pouvons ajouter un objet. Et pour cet objet placé dans l'emplacement d'objet ici, nous pouvons déclencher la fonction partir de chacun des composants de l' objet, comme la transformation ou un autre script, et nous pouvons déclencher n'importe quelle fonction à partir de ce composant ici. Ainsi, pour chaque objet que nous ajoutons à cet événement en cas de décès, nous pouvons déclencher la méthode. Et chaque fois que nous ajoutons ces entrées, lorsque cet événement de décès est invoqué, tous les déclencheurs répertoriés dans cette entrée ici seront exécutés. Et en gros, nous devons invoquer cet événement chaque fois que la santé est épuisée. Et maintenant, ajoutons d'abord la méthode de démarrage. Et au début, je veux récupérer tous les collideurs attachés à cet objet de jeu auquel le système de est connecté Nous devons donc créer une variable privée. Et pour le type, nous pouvons simplement utiliser le réseau de collideurs et nous pouvons appeler colliders . Au départ, nous voulons récupérer tous les collideurs, et nous pouvons utiliser le composant get. La forme plurielle, qui est get components, et cela permettra d'obtenir plusieurs collideurs, et cela stockera tous les collideurs dans ce réseau de collideurs Et nous devons transmettre le type, qui est collider, et le mettre entre parenthèses car il s' agit d' une Et maintenant, créons une nouvelle méthode publique avec un type de vide écrit, et nous pouvons simplement appeler cela la mort. Nous voulons maintenant transformer tous les objets d'origine que nous assignons pour créer des variables de tableau d' objets Créons donc simplement une boucle à quatre. Et pour la longueur, nous voulons transmettre la longueur des objets pions Et cela renverra le nombre de scripts de création d' objets que nous assignons au slot d'objets spawn Et nous pouvons exécuter la fonction spawn, mais nous ne l'avons pas encore implémentée Nous allons donc implémenter cela plus tard. Et ci-dessous, nous voulons ajouter une instruction if pour vérifier si la valeur de destroy bullion est vraie, et nous pouvons simplement écrire la version abrégée, taper simplement le mot-clé, et cela vérifiera si la valeur Bulen est Et si c'est vrai, nous voulons détruire l'objet du jeu. Nous pouvons donc simplement utiliser l'instance du gestionnaire de traction, et nous pouvons simplement utiliser la méthode return object et nous voulons renvoyer cet objet de jeu. Et pour le délai, nous pouvons simplement transmettre la variable destroy after. Maintenant, nous voulons désactiver tous les collisionneurs Nous devons donc créer quatre autres boucles ci-dessous, et pour la longueur, nous pouvons simplement utiliser la longueur variable des points du collisionneur, ce qui renverra le nombre de collisionneurs saisis au départ Et désactivons simplement en utilisant l'index de I. Tapez simplement colliders, puis passez l'index entre crochets. Nous voulons accéder à la propriété activée et nous pouvons définir sa valeur sur false, Nous voulons accéder à la propriété activée et nous pouvons définir ce désactivera le composant collider Ainsi, par exemple, pour un ennemi au sol, si nous ne voulons pas détruire l'objet du jeu, nous voulons le laisser sur place. Nous pouvons simplement décocher le bulon de destruction pour empêcher le responsable de tirer cet pour empêcher le responsable de tirer objet de jeu, mais les collideurs seront toujours désactivés, mais les collideurs seront toujours désactivés, nous ne pourrons donc pas tirer plus loin sur l' Et en utilisant le tableau d' objets d'apparition, nous pouvons créer un effet de flamme indiquant que l'ennemi a été vaincu Et sauvegardons le script. Revenons au script du système de santé, et nous voulons ajouter une autre variable. Et pour ce qui est du scope, je vais le mettre en mode privé. Et pour le type, ce sera le système de mort. Et appelons-le simplement script de mort. Et nous voulons récupérer le script de la mort dès le début. Créons maintenant la méthode de démarrage et nous pouvons simplement attribuer le script de mort en utilisant la méthode get component. Et pour le type, on peut simplement passer le système de mort. Et ci-dessous, dans la méthode de vérification de l'état de santé. Et à l'intérieur de la déclaration. Tout d'abord, nous voulons vérifier si le script de mort est nul ou non. Donc, si le script du système de mort est également attaché au même objet de jeu auquel ce système de santé est attaché, alors le script de mort ne sera pas nul. Et si ce n'est pas nul, nous voulons exécuter la fonction de mort. Tapons donc simplement dans ce script la méthode de mort. Et pour le moment, je pense que cela devrait faire l'affaire. Sauvegardons à nouveau le script et revenons à Unity. Et maintenant, essayons de détruire ce cube ici. Appuyons donc sur Play. Nous devons frapper plusieurs fois avant que cet objet ne soit détruit. Et comme vous pouvez le constater, il n'est pas détruit, il y a donc probablement un problème avec le script. Je vais donc publier le jeu, et je vais changer d'inspecteur pour le débugger Et ici, comme vous pouvez le voir, l'état de santé actuel est de moins six, il y a donc un problème avec le script. Et comme vous pouvez le voir, le système de mort est enregistré sur l'emplacement du script de mort. Maintenant, vérifions le script. Je vois qu'il y a un problème dans le script du système de santé. Donc, en gros, le problème est de vérifier l'état de santé ici. Nous avons déjà déclaré la méthode de vérification de l'état, mais cette méthode n'est jamais appelée. Nous devons donc appeler cela «   inside the take damage ». Donc, chaque fois que l'objet touche une balle et subit des dégâts, nous devons vérifier son état de santé. Exécutons donc cette méthode ici en dessous la ligne de santé actuelle et enregistrons le script. Et revenons à l'unité, et essayons à nouveau. Et maintenant, comme vous pouvez le voir, une fois que la santé est épuisée, les objets du jeu sont détruits Et dans la prochaine vidéo, nous allons continuer à travailler sur cette fonctionnalité. 12. 12 Objets de spawn et barre de santé: Dans cette vidéo, nous allons continuer à travailler sur le système de mort pour ajouter une fonction d'apparition d'objets ainsi que la fonction de barre de santé Et maintenant, ouvrons le script du système de mort. Et je vais également ouvrir le script de création d'objet. Donc, dans le script Death System, nous créons déjà un tableau public de création appelés objets spawn Et dans la méthode de mort, nous avons déjà créé les quatre boucles pour parcourir ce tableau d' objets d'apparition, et nous devons exécuter la fonction de génération. Nous devons maintenant passer au script de création d'objets, et nous devons commencer à travailler sur la méthode spawn dans ce script Et ici, je vais coller quelques codes, et je vais les expliquer un par un. La première variable est donc un type d'objet de jeu, et ce seront les préfabriqués que nous voulons créer en cas de décès, qu'il s'agisse d'une explosion, s'agisse d'une explosion, particules de flammes ou d'une pièce de monnaie Et la deuxième variable, c'est un type d'entier, décidera nombre d'objets que nous voulons générer. Et ci-dessous, nous avons l'attribut d'en-tête pour séparer les champs dans l'inspecteur ultérieurement. Et j'ai ajouté le titre Auto Destroy Properties. Pour utiliser cet attribut, vous pouvez simplement commencer par un crochet puis taper l'en-tête du mot clé. Et à l'intérieur de cette parenthèse, nous devons passer une valeur de chaîne, et ce sera le titre de l'en-tête dans l'inspecteur Et la variable suivante est un type de taureau appelé destruction automatique, décidera si nous voulons détruire l'objet de jeu que nous avons créé en utilisant ce composant ici ou non Et la variable suivante, c'est une sorte de flotteur, ce qui retardera la destruction si nous décidons de détruire cet objet. Cette période de destruction peut donc ajouter du retard chaque fois que nous voulons détruire un objet généré par ce composant de création d'objet Et la dernière variable, c'est un type d'arbre vectoriel, une portée privée, et cette variable va être utilisée comme position pour générer l' objet par ce composant Ensuite, nous pouvons simplement supprimer la méthode de mise à jour et de démarrage. Et ici, je vais coller le code ici, et c'est la méthode que nous allons utiliser pour générer l'objet. Cela s'appelle créer. Et il doit s'agir d'une méthode publique, afin que nous puissions accéder à cette méthode à partir d'un autre script. Donc, au début de la méthode, nous définissons la valeur de position comme étant la position du point de transformation. Cela saisira la position du propriétaire du script, mais nous voulons ensuite mettre à zéro la valeur y. Sur la ligne suivante, nous allons remplacer le point de position y par zéro, et nous devons le faire parce que si nous voulons faire apparaître une pièce, nous voulons nous assurer qu'elle apparaît sur le même axe y ou le même plan y que Le joueur peut donc entrer en collision avec elle et récupérer la pièce Et ici, ensuite, nous créons une boucle à quatre boucles afin de pouvoir générer plusieurs objets en fonction de la valeur de création Et si nous définissons plusieurs valeurs de valeur de création, nous allons créer ou instancier plusieurs objets à l'intérieur de cette boucle ici Et ici, le gestionnaire de pull génère une erreur parce que le script du gestionnaire de traction s'appelle pull manager. Remplaçons donc simplement le nom du pull manager par le nom du pull manager sur les deux lignes ici. Et ici, en gros, à l'intérieur de la boucle, nous instancions l'objet à l' aide du gestionnaire de traction, et nous le stockons dans une variable locale ou temporaire appelée t et nous transmettons l'objet pour créer des préfabriqués en tant qu'argument et en tant que position et identité de quaternion pour la Et si le bulon de destruction automatique est activé, renvoyons ou détruisons l'objet à l' aide du gestionnaire de tirage Mais cette fois, nous adoptons la TM parce que nous voulons détruire ceux qui sont instanciés sur place, et non le Nous devons donc transmettre le TM comme objet du jeu. Et pour ce qui est du délai, nous passons la valeur du temps à la variable de destruction. Maintenant, si nous revenons au script du système de mort, dans la méthode de mort, nous pouvons exécuter la fonction de création dans les quatre premières boucles en tapant le nom de la variable, qui est pon objects, et nous devons transmettre l'index. Ajoutons donc simplement un crochet puis passons le nombre entier, puis nous pouvons exécuter la méthode create. Et ici, nous avons également l'événement d'unité appelé événement de mort, mais nous ne l'avons jamais invoqué dans la vidéo précédente, et cela peut en fait tout déclencher dans l'unité. Il peut déclencher une méthode ou des fonctions à partir d' un composant et d'autres objets. Ainsi, chaque fois que nous voulons activer ou désactiver l' objet enfant ou un autre objet, nous pouvons l'utiliser ou exécuter une certaine fonction personnalisée. Nous pouvons également l'utiliser en cas de décès. Donc, en dessous des quatre premières boucles, je vais taper la variable d'événement de décès, et je vais exécuter la méthode invoke en ajoutant un point invoke et des ensembles de parenthèses Et cela invoquera tous les rappels enregistrés sur cette liste d'événements liés au décès Une autre chose que nous devons faire est de créer une fonction de mise à jour de l'interface utilisateur dans le script du système de santé. Faisons donc cela ci-dessous en dessous de la méthode de vérification de l' état de santé. Je vais coller le code ici et il s'appelle Update UI. Je vais donc m'assurer que nous avons déjà déclaré la variable Health Bar, et nous l'avons déjà déclarée. Et copions simplement le nom et collez-le ici car le code que j'ai collé a une majuscule différente Et pour ce qui est de la santé, ce devrait être la santé actuelle divisée par la santé maximale. Nous obtenons donc la valeur de santé normalisée. Donc, en gros, cette méthode DUI va d'abord vérifier si nous avons une référence dans la variable Health Bear, n'est-ce pas ? Et si ce n'est pas le cas, il exécutera le code à l'intérieur du bloc. Ensuite, nous créons une valeur de facteur trois. Appelé échelle. Et nous définissons la valeur sur un vecteur à trois points un , soit un sur tous les x. Et nous allons l'utiliser pour modifier l'échelle de la barre de santé. Ensuite, nous créons une valeur flottante, sera l' échelle de l'axe X pour la barre de santé. Et pour la valeur, en gros, nous divisons la santé actuelle par la santé MX. Nous obtenons donc une santé normalisée de 0 à 1, puis nous transmettons cette valeur flottante la composante x du vecteur d'échelle Et après avoir modifié la composante x du vecteur d'échelle, nous passons la valeur d'échelle à l' échelle locale de transformation de la barre de santé. Cela créera l'illusion d'une perte de santé en modifiant l'échelle locale de l' objet du jeu de barres de santé Et nous devons appeler cette méthode d'interface utilisateur de mise à jour dans la méthode take damage. Ici, nous pouvons simplement taper l'interface utilisateur de mise à jour et ouvrir et fermer les parenthèses . Enregistrez le script et revenons à l'unité OK. Et d'abord, nous allons modifier l'objet du jeu Cube. Sélectionnons le cube et redonnons le mode inspecteur à la normale à partir du débogage Et ici, ajoutons un composant de création d'objet. Et passons au dossier prefex. Sous le dossier F x, nous avons le préfabriqué Explosion. Sélectionnons donc à nouveau le cube, puis faisons glisser le préfabriqué à explosion dans l' objet pour créer un emplacement sous le composant de création d' objet Et ici, nous devons vérifier la durée de la particule d'explosion, afin de pouvoir simplement sélectionner les préférences d'explosion. Et sous l'inspecteur, nous pouvons voir que sous le composant du système de particules, la durée D est fixée à 1,5. Nous pouvons donc utiliser cette valeur pour retarder la destruction et nous assurer que les options de boucle sont également désactivées sur le système de particules Maintenant, sélectionnez à nouveau le cube et activons la destruction automatique des lingots Et pour le moment de la destruction, je vais le régler à une valeur supérieure à 1,5. Je vais donc mettre ce paramètre à deux. Et développons l'objet spawn ici, et je vais diriger le composant de création d'objet vers le slot d'objet span, et il ajoutera automatiquement ce composant dans le premier élément Ajoutons également le préfabriqué Flamme Smoke au cube ici, et vous verrez que nous avons une flamme dans la vue du jeu, et désactivons l'objet du jeu Flame Smoke Il est donc désactivé au démarrage. Et si nous sélectionnons l'objet du jeu en forme de cube, ajoutons une entrée le champ de l'événement mortel sous le composant Death System. Et nous pouvons faire glisser l'objet du jeu Flame Smoke vers l'emplacement des objets ici, et passons à la fonction ici, passons à l'objet du jeu, et ici vous pouvez voir la méthode active définie. Sélectionnons donc simplement la méthode active définie, et activons le bulon ici ou la case à cocher en la cochant fonction ou cette méthode modifiera essentiellement l'état actif de l' objet en forme de flamme ici Donc, pour le moment, il est désactivé par défaut. Mais chaque fois que l' événement mortel est invoqué, cet objet de jeu Flame Smoke est activé. Ici, nous voulons laisser l'objet du jeu Cube vivant. Décochons donc simplement l'option de destruction, ce qui empêchera la destruction de l' objet Et maintenant, essayons-le. Et voilà. Lorsque le cube est détruit ou que ses points de vie sont épuisés, vous voyez qu'il y a une explosion et que la fumée des flammes est également activée Et maintenant, le box collider est également désactivé ici. Nous ne pouvons donc plus photographier cet objet. OK, alors arrêtons le jeu ici. Et maintenant, nous allons mettre en place la barre de santé. Et créons ici un objet de jeu Canvas under the cube. Et réglons le mode de rendu Canvas sur l'espace mondial. Et comme nous n' utilisons pas le système d'événements, pour ce Canvas ici, nous pouvons simplement supprimer le système d'événements en toute sécurité, et le système d'événements est utilisé pour détecter, cliquer sur un objet Canvas ou lancer sur un objet Canvas. Et nous n'allons pas l'utiliser pour cette barre d'aide, nous pouvons donc simplement supprimer le système d'événements en toute sécurité. Et faisons pivoter le Canvas de 90 degrés sur l'axe X. Mettons la position à zéro. Et diminuons la largeur et la hauteur à 200100. Mais c'est encore trop gros. Et pour le réduire, nous voulons modifier l'échelle. Sinon, l'objet de l' interface utilisateur sera très gros sélectionné si nous diminuons la largeur et la valeur de hauteur Il suffit donc de remplacer la valeur d'échelle par une très petite valeur. Je vais régler ce 20.05 sur tous les axes. Et déplaçons ce canevas en position de cube. Nous pouvons mettre la position z à zéro. Et je ne pense pas que nous ayons besoin que cette toile soit aussi grande. Réduisons donc simplement la largeur à 100. Et sous ce canevas, créons une nouvelle image. Et appelons-le simplement santé. Et je vais changer la largeur à environ 25. Et pour la hauteur, je vais régler ça à 25. Et je vais déplacer la barre de santé pour qu'elle soit devant l'objet cubique. Et ce sera l'arrière-plan de la barre de santé, et la hauteur est encore trop épaisse. Il suffit donc de changer la hauteur à 2,5. Et comme vous pouvez le voir ici dans la vue du jeu, on voit bien la barre. Et je vais régler la couleur de la barre sur une couleur grisâtre. Et dupliquons la barre en appuyant sur Ctrl D, et je vais définir le deuxième point de santé ou la deuxième image comme étant l'enfant du premier objet de santé. Et ce sera le bar de santé. Et je vais changer la couleur en rouge et ici en utilisant le préréglage de l'ancre. Je vais changer le pivot en maintenant la touche Shift enfoncée sur le clavier, puis je vais sélectionner celui de gauche ici, le préréglage sur la gauche, et cela changera le pivot de cette image pour qu'il soit le plus à gauche sur la limite de l'image. Ainsi, si on modifie l'échelle x de l'objet, l'ancre restera sur le côté gauche de l'image. Nous serons donc en mesure de créer ici l'illusion d'une barre de santé ou l'illusion d'un épuisement de la santé Et maintenant, nous avons mis en place la barre de santé. Sélectionnons l'objet du jeu Cube. Et dans le volet système de santé, nous pouvons suivre cet objet de jeu de barre de santé jusqu'à l'emplacement de la barre de santé du système de santé. Et sauvegardons la scène, et essayons-la. Maintenant, si je tire sur le cube, vous voyez que la barre de santé diminue. Nous avons donc une très belle représentation de la santé sur place. Et une autre chose que nous pouvons faire, désactiver la barre de santé une fois que l'ennemi est détruit. Ainsi, dans le script du système de santé et dans le cadre de la méthode de vérification de l' état, nous pouvons ajouter un code indiquant que l'état de santé actuel est inférieur ou égal à zéro. Et ici, nous pouvons simplement accéder à la barre de santé et accéder à la transformation , puis au parent, puis à l'objet du jeu, puis exécuter la méthode set active et définir sa valeur sur false. Et nous devons accéder à son parent ici, car si nous revenons à l'unité et que nous constatons que l' objet de santé est essentiellement l'enfant issu du bar de santé. Nous voulons donc désactiver l'objet du jeu de santé, pas la barre de santé ou Il existe une meilleure solution. Je vais donc supprimer ce code ici. Et en gros, nous pouvons simplement désactiver l'objet du jeu de santé en utilisant l'événement de décès dans le système de mort. De cette façon, nous n'ajoutons pas d'autres codes qui n'ont pas besoin d'être ajoutés, et nous pouvons l'utiliser en cas de décès pour invoquer l'action que nous voulons effectuer. Ajoutons donc simplement une entrée cas de décès et nous pouvons faire glisser l'objet du jeu de santé Dans la liste déroulante des fonctions, nous pouvons simplement accéder à l'objet du jeu, puis exécuter la méthode active définie, puis régler le bouton ou la valeur du bulon sur false Et cela désactivera l'objet du jeu de santé lorsque cet objet de jeu est vaincu. Alors maintenant, essayons à nouveau. Et maintenant, comme vous pouvez le constater, lorsque l'ennemi est vaincu, la barre de santé est masquée. Ainsi s'achève la leçon sur l'objet spawn et la barre de santé Et passons à la vidéo suivante. 13. 13 Déplacement de nœud - Créer un mouvement de courbe de Bézier: Dans cette vidéo, nous allons créer un script de mouvement qui suivra un chemin défini par des ensembles de nœuds. Nous utiliserons le script ultérieurement pour déplacer un groupe d'ennemis le long d'une trajectoire ou selon le schéma de mouvement de notre boss ennemi. Créons un nouveau script C sharp, que nous pouvons appeler Note Move. Double-cliquez ensuite dessus pour l' ouvrir dans notre éditeur de texte. Une fois le script ouvert, déclarons une nouvelle variable de liste avec le type d'arbre vectoriel. Pour déclarer une liste, tapez simplement list, suivie d'un crochet incliné, puis tapez l'arbre vectoriel du mot-clé, puis le nom de la variable Appelons cela des nœuds. Tapez ensuite le vecteur de crochets inclinés du mot-clé nest pour créer la liste N'oubliez pas de saisir le mot clé public pour le rendre visible sur l'inspecteur. Créons ensuite un entier qui est une variable constante. Cela définira la fluidité de notre trajet le plus fréquenté. Nous pouvons maintenant supprimer en toute sécurité la méthode de démarrage et de mise à jour. Créons une nouvelle méthode qui gérera la création du chemin ou de la courbe, et cette fonction renverra une liste d'arbres vectoriels. Renommons la fonction ou la méthode pour obtenir des nœuds de courbe. Puisque la méthode renvoie une sorte de données. Dans ce cas, il s'agit d'une liste de vecteurs, nous devons d'abord taper return null, et nous remplacerons le mot clé null par notre liste de nœuds de courbe. Avant de continuer, nous allons créer une autre méthode qui renverra un arbre vectoriel. Cette méthode sera utilisée pour calculer trajectoire du sier en fonction de quatre points ou positions différents, et le temps devrait être compris entre 2021 et 2021 Pour cette méthode, nous aurons besoin de quelques arguments, à savoir quatre facteurs et un flottant. Appelons l' argument des facteurs P zéro, P un, P deux et P trois, et quel sera le temps t. Tapons return puis une valeur du facteur trois. Le script ne donne donc pas d'erreur. Dans cette méthode, nous allons calculer une trajectoire sière à l'aide d'une équation cubique de la courbe sière. Cherchons la formule sur Google. Recherchez le mot de l'équation Sier et ouvrez le résultat de la première page. Ici, nous pouvons voir la formule ou l' équation de la courbe cubique de Bézier Nous aurons besoin de points ou de positions connus, et la formule est la suivante un moins t et augmenté par puissance de trois multiplié par P zéro, puis additionné par trois multiplié par un moins t, augmenté par la puissance de deux multiplié par T et P un, et ainsi de suite. Écrivons la formule dans notre code. OK. abord, je vais taper la formule ici dans le commentaire, afin de pouvoir facilement la construire. La première partie doit être un moins t , puis une puissance de trois, puis multipliée par le premier point. Multipliez par P zéro, puis ajoutez-le au deuxième segment, qui est trois, puis multipliez par un moins t, regroupez ensemble, puis puissance par deux ici, multipliez également par t puis multipliez par P un. Ensuite, la troisième partie est. C'est comme ça, nous pouvons simplement copier toute cette partie ici, mais nous allons changer cela. Cela doit être multiplié par t, et le t est alimenté par deux. Si nous l'espacons, nous pouvons le lire beaucoup mieux. Comme ça. Assurons-nous que c'est correct, c'est correct. Ensuite, le troisième est t alimenté par trois, multiplié par le dernier point ici. Tapons simplement T alimenté par trois multiplié par le dernier point ici. Nous avons cette équation pour calculer une trajectoire plus basique, ce qui nécessite quatre points Faisons-le simplement. Nous allons maintenant créer un flottant de un moins t puisque nous utilisons un moins t plusieurs fois ici, comme vous pouvez le voir. Il s'agit essentiellement d'un flotteur moins T. D'accord. Et il s'agit d'un résultat vectoriel à trois. Faisons le calcul ici. En gros, nous devons utiliser la fonction mathématique f, power, et cela ramènera la valeur flottante directement à la puissance P. Nous devons d'abord insérer la valeur, qui est un moins d, puis nous obtenons un ensemble de valeurs alimentées par trois, comme indiqué ici. Tapons simplement trois flux ici, puis multiplions ce résultat par P zéro. Ensuite, nous allons l'ajouter par trois flottants, multiplier à nouveau le calcul de la puissance. Ce temps est égal à un moins t, mais augmenté de deux, puis nous allons le multiplier par T, puis le multiplier par le deuxième point ici, P un. Le troisième sera trois multiplié par un moins t puisque cela n'a aucune valeur de puissance ici, nous pouvons donc simplement taper un moins t, puis nous allons multiplier cela par t fois t, comme cela n'est alimenté que par deux, il est beaucoup plus facile de taper comme ça puis multiplier par P c'est P deux ici. Puisque je le copie-colle, je n'ai jamais pu le changer. le dernier, je vais juste entrer la ligne ici et mettre le plus ici. Et ce sera la puissance mathématique de F, T augmentée de trois, puis multipliée par le dernier point , soit P trois ici. Je vais entrer à partir de maintenant, remettons simplement cela en haut pour que nous ayons ce calcul ici. Et il s'agit en fait une formule, d'une formule continue, mais comme elle est trop longue, je vais simplement la saisir. Et si vous ne devinez pas un point-virgule ici, l'unité ou le code se lira comme une seule ligne Tu peux le faire. Et une fois que nous l' aurons, je vous rendrai le résultat. Oui. Voilà. Enregistrez d'abord le script. Ensuite, nous allons obtenir la fonction des nœuds de courbe, qui renvoie moins d'arbre vectoriel. abord, nous allons créer une variable temporaire, qui sera moins un arbre vectoriel Ce sera les nœuds de courbe, le nouveau moins un arbre vectoriel. Le premier membre de cette courbe indique que ce sera notre position de transformation. Mais plus tard, nous allons remplacer cela par une transformation locale. Alors, supportez-moi. Je vais tout expliquer. Maintenant, regardons tous les membres des notes ici. Nous pouvons juste obtenir le décompte. Mais nous voulons nous assurer soustraire le nombre par moins de trois ici, et nous voulons également augmenter la valeur de trois Nous voulons itérer tous les trois points disponibles dans les nœuds de la courbe ici Nous allons maintenant créer quelques facteurs. C'est essentiellement le premier point, et ce seront les nœuds. Ce n'est pas le nœud de la courbe, ce devraient être les nœuds. Modifiez simplement ces nœuds ici car nous voulons examiner les nœuds que nous définissons dans l'inspecteur. Ce seront les nœuds. Le second sera l'indice des nœuds de i plus un. Et laissez cette ligne copier cette ligne ici et au-delà de ces deux fois et ce sera le P 2.2, et ce sera i plus deux, et le troisième P trois sera l' indice i plus trois. C'est pourquoi l'indice des boucles est augmenté de trois. Étant donné que la méthode de calcul du chemin de base nécessite quatre points ou une position pour chaque itération, nous calculerons un chemin de base à l'aide de la méthode, mais nous inclurons également le dernier point de l' abord, nous allons nous assurer que i est égal à zéro, puis nous allons créer le premier chemin. Nous allons ajouter à nos nœuds incurvés, car cela nécessite un arbre vectoriel, nous pouvons simplement taper la fonction, calculer un chemin plus fréquenté, et nous pouvons simplement placer nos points à partir d'ici Celui que nous avons déclaré ici, et tapez P zéro, un P un et P deux , puis P trois. Pour le P, nous allons utiliser va être zéro, c'est la première position. Et un point-virgule ici. Créons maintenant d'autres boucles avec un indice de j. Puisque ces boucles se trouvent à l'intérieur de nos premières boucles et que la lettre I a été utilisée comme indice des premières boucles. Et pour la longueur de nos boucles, nous allons utiliser le segment de courbe constante qui a une valeur de 20. Cela signifie que pour chaque itération des premières boucles, nous allons générer 20 points sur la deuxième boucle Nous allons créer ici un float t à partir de notre valeur par segment de courbe. Mais comme T est un nombre flottant et qu'il s'agit d'un entier de base, et qu'il s'agit également d'un entier, il vaut mieux convertir soit le nombre ici, soit le diviseur en un nombre flottant Je vais juste le transformer en flottant ici et assurer qu'il donne un résultat flottant. Maintenant, copions-le ici, collons-le et pour le paramètre float ici, nous allons insérer t à partir de cette valeur ici. Sauvegardons cela et nous devons créer une sorte de représentation dans la scène afin de pouvoir la voir, afin que nous puissions simplement utiliser la fonction correspondante une fois sélectionnée. En gros, nous allons créer la fonction de courbe ici en créant une nouvelle liste de vecteurs trois. Et nommez simplement les positions de cette courbe. À un nouveau vecteur de liste trois et enregistrez-le. Désolé, nous devons ajouter des parenthèses et pour la position de la courbe, exécutons simplement la fonction get curve nodes Nous avons donc les nœuds de la courbe à l'intérieur de notre position de courbe, et nous pouvons maintenant regarder la position de notre courbe. Je vais donc copier la variable et je vais examiner son nombre ici. Et je vais dessiner, désolée. Je vais à GSM Draw Line. Je vais utiliser cette fonction ici. Et en gros, cela doit être pris en compte. Je vais donc commencer par une et gros je vais dessiner la première position, c'est-à-dire les positions de la courbe i moins un. Donc, si i est égal à un, alors ce sera zéro, et le second sera l'indice de curaron comme celui-ci Pour rendre les choses intéressantes, nous pouvons simplement changer la couleur du gadget en vert, disons Il s'agit essentiellement d'une couleur de base que l'unité fournit déjà, qui a une valeur de zéro, et le vert est un, le bleu est également zéro et l'Alpha est un. Mais si vous souhaitez créer une nouvelle couleur, vous pouvez simplement taper une nouvelle couleur et essayer votre valeur ici, par exemple, un, 0,5 et vous pouvez le faire si vous le souhaitez. Ou si vous souhaitez également mettre Alpha, vous pouvez simplement taper la valeur de l'Alpha. Mais dans ce cas, je vais utiliser la couleur préconçue que Unity nous a déjà fournie . Il suffit de l'utiliser. Sauvegardons ceci et voyons si cela fonctionne. Choisissons simplement notre cube ici, et ajoutons le déplacement du nœud. Mais en gros, le script ne bouge pas encore Nous créons donc d'abord la courbe. Et comme vous pouvez le voir ici, nous avons des nœuds. Et si nous tapons si nous mettons une valeur ici, nous pouvons par exemple, je peux définir une valeur ici, elle devrait être dessinée, en fait. Définissons simplement une valeur, une valeur aléatoire. Il y a donc une erreur dans le script. D'accord, d'accord ? Réglons juste ça. Nous devons nous assurer que la position de la courbe a une certaine valeur ici. Nous pouvons maintenant simplifier cela en insérant la fonction immédiatement lorsque nous déclarons les positions des courbes. Nous avons oublié de renvoyer ici les notes de courbe que nous avons déjà créées à partir de la commande get curve notes. Renvoyons simplement les notes relatives à la courbe. Enregistrez ceci et compilez pendant un moment et partons. Voilà. Nous pouvons voir notre chemin ici. Nous pouvons essentiellement ajuster sa position cet endroit et nous pouvons simplement le déplacer pour créer une courbe, en gros. Mais je sais que ce n'est pas très intuitif. Dans la vidéo suivante, nous allons créer des poignées à l'aide de scripts d'éditeur, afin de pouvoir concevoir avec un 14. 14 Éditeur de mouvements de nœuds: Dans cette vidéo, nous allons créer un script d'éditeur pour créer un contrôle personnalisé, afin de faciliter le contrôle de la courbe d'abord, allons dans le dossier des scripts, puis créons un nouveau dossier et nous pouvons renommer le dossier en éditeur Et pour tous les scripts liés aux scripts d'éditeur, nous devons les placer dans le dossier de l'éditeur car tous les scripts contenus dans ce dossier d' éditeur ne seront pas inclus dans le build Et dans ce dossier de l'éditeur, créons un nouveau script C sharp. Et appelons cet éditeur de notes Move. Et une fois qu'il est créé, ouvrons-le. Et voici le script Note Move de la vidéo précédente. Ce n'est pas encore terminé. Nous allons étendre cela plus tard. Mais pour l'instant, travaillons sur le script de l'éditeur Note Move. Et d'abord, supprimons simplement les méthodes de démarrage et de mise à jour. Et nous devons également inclure l' espace de noms de l'éditeur Unity ci-dessus Tapons donc simplement en utilisant l'éditeur Unity. Et nous devons nous assurer que le script hérite du script de l'éditeur Remplaçons donc simplement le comportement mono par un éditeur. Et nous devrons également ajouter un texte d'éditeur personnalisé pour cibler le script dans lequel nous voulons créer cet inspecteur personnalisé. Tapons donc simplement un éditeur personnalisé et des parenthèses ouvertes. Et puis tapez off, puis une autre parenthèse ouverte Et ici, nous devons mettre le nom de classe pour lequel nous voulons créer l'inspecteur personnalisé. Avec cette configuration, le script remplacera inspecteur par défaut pour le script de déplacement de notes sur l'inspecteur Une fois que nous avons défini tous les inspecteurs personnalisés dans ce script. Et dans ce script, nous allons déclarer deux méthodes. Le premier sera un inspecteur GY, et il s'agit d'une méthode de remplacement issue de l'éditeur de classe de base, et dans le script, nous dessinerons l'ensemble de l'inspecteur personnalisé ultérieurement Dans l'éditeur ici, il remplacera l'inspecteur par défaut, et l'autre méthode que nous devons créer est la méthode GI de scène, destinée à créer un gadget personnalisé sur la vue de scène Nous allons maintenant nous concentrer sur cette méthode de scène GI. Et d'abord, créons une référence à la classe cible , à savoir note move here. Nous pouvons donc simplement déclarer un type variable de déplacement de note, et appelons simplement cette source. Et ici, au début de la méthode invisible de l'interface graphique, introduisons la classe cible dans le champ source Tapons donc simplement source equal, puis nous pouvons transformer la cible en note move en ajoutant un casting devant le mot clé cible, et la cible est essentiellement l' objet qui est inspecté. Dans ce cas, il s'agit de la classe Note Move. Ensuite, nous devons examiner tous les nœuds de la source ou de l'objet de déplacement du nœud. Créons donc quatre boucles ici. Et pour ce qui est de la longueur, nous pouvons la remplacer par des nœuds de points sources, et les nœuds sont la liste des vecteurs que nous avons déclarés ici dans l'inspecteur. Mais nous devons ajouter les propriétés .co afin de pouvoir obtenir le nombre de membres à boucler dans ces quatre boucles, et pour chacun de ces vecteurs dans la liste des nœuds, nous voulons créer un gadget ou des poignées personnalisés afin de faciliter le contrôle dans la vue Donc, d'abord, récupérons chacun des membres des nœuds en tapant les nœuds du nœud source, puis index de I à l'aide d' un crochet. Ici, nous pouvons définir la valeur sur des poignées, et à partir de la classe de poignée, nous pouvons utiliser la méthode de poignée de position, et comme pour une position de facteur trois et une rotation en quaternions Et cette méthode créera une poignée de position dans la vue de scène. Donc, pour la position, passons simplement l'indice des nœuds points source de I, qui est la valeur du facteur trois du membre du nœud, et pour la rotation, nous pouvons simplement transmettre l'identité des points du quaternion Cela ne changera aucune rotation. Et ci-dessous, nous pouvons créer une étiquette pour les poignées. Tapons donc simplement handle point label, et nous pouvons passer la position de l'étiquette comme premier argument. Et pour l'étiquette, nous pouvons utiliser la deuxième surcharge de la méthode label, qui demande une valeur de chaîne pour le deuxième argument. Je vais donc taper des nœuds, et je vais me contenter de la valeur y, mais je vais en ajouter un à la valeur oculaire Le premier index sera donc dessiné sous la forme d'un un au lieu de zéro dans la vue de scène. Ajoutons un point-virgule, puis enregistrons le script Et maintenant, revenons à l'unité. Et maintenant, comme vous pouvez le voir, nous avons deux poignées ici, sur la vue du péché, et chacune d'elles porte une étiquette. Et voici la dernière note. Nous pouvons le déplacer, mais cela n' affecte pas la courbe, car avec cette courbe, nous évaluons la courbe toutes les quatre notes de la liste. Il est donc désormais plus facile de personnaliser la courbe à partir de la vue du sinus plutôt que de la modifier depuis l'inspecteur. Et ici, nous pouvons également tracer une deuxième ligne pour connecter les nœuds ici afin de montrer les vraies lignes, quoi elles ressemblent sur la vue de la scène. Et pour ce faire, nous pouvons simplement le faire dans le script de déplacement de nœuds ici selon la méthode sélectionnée par Gizmo, et nous pouvons créer une nouvelle boucle à quatre boucles ci-dessous Examinons simplement le membre de la liste des nœuds ici. Nous pouvons simplement remplacer la longueur par le node co pour parcourir la liste des nœuds, et copions simplement le code du gadget ci-dessus. Et changeons le premier index deux, un. Et changeons simplement la couleur jaune. Créons donc simplement une nouvelle couleur, afin de créer une couleur transparente. Je vais donc créer une variable temporaire appelée gzmoclor avec un type de couleur et l'attribuer à la couleur jaune Et ci-dessous, changeons l'alpha. Accédons donc simplement à la variable gzmoclor A, qui est la valeur Alpha, et je vais définir sa Et au lieu d'attribuer la couleur du gadget à la couleur jaune, attribuons simplement la couleur du gadget à cette couleur de point gadget à cette Et sauvegardons le script. Ici, j'ai oublié de remplacer la liste lorsque nous dessinons la ligne. Nous allons donc simplement changer les positions des courbes en notes sur les deux arguments. Sauvegardons le script et revenons à Unity. Et maintenant, comme vous pouvez le voir, nous avons cette ligne droite qui relie tous les nœuds de la vue de scène. Une autre chose que nous voulons faire avec cet objet de jeu cubique, de transformer cet objet de jeu en un objet de jeu vide. Créons donc simplement un nouvel objet de jeu vide. Copions la valeur de transformation de l'objet de jeu cubique ici, et collons-la dans l'objet de jeu pour qu'il soit à la même position. Ensuite, dirigeons le cube pour qu'il soit l'enfant de cet objet de jeu ici, et nous devons le faire car plus tard, nous allons convertir le calcul de la ligne ou des nœuds depuis l'espace mondial en espace local. Cela facilitera le repositionnement de tous les objets à déplacer à l' aide de l'éditeur de déplacement de notes, et ils se déplaceront par rapport au point de départ Et cela permettra de repositionner plus facilement l'ennemi dans notre scène plus tard Cette partie est facultative, mais nous allons ajouter un léger ajustement pour l'inspecteur personnalisé du script Note Move ici afin de faciliter l'ajout de points ou de notes. Passons donc au script de l'éditeur Note Move, et nous avons déjà ici la méthode UNINSPECTOR GI Et ici, dans le script Note Move, je souhaite ajouter un bouton, afin que nous puissions le faire dans l'interface graphique Uninspector Ce bouton servira à ajouter et à supprimer facilement des nœuds Voici donc le GI non inspecté. Récupérons la référence à la cible et passons-la au champ source, et nous pouvons simplement copier la ligne ici à partir du GI invisible, et ci-dessous le code GI de base non inspecté nous pouvons créer un bouton à l' aide d'une instruction if, et pour la condition, nous pouvons simplement exécuter la méthode du bouton à partir de la classe de mise en page GI Et ici, pour l'argument, nous pouvons passer un texte. Et pour le nom du bouton, il suffit de taper des nœuds. Et dans la déclaration, nous voulons essentiellement ajouter un nouveau membre de nœuds à la liste des notes. Accédons donc simplement à la source , puis aux notes et nous pouvons exécuter la méthode Passons simplement un arbre vectoriel ici, et saisissons simplement la position de transfert, afin de créer de nouveaux nœuds à la position de l'objet du jeu. Et nous pouvons également ajouter un autre bouton pour supprimer les derniers nœuds. Copions donc toute cette instruction et renommons le bouton pour supprimer les nœuds, et nous pouvons changer la méthode d'ajout pour supprimer. Je vais utiliser la méthode remove add et la supprimer comme pour l'index Nous pouvons donc simplement récupérer le dernier index notes sources en accédant à ses copropriétés, mais nous devons le soustraire un par un car, comme toujours, collection part de zéro. Ainsi, le dernier membre ou le dernier membre de la collection sera toujours inférieur à la valeur co. Sauvegardons le script, et revenons à Unity. Et maintenant, comme vous pouvez le voir, une fois le script compilé, nous avons les deux nouveaux boutons du script note move. Et si nous appuyons sur le bouton Ajouter des notes, comme vous pouvez le voir, ajoutez un nouveau poste ou un nouveau membre à la liste des notes ici, et nous pouvons ajouter quelques nœuds supplémentaires. Et ici, nous pouvons simplement déplacer le nœud dans la vue de scène, puis nous pouvons également créer un autre nouveau nœud. La première note a été déplacée d'une manière ou d'une autre sur l'axe Y, alors ajustons simplement cela. Et si c'est difficile à corriger sur la vue de scène , il suffit de taper la valeur ici depuis l'inspecteur, et cela changera également les nœuds. Avec cet inspecteur personnalisé, nous pouvons facilement créer ou supprimer des nœuds chaque fois que nous allons concevoir le mouvement ennemi ultérieurement. 15. 15 Déplacement de nœud - Déplacer des objets: Dans cette vidéo, nous allons créer le mouvement du script de déplacement des notes. Et comme vous pouvez le constater, nous avons déjà créé le Gizmo aide d'un éditeur Il est donc désormais plus facile de concevoir les nœuds de courbe au lieu de modifier la valeur dans l'inspecteur. Maintenant, nous pouvons facilement modifier la valeur dans la scène. Et lorsque nous déplaçons ce gadget, il modifie la valeur des notes dans l'inspecteur Maintenant, ouvrons le script de déplacement des nœuds, et maintenant nous devons déclarer quelques nouvelles variables. Alors commençons par créer un flottant public, que nous pouvons simplement appeler vitesse. Et nous devons créer quelques variables flottantes ici. La première sera donc une vitesse, et je vais définir la valeur par défaut à deux. Et la prochaine sera une vitesse de rotation, et c'est pour la vitesse de rotation de l'objet. Et fixons-le également à deux, et nous pourrons le modifier ultérieurement dans l'inspecteur. Et le dernier serait la valeur bancaire. Et il s'agit de la valeur bancaire maximale de la graisse chaque fois que le navire fait demi-tour, en fonction du mouvement. La valeur bancaire affectera donc la rotation nulle de l'objet. Ensuite, je vais créer une variable d'investissement publique. Et la première variable bulon serait un objet en rotation. Et cela vaut pour un total , que nous voulions faire pivoter l'objet ou non pendant que l'objet se déplace sur cette courbe Et l'autre lingot, on peut simplement l'appeler mouvement en boucle, et c' est pour le contrôle total chaque fois que nous voulons boucler le mouvement ou non Et la variable suivante, c'est un entier public, et je vais appeler cette boucle vers un nœud, et cela décidera quels nœuds nous allons parcourir en boucle. Ainsi, par exemple, si nous voulons revenir au deuxième ou au troisième nœud au lieu du premier nœud, chaque fois que l'objet est en boucle, nous pouvons définir cette boucle sur le nœud à une certaine valeur de nœud Il passera donc par une position de départ différente au lieu des premiers nœuds. Et je vais également ajouter un entier privé, l' on appellera un véritable nœud de boucle. Et il s'agit essentiellement la position réelle du nœud basée sur les nœuds de courbe, car nous allons convertir la position des nœuds en nœuds de courbe. Et nous devons créer une méthode d' adaptation. Et créons également une méthode de désactivation du vide. Et ces deux méthodes, c'est une méthode Unity intégrée et l'activation est déclenchée chaque fois que l'objet est activé et désactivé, exécutée chaque fois que l'objet est désactivé ou activé. En gros, nous voulons démarrer le mouvement chaque fois que nous activons cet objet de jeu et nous voulons arrêter le mouvement chaque fois que cet objet est désactivé. Donc, pour déplacer cet objet, nous devons créer une coroutine Tapons donc un type écrit d' énumérateur et nous pouvons simplement appeler cela start move Et ici, dans la routine de base, nous voulons créer une boucle afin de pouvoir simplement créer une instruction wi, et pour la condition, nous pouvons définir la valeur sur true. Cela sera donc exécuté à chaque image pendant que la routine co est en cours d'exécution. Et nous devons ajouter un yield return null dans l'instruction while. Sinon, cela provoquera une boucle infinie et bloquera l'unité. Et yield return le fera en sorte d'arrêter l'exécution et de la poursuivre à l'image suivante. Et maintenant, nous avons déclaré cette routine conjointe. Nous allons travailler davantage sur cette routine. Mais maintenant, nous pouvons simplement ajouter une routine start co dans la méthode nenable , puis exécuter la routine start Move co Il suffit donc de taper start co routine, puis transmettre le nom de la coroutine start Move Et sur la méthode désactivée, nous pouvons simplement exécuter la méthode stop all co routines, ce qui désactivera toutes les co-routines qui s'exécutent dans le script. Et maintenant, nous pouvons travailler sur la coroutine start Move. Et avant de continuer, je vais renommer la variable de mouvement de boucle en loop Move C'est donc plus court. Donc, dans l'instruction WL, créons une instruction, et nous voulons vérifier si la boucle move bullion est activée Nous voulons ajouter une instruction R. Mais avant de continuer, créons ici une variable locale, de type entier, et appelons simplement cet ID de position. Et en gros, en utilisant cet identifiant de pus, nous allons suivre le facteur sur la liste des nœuds de courbe que nous allons consulter actuellement. Et si nous arrivons, nous allons augmenter l'identifiant du pus, donc nous passerons au facteur suivant. Et ici, dans la condition R, nous pouvons simplement ajouter l'identifiant du pus, et nous devons nous assurer que si l'identifiant PS est inférieur à la longueur des nœuds de courbe, mais avant de pouvoir le faire, nous devons générer les nœuds de courbe. Créons donc simplement un nœud de courbe ci-dessus et déclarons une variable de liste locale de type vecteur trois, et nous pouvons simplement appeler ce chemin, et nous pouvons simplement appeler ce chemin, et l'initialiser simplement en transmettant le résultat ou le retour de la méthode get curve nodes Nous pouvons donc simplement exécuter la méthode des notes de courbe ici, calculera les nœuds de courbe et transmettra ces nœuds de courbe dans cette liste de vecteurs trois appelée chemin. Nous pouvons maintenant vérifier si l'ID de position est inférieur au nombre de points du chemin, qui est le nombre de vecteurs contenus dans cette liste de chemins. Mais nous devons le soustraire par un car comme toujours, les index des tableaux commencent à zéro Nous ne voulons donc pas inclure le nombre maximum car cela créerait un index hors de portée Oui, nous devons attribuer la valeur à l' identifiant PoS car nous avons ces squigglines rouges Je vais donc attribuer l'identifiant PS 20 ici dans la déclaration. Oui, j'ai fait une erreur ici. En gros, cette condition ici, la condition doit figurer sur la déclaration WIL. Je vais donc supprimer cette condition if , puis la coller dans le joker pour remplacer la vraie valeur. Et ici, dans l'instruction if, nous voulons vérifier si l'objet est déjà arrivé à la position cible, qui est l'indice de chemin de pos ID, et si ce serait la cible. Et si nous sommes déjà arrivés, nous voulons augmenter la valeur de l'identifiant de position. Nous pouvons donc simplement taper l'indice de chemin de l'identifiant po, puis nous pouvons le soustraire en transformant cette position Et à partir de ce calcul vectoriel, nous voulons obtenir la magnitude carrée, qui est la distance, mais c'est la distance en valeur carrée sans le calcul de la racine carrée. C'est donc plus performant que l'utilisation de la magnitude, et nous pouvons simplement comparer cela si la magnitude carrée est inférieure à une très petite valeur, cela signifie que nous arrivons déjà dans cette position. Ou nous sommes très proches de la position cible. Et ici, à l'intérieur, nous voulons ajouter une autre vérification, et nous voulons vérifier si le mouvement de la boucle est vrai, et ajoutons également une instruction L. Et dans l'instruction, le premier bloc ici, nous voulons ajouter une autre instruction, et nous voulons vérifier si l'ID PS est inférieur d'un à celui du substrat path.co, puis nous voulons augmenter l'ID de position Nous pouvons simplement taper PS ID et avec le double signe plus, cela augmentera la valeur Ou nous pouvons simplement taper en utilisant le signe plus puis égal et la valeur, qui est un. Cela signifie la même chose que le code précédent. Nous incrémentons l'entier d'un, et nous devons ajouter une instruction L ici, et ici, dans l'instruction L, en gros, nous voulons réinitialiser identifiant PS sur le nœud de boucle réel, et cela ne s'appliquera que si nous activons l'option de déplacement de boucle Cela signifie que si l'ID PS est à la fin du nombre de chemins , nous voulons revenir au nœud de boucle sélectionné. Et la valeur réelle du nœud de boucle sera convertie de la boucle en valeur entière du nœud. Et ici, dans l'instruction L, nous voulons augmenter l'identifiant de position s'il est inférieur au nombre de chemins Nous pouvons donc simplement copier cette ligne à partir de la première et la coller ici dans l'instruction L. Maintenant, nous voulons déplacer l'objet. Nous pouvons le faire dans l'instruction OL avant ce rendement, et nous pouvons accéder à la position du point de transformation, et nous pouvons utiliser la méthode move towards de la classe factor three Nous pouvons donc simplement taper le facteur trois point move towards et l'objet de manière linéaire, contrairement à Lerb C'est donc plus approprié pour déplacer l'objet à l'aide de cette note, déplacez-vous ici. Et pour le premier facteur, nous pouvons simplement passer la position de Caron Tapons donc simplement transform cette position. Et pour la position cible, qui est le facteur B, nous pouvons simplement transmettre l'indice de trajectoire du pus ID, et cela renverra le facteur suivant vers lequel nous devons passer. Et pour la distance Delta suivante, nous pouvons utiliser la valeur vitesse, mais nous voulons nous assurer que cette vitesse est appliquée par seconde plutôt que par image. Nous devons donc multiplier la valeur en utilisant le temps Delta time. Maintenant, sauvegardons le script et retournons à Unity. Et essayons-le. Appuyons donc sur Play. Et comme vous pouvez le voir, maintenant , l'objet se déplace vers chacun des nœuds ici. Maintenant, revenons au script et nous pouvons travailler sur le mouvement de la boucle. Passons maintenant au calcul de ce véritable nœud de boucle. Nous devons le calculer dans le cadre de la méthode des nœuds de courbe GT. Ici, nous pouvons simplement taper un nœud de boucle réel En gros, nous devons attribuer au nœud de boucle réel la valeur des nœuds de courbe multipliée par le nœud de boucle, divisée par les nœuds C, et cela donnera la fraction ou le pourcentage des nœuds réels. Et à partir de ce pourcentage, nous pouvons le convertir en position des nœuds de la courbe en le multipliant par le nombre des nœuds de la courbe, car les nœuds de la courbe auront tellement de vecteurs par rapport aux nœuds réels ici, et avec ce pourcentage, nous pouvons obtenir l'indice qui traduira approximativement la position des nœuds réels en nœuds de courbe Maintenant, sauvegardons le script. Et essayons-le ici. Revenons maintenant à Unity. Nous devons activer l'option de déplacement en boucle ici. Et maintenant, essayons-le. Et maintenant, il bouge, comme vous pouvez le voir, mais jetons un coup d'œil. Oui, comme vous pouvez le voir ici, il revient au premier nœud, chaque fois qu'il va vers le N , puis il continue à se déplacer. C'est pour moi du futur, et nous devons réparer une petite boîte dans le script Note Move. Donc, en gros, dans le script de suppression, chaque fois que nous calculons le véritable nœud de boucle ici, comme vous pouvez le voir, nous divisons la boucle en nœud avec les nœuds, et ces deux valeurs sont des entiers Et cela produira valeur de zéro ou de un, nous devons donc corriger ce problème. Et pour résoudre ce problème, nous devons convertir le diviseur, qui est le nombre de points des notes ici, en un flottant Nous pouvons donc simplement ajouter une parenthèse , puis taper float puis fermer la parenthèse, et cela transformera la valeur du nombre de points du nœud en un Une fois que nous avons converti cette valeur en valeur flottante, nous aurons une valeur décimale Et une fois le calcul de cette courbe terminé , le nombre de points des nœuds est multiplié par le pourcentage de la valeur «   look to note » indiquée ici. Nous devons le reconvertir en entier pour arrondir la valeur du résultat à un entier, et nous pouvons utiliser cet entier comme véritable index de nœud de boucle. Sinon, il ne renverra que le premier nœud ou le dernier nœud en raison de la division entière. Cela met fin à la partie des objets en mouvement pour le déplacement du nœud, et nous pouvons passer à la vidéo suivante. 16. 16 Nœuds déplacent le monde vers le local: Nous allons continuer à développer notre note de script ici, c'est ce que nous allons faire. D'une manière ou d'une autre, j'ai déplacé les notes ici. En gros, nous avons déjà réussi à créer un mouvement, mais il y a un problème. Chaque fois que nous associons cet objet de jeu à un autre objet de jeu, disons, puis que nous déplaçons cet objet de jeu ici, il doit donc se déplacer. Lorsque nous commençons à jouer à ce jeu, les nœuds sont en position mondiale. Il s'agissait donc de passer à la position mondiale des nœuds. Ce que nous voulons faire, c'est essentiellement convertir cette position réelle de nos nœuds dans l'espace local de notre objet. Pourquoi devons-nous le faire ? Cela sera utile pour le bus pop. Parce que chaque fois que le bus apparaît, il nous suit et nous devons combattre ce bus. Le concept de base, c'est que le bus permettra aux parents de transformer le monde. Nous allons avoir un objet vide qui fera bouger la scène, à l'exception la caméra et de notre lecteur. Et ce que nous voulons faire, c'est que chaque fois que nous rencontrons le bus, le bus devient parent de cet objet mondial en mouvement Il évoluera avec nous. Mais le bus n'aura toujours pas son propre mouvement. C'est ce que nous allons faire maintenant. OK. Revenons simplement ici et revenons à notre script, à notre script de déplacement ici. Maintenant, nous allons créer une autre variable, et ce sera une transformation. Appelons cela le parent de transformation. Je vais en Iran, le parent est disponible. Si nous avons un parent, nous voulons définir le parent comme notre parent transformé. L. S'il n'y a aucun parent, nous devons définir notre propre transformation pour ce parent. Nous pouvons utiliser cette variable pour n'importe quelle condition. Maintenant, nous allons convertir tous nos vecteurs pi en un espace local. Pour ce faire, nous pouvons utiliser un commentaire, utiliser la transformation, par exemple, ce parent, et nous pouvons utiliser une méthode appelée point de transformation inverse. Il s'agit essentiellement de transformer la position de l'espace mondial à l'espace local. Nous devons nous en servir. Maintenant, je vais changer toutes les positions que nous avons dans l'espace local. Je vais taper ceci ici parent et utiliser le point inverstrantfm, puis je vais mettre cette position vectorielle ici dans l'instrument Je vais juste le copier pour faciliter les choses, puis je vais le coller sur tous les vecteurs que nous avons ici. Et aussi ici et mettez-le ici. L'autre chose que je pense que cela devrait faire, nous devons également changer de position ici. Comme nous dessinions directement dans l'espace mondial , nous convertissons déjà nos points espace local pour le membre des notes de courbe ici. Nous devons changer cela. Comme il s'agit également d'un vecteur, nous pouvons l'utiliser directement, mais pour le moment, nous ne voulons pas l'inverser. Nous voulons revenir du local au monde entier. Pourquoi est-ce le cas ? Parce que la position de la courbe est déjà sur la position locale, transformation locale ici, puisque nous l'utilisons, nous devons utiliser une autre méthode appelée point de transformation. En gros, celui-ci est inverse et celui-ci consiste transformer la position de l'espace local à l'espace mondial. Nous allons nous en servir . Mettez-le entre parenthèses et utilisez simplement l'autre méthode appelée point de transformation Disons ceci. Une autre chose que nous devons faire est de modifier notre mouvement de position. En gros, nous allons maintenant utiliser la position trans, mais transformer la position locale. Pour cela, je vais donc rechercher la transformation de la position locale, et ce sera également une transformation de la position locale. Sauvegardons cela et croisons les doigts, en espérant que cela fonctionne. Je vais enregistrer ça. Nous pouvons simplement appuyer sur Play et voir si cela fonctionne. OK. Il y a apparemment une erreur. OK. Oui, j'ai oublié une chose. Ici, le terme parent n' est pas encore défini d'une manière ou d'une autre. Nous devons donc copier ce commentaire ici et le mettre en haut de cette méthode ici. Nous allons donc nous assurer que le parent ne le soit pas. OK. Et appuyons à nouveau sur Play. Essayons à nouveau. J'espère que cela fonctionne. Maintenant, nous pouvons déplacer son parent et, comme vous pouvez le voir, notre objet de jeu suit le parent. Il se déplace toujours sur la même courbe, mais la courbe est décalée par rapport à notre parent ici. Si je le déplace à nouveau, il se déplacera dans cette zone ici. Mais si je le repousse, il peut revenir aux courbes initiales. En gros, nous avons réussi à convertir la courbe l'espace local de notre objet de jeu ici. Une autre étape de performance, d' ailleurs, pour déplacer un objet, puisque nous déplaçons l'objet, il est vivement recommandé d' ajouter un corps rigide, car nous utilisons un collider Unity définit ou explique que nous ne devons pas déplacer un objet qui n'a que Box Collider en utilisant la transformation de cette position locale Je vais ajouter un corps rigide. Mais nous pouvons configurer le corps rigide manière schématique et désactiver l'utilisation de la gravité Cela ne calculera aucun mouvement physique, mais l'unité le verra comme un objet dynamique. C'est beaucoup plus performant que sans ce boîtier rigide. OK. Il suffit donc de sauvegarder la scène, et ensuite, nous pouvons continuer à faire la rotation. 17. 17 Déplacement des nœuds pour faire pivoter des objets: Passons maintenant à l'aspect amusant, savoir la rotation, et nous allons utiliser beaucoup de quaternions Mais c'est bon. N'ayez pas peur avec le quaternion, car nous pouvons convertir nos valeurs ulaires Passons au script. Ouvrons notre script note moo ici, et nous avons déjà préparé quelques variables pour la rotation, mais nous devons en ajouter d'autres Tapons un nouveau flottant privé et ce sera la prochaine capture d'angle. Nous voulons obtenir la valeur de rotation, peut-être toutes les demi-secondes, et nous allons ajuster notre rotation à cette valeur à chaque image Nous allons avoir une rotation très fluide, et je vais créer une variable de quaternion privée, dont voici la valeur de rotation Rotation. Quel est le problème avec mon clavier ? OK. Maintenant, revenons à notre routine de départ, et voici ce mouvement. Créons un commentaire. Cela gère l'index des vecteurs de trajectoire et décide de la prochaine position cible. Nous allons maintenant vérifier si nous avons activé la rotation de l'objet et ici, je vais créer un autre f, et ce sera le cas si le temps est supérieur à notre prochain angle graphique. Chaque fois que le temps est supérieur à notre prochaine courbe d'angle , nous voulons saisir la nouvelle rotation Ici, nous allons augmenter notre courbe d' angle à une valeur de temps, mais nous allons ajouter un demi-flotteur, ce qui signifie une demi-seconde de notre heure actuelle Et cela sera à nouveau évalué chaque fois que notre temps sera supérieur à celui de la dernière courbe angulaire. abord, nous devons créer un arbre vectoriel, et ce sera la même direction mais égale. Pour la direction, ce sera l'indice de trajectoire du pus ID. Les vecteurs qui sont actuellement notre cible et que nous soustrayons avec nous transforment la position locale Comme tous les vecteurs sont déjà en position locale, nous allons toujours l'utiliser. OK. Et ici, je vais vérifier si la magnitude carrée est supérieure à une très petite valeur, disons 0,05, car je veux éviter que la magnitude carrée ou la longueur de notre vecteur soit nulle, ce qui pourrait arriver. Je veux ignorer cela. Je veux m'assurer que nous ne calculons que lorsque longueur de notre cerf est supérieure à zéro. Ensuite, nous allons définir notre valeur de rotation. Il s'agit d'un quaternion, et nous pouvons utiliser le quaternion frappé et nous pouvons utiliser la méthode qu'il contient appelée rotation, pour créer une rotation avec la valeur spécifiée vers l' créer une rotation avec la valeur Cela créera une rotation spécifiée à partir d'un facteur de direction. Cette direction permet de décider de la rotation de l'objet vers l'avant. OK. Utilisons simplement le cerf pour le haut, je vais utiliser le vecteur trois donc le monde parce que c'est l' axe Y et en gros, nous voulons faire pivoter notre objet de jeu sur son axe y ici comme ceci. Cela devrait. Nous voulons nous assurer que notre axe est orienté vers le haut. Ici, nous avons cette rotation. Maintenant, nous allons créer une valeur bancaire. Tapons float z bang. Nous allons obtenir notre rotation actuelle sur l'axe y, mais en la soustrayant avec notre angle inférieur Angle par rapport au graphique précédent. Ici, nous devons créer une autre variable. Faisons-le simplement. En plus de cela, je vais créer une ancienne variable d'angle dont le type sera float et je vais définir cette valeur sur huit fois zéro. Mais ici, nous allons obtenir notre rotation actuelle, car ce sera notre rotation, et je vais obtenir ses angles ulaires et la valeur de l'axe y ici. Il s'agit d'un quaternion, et nous devons obtenir la valeur y à partir de sa valeur ar Heureusement, avec le quaternion, nous pouvons obtenir la valeur de ses angles ulaires en tapant ces propriétés d' angles ulaires, et il renverra le Il renverra la représentation ularngle de la rotation et la soustraira avec notre ancien Nous avons donc ici une valeur bancaire que nous pouvons utiliser. Mais je pense que nous allons réduire cette valeur. Utilisons donc simplement une palourde à points mathématiques. OK. Et nous allons nous assurer que la valeur minimale sera de moins dix et que la valeur maximale sera un flux positif de dix ici. Maintenant, nous pouvons créer un autre quaternion pour la valeur bancaire, bancaire. Pour cette banque ici, nous allons créer un nouveau vecteur trois et la valeur sera zéro sur le zéro sur le y, et ce sera notre valeur bancaire Mais multiplions cela par notre valeur bancaire, notre variable ici. Nous pouvons créer à quel point le secteur bancaire sera extrême ou oui, comme ça. Comme il s'agit d'un quaternion, nous devons convertir ce vecteur Tapons simplement quaternion ular, placez le vecteur ici ou nous pouvons simplement taper le nouveau mot-clé new vector ici et simplement mettre sa valeur Voilà. Nous avons cette rotation des quaternions bancaires. Mais comme il s'agit d'un flottant, nous voulons arrondir cette valeur, elle sera beaucoup plus fluide, afin que nous puissions utiliser les calculs. Une, celle-ci, et mets la banque Z ici. Une banque à l'intérieur. Nous voulons nous assurer que la banque Z renvoie toujours un numéro d'itinéraire et que nous puissions multiplier ce nombre par notre valeur bancaire. Maintenant que nous avons déjà notre rotation de base et notre rotation bancaire, nous pouvons simplement appliquer cette rotation bancaire à notre rotation. Pour ajouter une rotation à un quaternion, nous devons multiplier ce quaternion par le quaternion Multiplions simplement cela égaler la valeur bancaire ici. Après avoir déjà ajouté notre rotation bancaire à notre rotation directionnelle de base, nous allons reprendre notre ancien angle, et ce sera pour le prochain angle de rotation plus tard. Ce seront nos angles de rotation, angulaires. Point y. Ça devrait faire l'affaire ici. Je vais supprimer tout cela puisque je l'ai mal formulé, et je vais le mettre en dessous de notre mouvement ici. Donc, après avoir transformé la ligne de position locale ici, et après avoir activé l'objet enraciné, nous voulons appliquer la rotation. Nous pouvons donc simplement utiliser la rotation trans et nous pouvons utiliser un quaternion sl Pour la valeur, ce sera notre rotation précédente comme se déplacer vers, mais c'est pour la rotation, et c'est la sphère qui interpole sphériquement entre A et B. Je vais interpoler B. Je vais interpoler notre quaternion a à la valeur du quaternion Pour la valeur b, ce sera notre rotation ici, la valeur de rotation que nous avons déjà calculée à l'intérieur du prochain moment du gramme angulaire ici. Pour la vitesse, nous allons utiliser la vitesse de rotation, comme toujours, nous devons la multiplier par notre point temporel à la fois. OK. Nous appliquons donc déjà la rotation. Sauvegardons le script et croisons les doigts pour savoir s'il fonctionne ou non. Maintenant, nous fixons la valeur de mendicité à cinq et nous devons activer les options de rotation des objets ici Alors jouons à ça. Maintenant, nous pouvons voir que notre objet est une banque, mais d'une manière ou d'une autre, il frappe dans le mauvais sens Nous pouvons régler ce problème très facilement. Mais je vais consulter notre script ici et je mets cette valeur bancaire à une valeur négative ici. Nous inversons la valeur, et cela devrait faire l'affaire Rejouons-y une fois que j'aurai fini compiler et de C, et voilà Notre objet est la banque à chaque fois qu'il tourne. OK. Oui. Nous avons donc maintenant un script de déplacement de nœuds qui gère la courbe, nous permet de visualiser le mouvement, et nous pouvons également créer des animations bancaires ou des effets d'alignement pour des objets tels que des avions ennemis plus tard. Cela nous permet de passer à la leçon suivante. 18. 18 vagues ennemies: OK. Maintenant, ce nœud est déjà en mouvement. Il est maintenant temps de créer le script de la vague ennemie. Avec ce script, nous pouvons créer une copie de notre ennemi en fonction des options de l'inspecteur, et nous pouvons également régler le délai afin d'avoir une belle formation volante. Créons un nouveau dossier contenant des scripts ennemis. Dans ce dossier, je vais créer un nouveau script C que je vais appeler des vagues ennemies. OK. Ouvrons notre éditeur. Oui. Nous avons déjà ouvert ce script, et je vais en créer un plus petit. Nous devons déclarer quelques variables. Je vais juste copier-coller la variable que j' ai déjà préparée. En gros, je vais expliquer cela un par un. La première, le nombre entier nommé num waves, correspond au nombre de vagues ennemies que nous voulons créer. Cela fixe le taux de graisse à un, mais nous pourrons le modifier ultérieurement sur l'inspecteur. C'est l'intervalle entre les ennemis. Combien de secondes voulez-vous lancer chacun des ennemis séparément ? Nous voulons désactiver l'ennemi au bout de 2 secondes, et bien sûr, nous pouvons modifier cela en fonction de la longueur de notre courbe. En gros, cette variable nous permet d'éliminer l'ennemi une fois qu'il n' a pas été abattu pendant 2 ou 3 secondes. Si nous ne parvenons pas à tuer cet ennemi, nous voulons le supprimer en utilisant une autre méthode et nous créerons ces méthodes ultérieurement. Nous n'autorisons pas celui-ci, nous pouvons le supprimer en toute sécurité . Enregistrez le script. Il s'agit essentiellement d'une liste d'objets de jeu et chaque enfant que nous instancions, nous allons le mettre dans cette liste ici, il y a deux variables privées Le premier est un objet de jeu, et celui-ci pourra contenir le premier enfant. En gros, nous allons placer un seul enfant dans les groupes ennemis, mais au début, cet enfant principal sera instancié en fonction du nombre de vagues que nous avons configuré ici La variable suivante est essentiellement du type à attendre quelques secondes, et elle est destinée aux coroutines plus tard pendant l'intervalle et est également désactivée La valeur de chacune de ces secondes d'attente sera définie à partir de ce flottant ici. Commençons maintenant à créer les codes. Je vais supprimer la méthode de mise à jour puisque nous n'allons pas l'utiliser Je vais d'abord déclarer un co-root coparl Créons un it et nous allons demander à notre enfant principal de taper la variable main child et, à partir de sa forme de départ, obtenir l'enfant zéro, le premier enfant Comme il n'y aura qu'un seul enfant dans les groupes ennemis, nous allons jouer à son jeu. Une autre chose est que nous voulons obtenir sa position dans le monde. Faisons-le simplement, créons une nouvelle variable temporaire, et ce sera l' enfant principal qui transformera cette position. Et nous voulons désactiver l'enfant principal, taper la variable Mind et utiliser la méthode set active et la définir sur false. Il sera désactivé au démarrage et nous voulons ajouter l'enfant principal ici à la liste des objets de jeu de notre enfant ici. Tapez simplement le nom de la variable qui est enfant et nous allons ajouter l'objet principal du jeu enfant. Maintenant, nous allons regarder à travers les vagues, appeler ça OK. Et comme nous avons déjà le premier enfant ici, nous voulons partir de un, pas de zéro, et nous allons instancier un nouvel objet de jeu. Nous pouvons simplement le stocker dans une variable d' objet de jeu temporaire et utiliser la commande instanciation pour instancier Pour le poste, nous allons obtenir sa position. Et pour la rotation, nous pouvons simplement demander à l' enfant principal de transformer la rotation. OK. Il a donc la même rotation que notre premier enfant ici. Nous voulons ajouter temporairement cet objet de jeu à notre liste ici. Ici, c'est la température des enfants. Nous voulons maintenant nous assurer que ce parent de l'ensemble de transformations enfant peut utiliser la méthode ici pour regrouper l'objet de jeu ou l' objet de fin de jeu qui contient cette transformation par script. Cet objet du jeu T sera le parent de l'enfant, et nous voulons également configurer l'enfant pour qu'il le désactive au début. Nous allons utiliser le paramètre actif à faux. Nous pouvons maintenant enregistrer le script. C'est pour l'initialisation. Ensuite, nous devons créer les coroutines. Tapez simplement le numérateur I et appelons cela des vagues de départ. Ici, nous devons examiner le nombre de vagues que nous avons ici. Nous devons créer une nouvelle variable temporaire. Il suffit de le nommer et de mettre cette valeur à zéro, et nous allons régler pendant que i est inférieur à nos ondes engourdies, puis nous voulons examiner la condition ci-dessous ici Je vais ajouter un espace ici pour faciliter la lecture. Maintenant, nous voulons activer l'enfant en fonction de son index. J'ai défini act sur true. Ensuite, nous voulons obtenir un rendement en fonction de l' intervalle dont nous disposons. Mais avant de donner l'intervalle, nous voulons augmenter la valeur. Nous augmentons donc d'un en ajoutant les deux plusin, nous augmentons d'une valeur de un et nous devons désactiver l'enfant après quelques secondes. Et cela nécessitera un autre type de coroutine, celui que vous faites ici Pour que nous puissions nous en souvenir plus tard, nous devons ajouter le courtin ici Créons maintenant un autre croutin destiné aux enfants handicapés Nous devons transmettre l'objet du jeu. Nous pouvons donc transmettre l'indice I de l'enfant à cet argument plus tard. Ici, nous voulons simplement obtenir un retour en utilisant le paramètre désactivé par la suite, et nous voulons vérifier si l'objet du jeu n'est pas détruit. Ensuite, nous voulons définir l'objet du jeu sur. Maintenant, nous l'avons. Nous pouvons utiliser cette routine pour désactiver l'enfant. Écrivons-le ici. Commencez la routine et transmettez l'enfant handicapé ici et transmettez l'argument entre parenthèses. Cela devrait suffire. Maintenant, nous devons également compter combien. Si nous avons déjà tué tous les ennemis ou s'il y a un événement de perte en chaîne. Nous allons créer une nouvelle coroutine appelée check combo OK. Tout d'abord, nous voulons retarder cette coroutine avec un nouveau poids 4 secondes et la valeur dépendra du nombre d'enfants transformés Si nous avons six enfants, alors cette combinaison ici, cette routine conjointe ici seront retardées de 6 secondes, puis les codes en dessous de ce rendement retourneront au poids de 4 secondes. Nous voulons vérifier si le nombre d'enfants transformés est égal à zéro, s est égal à zéro, cela signifie que nous tuons tous les enfants. Et nous pouvons imprimer quelque chose ici pour le mettre sur écoute plus tard et tuer Combo, peut-être Et si nombre d'enfants est toujours supérieur à zéro, cela signifie que nous n'avons pas détruit tous les enfants, nous pouvons donc simplement imprimer. OK. Perte de chaîne. Plus tard, nous pourrons émettre ici un son décrivant que nous avons perdu une chaîne d'ennemis, comme dans Sky Force. Nous devons maintenant mettre quelques codes au début ici. En gros, nous devons insérer une valeur pour l'intervalle, puisque nous n'avons mis aucune valeur ici Nous allons donc attribuer une nouvelle pondération pendant les secondes et la valeur sera l'intervalle entre le flottement ennemi et la désactivation Ce sera également un nouveau poids pendant les secondes et cela permettra de supprimer les variables flottantes. Et exécutons la fonction int. Ensuite, nous pouvons simplement exécuter les vagues de démarrage de la coroutine, et la deuxième coroutine est la routine start co, et ce sera la combinaison de vérification En gros, nous voulons commencer les vagues ici, et en même temps, nous voulons vérifier le combo et le combo sera retardé en fonction du nombre d'enfants. J'espère que nous l'avons déjà détruit avant que cela ne soit terminé. Et nous devrions faire l'affaire, et commencer à appliquer le script à l'objet Maintenant, pour le cube ici, nous pouvons simplement utiliser un ennemi ici. Je vais voir nos modèles ici et je vais prendre cet avion ici, le plan D, et le considérer comme un enfant du cube. Nous pouvons simplement retirer le cube et mesurer le composant. Plus tard, nous pourrons également redimensionner le boitier collider, mais maintenant nous allons le régler comme suit pour les vagues ennemies, nous voulons le placer sur l'objet parent ici Donc, là où la plaque est fixée, nous voulons la mettre là. Ajoutons simplement les vagues ennemies ici et ici, donnons une valeur au nombre de vagues, et nommons ces vagues ennemies. Appelons cette vague ennemie, et ce sera le nom de ma pièce. Sauvegardez ceci. Essayons donc de jouer à ça. OK. Voilà. Nous avons ces copies. Mais comme vous pouvez le voir ici, comme le navire se déplace trop lentement, il est facilement détruit. Je vais porter cette valeur de vitesse à cinq pour les vagues ennemies, nous pouvons éliminer après environ 10 secondes et pour l'intervalle entre les ennemis fixé à 1,5 seconde. Vous pouvez essayer les valeurs qui conviennent à votre conception, à votre conception de l'écart. Essayons d'y rejouer. Voilà, deux, trois, quatre, mais puisque nous avons cette boucle, ce mouvement, le navire tourne en boucle Nous devons nous assurer que cela désactive la boucle de déplacement des nœuds ici. Plus tard, nous allons placer ces ondes ennemies en dehors du cadre de la caméra et nous aurons un collisionneur sur la vague ennemie qui sera déclenché par le bord de la collision par le bord de la collision. Plus tard, nous allons deviner à l'extérieur de la Chaque fois qu'un ennemi est déclenché par ce collisionneur, il est activé Cela devrait suffire à la vague ennemie et nous pouvons passer à la leçon suivante. 19. 19 Rotation automatique: OK. Nous allons donc maintenant créer quelques scripts de transformation supplémentaires. Dans cette vidéo, nous allons créer un script qui fera automatiquement pivoter un objet. Je vais donc d'abord désactiver les vagues ennemies et créer un nouvel ennemi. Passons à notre dossier de modèles. Et voilà, je vais chercher notre tourelle ronde, je vais la mettre sur les lieux C'est où ? Il y en a un. Et OK. Maintenant, nous avons cette tourelle ici. En gros, il s'agit de deux objets, la tourelle de base, et le cercle, la partie supérieure ici, la partie supérieure ici Maintenant, créons d'abord le script. Accédez au projet, allez dans le dossier des scripts, et sous tranfm, créons un nouveau script et appelons cela la rotation automatique Et ouvrons-le. Maintenant que le script est ouvert, nous devons créer quelques variables. Je vais simplement coller la variable à partir du code que j'ai préparé, et voici les variables, et j'utilise un attribut d'en-tête pour sa variable. Cela facilitera donc regroupement de nos variables sous cet en-tête et vous pourrez mieux disposer vos variables sur l'inspecteur pour une meilleure lisibilité En gros, nous avons besoin d' une variable flottante appelée vitesse de rotation, et nous avons également besoin de deux variables d'investissement Le premier s'appelle endless et le premier s' appelle start. Si nous voulons créer une rotation continue, nous devons activer les options infinies. Si nous voulons activer la rotation dès le départ, nous devons activer ce lingot La deuxième variable est le facteur, la dernière est le facteur trois et c'est pour une rotation ciblée. Cela signifie que si nous n' utilisons pas la rotation continue , nous pouvons utiliser cette rotation cible. Il pivotera selon un certain angle que nous voulons définir ici sur l'arbre vectoriel. Mais je vais également d'abord changer cette vitesse de rotation en arbre vectoriel, afin que nous puissions créer différents types de rotation, différents types de rotation ici. Faisons-le. Je vais d'abord supprimer la mise à jour. Nous n'allons pas utiliser la méthode de réduction et nous allons utiliser une routine ici Je vais créer un nouveau public void start rotate, ce sera une méthode publique. Ensuite, nous pouvons utiliser l'événement inside unit. Par exemple, nous pouvons utiliser ci-dessous l' événement unitaire en cas de décès ou quoi que ce soit d'autre. Par exemple, si je dois vérifier cela plus tard, nous utiliserons beaucoup plus d'événements Unity, mais en gros, je mets à disposition une méthode publique, je mets à disposition une méthode publique, afin que nous puissions l'utiliser pour un autre événement Unity afin déclencher cette rotation à partir un autre script en utilisant l'événement Unity. Si nous ne voulons pas le démarrer tout suite en utilisant la fonction de démarrage. Je vais maintenant créer la routine co et je vais l'appeler rotation. Ici, je vais créer une nouvelle variable locale, un quart pour la rotation cible La rotation cible sera la transformation, la rotation locale et les anciens angles. Ajouté par notre angle de rotation. Mais comme c'est en ular je dois le convertir en quaternion Je vais utiliser la classe quaternion et utiliser la méthode ar et mettre toutes ces valeurs ular entre parenthèses Nous passons maintenant des valeurs d'un ular à un quaternion. Je vais vérifier si le lingot sans fin est activé, puis nous voulons effectuer le mouvement infini ou la rotation sans fin Pendant que j'utilise ici, ce code continuera de fonctionner car endless est vrai et nous allons ajouter un rendement. Ici, nous allons faire pivoter notre objet de jeu. Tapons simplement transform, rotate et cela utilise les angles d'Euler Utilisons simplement notre vitesse de rotation ici. Depuis la rotation continue, utilisez l'option Ls ici et fermez-la avec A à C. Pour la faire pivoter toutes les secondes. Je veux dire que si nous voulons effectuer une rotation de 90 degrés par seconde, nous devons multiplier la valeur de la vitesse de rotation par le temps . Sauvegardez ceci. Nous devons créer une autre condition chaque fois qu'elle n'est pas infinie, puis nous voulons en créer une autre ici. Nous voulons vérifier si notre rotation de transformation n'est pas la même que notre rotation cible actuellement, puis nous voulons continuer à tourner. Nous allons maintenant transformer la rotation, et nous allons utiliser la rotation du quaternion vers Il s'agit d'une fonction permettant de créer une rotation entre une certaine valeur de quaternion et une autre valeur de quaternion Et nous avons déjà la rotation cible. La rotation précédente du quaternion serait une rotation locale, et la cible serait notre rotation cible à partir de cette valeur ici Et nous devons indiquer un delta maximum ici. Et pour la vitesse de rotation, nous pouvons simplement utiliser l'amplitude de cette valeur ici. Créons un flotteur qui stockera cette magnitude une fois ici. Vitesse de flottaison et désolé, je supprime d'une manière ou d'une autre la vitesse de rotation ici. Créons une vitesse de flottement et obtenons l'amplitude de notre vitesse de rotation. Et nous pouvons utiliser la vitesse pour définir nos degrés Delta, mais en la multipliant par le temps delta. Il accumule ici sa vitesse en quelques secondes. Mettons un rendement. Non. Mais je pense que pour des raisons de clarté, je vais le supprimer ici et placer un autre flotteur dans la rotation de la cible et nous allons mettre une vitesse ici. Nous allons utiliser la vitesse de cette variable, afin de définir une vitesse différente et de mieux la regrouper. Le design ou chaque fois que vous voudrez concevoir votre niveau, concevez votre ennemi, vous saurez chaque fois que vous utilisez la rotation angulaire et que vous devez utiliser la vitesse. Sinon, vous pourriez oublier de mettre une valeur dans cette variable. Nous avons maintenant cette routine. Nous pouvons maintenant commencer notre routine. Tout d'abord, au démarrage, nous allons vérifier si on start est vrai, puis nous voulons activer notre routine. Démarrez la coroutine et exécutons les routines de rotation en d, et je vais simplement copier ces lignes ici et les coller lors de la rotation de départ Et certains d'entre vous se demandent peut-être pourquoi avons-nous besoin de cette méthode. En gros, comme je l'ai déjà expliqué, nous devons créer cette méthode de rotation de démarrage, chaque fois que nous voulons déclencher cette rotation à partir d'un autre script en utilisant l'événement Unity. Je vous montrerai plus tard comment nous pouvons le faire. Mais pour le moment, nous pouvons enregistrer le script ici, c'est-à-dire exécutés chaque fois que nous démarrerons le jeu, mais uniquement si le lingot de départ est coché ou activé Une autre chose dont nous avons besoin est de créer une méthode désactivée et Undisable essentiellement une méthode Unity intégrée et elle est toujours exécutée chaque fois que l' objet est désactivé ou détruit Nous pouvons simplement arrêter toutes les coroutines à l'intérieur de ce désactivé ici Sauvegardez ceci, essayons ceci. Optez pour l'unité, mettons le script à faire pivoter vers la tourelle circulaire ici et où est-il ? Outro l'a mis OK. Et comme vous pouvez le voir ici, nous avons un groupe de rotation continue. Je veux créer une rotation continue, et je veux m' assurer que nous tournons sur le Actuellement, je n'en suis pas si sûr car l' axe pivote d'une manière ou d'une autre Je veux m'assurer que nous avons un axe y vers le haut. Je vais donc créer un objet de jeu vide et le déplacer vers le haut, et cet objet de jeu vide a un axe y orienté vers le haut, et c'est ce que je veux. Je vais faire de notre tourelle circulaire l'enfant de l'objet du jeu Sous circle tre, je vais supprimer notre pour faire pivoter et je vais faire pivoter l'objet parent, qui est celui-ci. Et nommez simplement cette partie supérieure, commencez. Et faisons-le pivoter d' environ 45 degrés par seconde, et je vais m'assurer que c'est infini et je veux m' assurer que la rotation commence dès le début. Jouons à ça. Voilà. Comme vous pouvez le voir, nous avons un objet qui tourne. Maintenant on peut mélanger ça avec le script I'm sorry, shoot. Par exemple, je peux créer un objet de jeu vide. Je vais nommer les objets du jeu de tir, et nous pourrons à nouveau créer des objets vides. Je vais modifier cette vue par rapport à la vue de dessus, afin de faciliter la mise en page. Je vais mettre le premier ici. Je veux aligner l'axe Z sur cette surface ici, je vais le placer de 25 degrés. Ajoutons un script de tir automatique, et nous pouvons utiliser un profil. Créons un nouveau profil. Voici le joueur. Dupliquons cela et renommons cet ennemi ou nous pouvons simplement renommer cette tourelle circulaire Et réduisez la vitesse à une valeur inférieure, peut-être 15, et infligez un point de dégâts et une cadence de tir. Je veux faire en la tourelle tire à une certaine cadence Il se déclenchera donc toutes les 0,2 seconde et aura un intervalle de 4 secondes. Il s'arrêtera pendant 4 secondes, puis tirera à nouveau. Chaque fois qu'il tire, je veux me préparer à tirer peut-être cinq balles et je ne veux pas me propager Réglez donc l'écart à zéro, et nous pouvons régler la destruction à deux, c'est bon Maintenant, nous pouvons utiliser ce profil ou je vais photographier le profil. Et pour les préférences en matière de puces, nous pouvons d' abord essayer d'utiliser ma puce pour le point de feu Je vais laisser ce champ vide parce que nous voulons utiliser cette transformation Ensuite, je vais dupliquer cet objet de jeu, faire pivoter de 50 et le placer ici de 50, mais je pense qu'il devrait être de plus de 65. Cela signifie que nous en ajoutons 40, je vais juste en ajouter encore 40. Quelque chose comme ça, alignez-le manuellement si vous le souhaitez. Nous pouvons le recopier ici. Et faites une ligne jusqu'à la surface. Copiez à nouveau. Copiez-le à nouveau, faites-le pivoter , copiez-le à nouveau et un autre pour suivre celui-ci, puis nous sommes prêts avec l'ennemi. OK. Nous avons maintenant huit objets de jeu. Et je veux m' assurer que cette ligne est bien alignée sur le plan Y ici. OK. Maintenant, je vais enregistrer la scène, et j'ai créé tout le jeu de tir sur un seul objet de jeu, afin que nous puissions désactiver cet objet chaque fois que nous avons besoin de vous et l'activer chaque fois que nous avons besoin Maintenant, jouons-y et voilà. Et au bout de 4 secondes, il recommencera à tirer et tirera 55 balles avec un intervalle de 0,2 seconde. Il s'arrêtera pendant 4 secondes et il le fera continuellement Avec ce système à plusieurs composants de script, vous pouvez créer le comportement que vous souhaitez pour votre ennemi. Il est assez polyvalent. Ensuite, nous allons créer un autre script concernant le script de transformation. À deux pour cette vidéo. 20. 20 Regardez le joueur: OK. Nous allons donc maintenant créer une tourelle tournée vers le joueur La tourelle qui suivra la position du joueur, une sorte de tourelle à crayons, et désactivons simplement notre tourelle ronde ici Maintenant que nous avons désactivé notre tourelle ronde, allons dans notre dossier de modèles et nous avons un Where is it ? Sur un objet. Je vais le mettre au milieu. Comme vous pouvez le constater, nous avons ici deux types de jeu de tir différents. Nous allons utiliser celui-ci pour lutter contre la menace des missiles. Je vais l'utiliser pour développer cela. Je vais sélectionner celui-ci et je vais supprimer ce ThredF là, missile, je vais dupliquer cet objet ici, je vais inverser l'échelle des x à moins 100 et je vais le déplacer sur le côté ici Quelque chose comme ça. Nous pouvons simplement copier la valeur de la position ici et la coller avec un signe négatif. Il s'aligne. OK. Nous allons maintenant définir un certain nombre de choses. abord, je vais créer un objet anti-jeu, et ce sera la partie supérieure pour la partie supérieure, je vais passer à cette position sur l'axe y. Ensuite, je vais configurer le haut du corps, le missile, comme graphique de cet objet de jeu ici. OK. Maintenant, nous pouvons d'abord créer le script. Passons à notre dossier de scripts et à la transformation. Je vais créer un nouveau script que je vais examiner dans le lecteur. Nous pouvons donc simplement renommer ce look at player pour le script. Ouvrons ça. Maintenant, où est-il ? Je dois l'ouvrir à nouveau. Maintenant, nous allons déclarer certaines variables en haut de la classe, je vais juste coller ce code ici. Ce sont les variables que nous allons utiliser. Il s'agit de la vitesse de rotation. À quelle vitesse notre fil suivra le joueur en termes de vitesse de rotation ? L'autre variable est une variable privée, qui est la référence du joueur, mais ce n'est pas l'objet du jeu. C'est une transformation et aussi un arbre vectoriel pour la direction. Nous allons enregistrer notre direction dans ce vecteur ici. Dans la fonction ou la méthode de démarrage, nous pouvons simplement taper player, et nous allons trouver le joueur en utilisant sa taxe se a game object class et nous pouvons utiliser sa méthode appelée find game object with tag. Nous pouvons mettre tag here player puisque cela renvoie un objet de jeu, nous devons accéder à sa transformation, donc nous pouvons simplement utiliser transform. OK. Avec cela, nous avons trouvé notre transformation de lecteur et nous l'avons stockée dans la variable de transformation, celle-ci ici, et nous pouvons l' utiliser dans la mise à jour. Tout d'abord, lors de la mise à jour, nous voulons nous assurer que le joueur ne l'est pas, puis nous voulons faire le codage ici, dans Function. Sinon, si le joueur est détruit, nous voulons arrêter de regarder. Nous pouvons simplement utiliser la direction ou regarder là. Ici, nous pouvons obtenir la position du joueur et la soustraire à notre position actuelle Et chaque fois que vous vous abonnez à une position différente, nous obtiendrons un facteur dirigeant vers cette position, ici la première position. Ainsi, chaque fois que nous substituons la position du joueur à notre position de transfert, nous allons obtenir la direction entre la position du porteur du script et la position du joueur. Mais puisque la valeur y peut être sur un plan différent à un niveau différent. Je vais remettre la valeur y à zéro. Je vais donc m'assurer que les rotations suivent uniquement les positions des plans x et z. Sinon, si nous n'avons pas fait cette ligne ici, elle risque de pivoter légèrement vers le haut, regardant le joueur , mais nous ne le voulons pas. Une fois que nous l' avons obtenu, nous pouvons simplement effectuer une rotation en utilisant la rotation transformée, et nous pouvons utiliser la rotation quaternaire, en utilisant la rotation vers le point de départ, nous allons utiliser sa Et comme il s'agit d'un vecteur, je vais utiliser une classe de quaternions. Dans cette classe de quateron, nous avons une rotation des localisations La crotation consiste essentiellement à demander une direction vectorielle. Nous pouvons prendre cette direction tout de suite. Nous pouvons utiliser cette vitesse de rotation comme vitesse rotation de type LTA en degrés de mélange Comme toujours, nous devons le multiplier par le temps delta puisque le code exécute chaque image. Et gardons ça de côté. Nous pouvons réellement, nous pouvons utiliser tod ou nous pouvons utiliser la fonction voiture Je vais utiliser le c et le sauvegarder à nouveau. Revenons-en à l'unité. Comment créer cet ennemi ? Nous pouvons placer le regard du joueur sur le haut du corps et je crée exprès un nouvel Nous avons une orientation qui correspond à notre monde d'ici. L'axe y doit pointer vers le haut comme le y sur le monde. Pour le tireur, nous pouvons simplement créer un nouvel objet d'équipe et le placer ici, le mettre ici Et nous pouvons simplement ajouter une rotation automatique, mais un jeu de tir automatique et créer un profil. Je vais créer un nouveau profil d'arme. Ce sera un missile avec une seule quantité, et il y aura peut-être un intervalle par seconde. De cette façon, nous pouvons facilement sélectionner notre profil par son nom. Ici, nous pouvons changer la vitesse à une valeur faible. Disons cinq ou dix. Je vais juste en faire dix. ce qui concerne les dégâts, nous pouvons les augmenter assez et la cadence de tir sera nulle, mais l'intervalle sera de deux, et le taux de destruction sera peut-être également de deux, puis se propagera les augmenter assez et la cadence de tir sera nulle, mais l'intervalle sera de deux, et le taux de destruction sera peut-être également de à zéro pour atteindre un. Revenez donc à notre jeu de tir, le tireur de missiles, et définissez le profil du missile pour le préap de poulette. Nous devons créer le profil du missile pour le préap de poulette. Nous devons créer un nouveau préap. Allons-y Je vais aller dans le dossier des modèles et faire glisser notre missile sur la scène, et réinitialisons d'abord sa valeur. D'une manière ou d'une autre, la rotation est incorrecte, donc je vais la faire pivoter à nouveau, mais je vais la faire pivoter dans l'autre sens, et je vais créer un nouvel objet antigam Cela fait face à l'avant comme ça. Je vais attribuer la perte à cet enfant de l'objet donné ici. Je vais réduire la valeur à zéro et la faire pivoter pour qu'elle soit alignée vers l'avant avec l'axe avant de l'objet donné par notre parent Nous allons ajouter un collisionneur à capsules régler la direction par rapport à l'axe z et régler les taux à une très petite valeur, comme 0,5 0,7, et la hauteur doit être 0,5 comme ça et assurez-vous que la gâchette est cochée. Je vais ajouter un corps rigide, mais nous allons nous assurer que nos armes se comportent exactement comme nos balles, donc nous allons désactiver l'utilisation de la gravité Alors vérifiez qu'il faut utiliser la gravité et appelez ce missile. OK. Et nous allons créer le script. Je vais d'abord le réaliser en tant que préfabriqué. Assurez-vous de glisser l'objet de jeu parent. Sauvegardez ceci, passons à notre script ici. Maintenant, nous avons cette partie supérieure, et nous avons aussi le jeu de tir Je vais d'abord désactiver le jeu de tir, enregistrer ceci et essayer. Mais pour essayer cela dans le script, nous devons activer notre lecteur et assurer que nous avons défini notre tag de joueur sur joueur . Je vais m' assurer que c'est ce que nous faisons. Et pour la tourelle, je vais remplacer la couche par l'objet au sol Et pour le missile, je vais changer la couche de l'objet aérien. Je vais appliquer ces préfeps ici. Supprimons d'abord notre missile. Sauvegardez ceci et jouons-y. OK. OK. Maintenant, comme vous pouvez le voir ici. C'est assez petit. Je vais l'agrandir , le maximiser . Mais voilà. Comme vous pouvez le constater, la tourelle attend toujours le joueur avec impatience Créons maintenant le script du missile. Nous avons déjà préparé notre préfep ici. Mettons-le en scène. Ici, pendant la préparation, il y a une flamme de fumée Ajoutons-le sous forme de graphique de l'objet du jeu. Nous avons une flamme, mais elle est très grosse. Créons simplement quelques ajustements pour cet objet de jeu ici. Je vais réinitialiser sa valeur. heure actuelle, il se déplace dans cette direction, nous allons donc effectuer une rotation dans l'autre sens. Cela devrait être 180, et je vais supprimer notre point lumineux ici, formera de la fumée de floe Déplaçons-le vers l' arrière, là où, à la fin de notre miscel, nous allons modifier quelques paramètres ici Donc, sous forme, nous allons nous assurer que le rayon est très petit v. Ajoutons 20. Et pour la taille de départ, je vais également la remplacer par une petite valeur de 0,120 0,3, disons, pour voir si cela fonctionne Maintenant, notre fumée est petite, mais le feu est toujours gros Il suffit donc de changer la flamme ici et de la régler sur une valeur légèrement supérieure de 0,2 à 0,4. Pour les émissions, désolé. Pour la forme, je vais également régler ce rayon à une petite valeur, zéro, l'angle, je vais également le rendre très faible autour de sept. Nous avons une fusée droite et lui donnons également une petite valeur neuf, par exemple. Je vais aussi réduire la durée de vie peut-être 2.1 Oui, quelque chose comme ça. Je vais changer la vitesse de démarrage à une très petite valeur, 0,1. C'est donc très lent comme ça. Et pour la flamme, changeons également la vitesse de démarrage à une valeur très lente comme celle-ci. Mais nous voulons transformer l'espace de simulation en monde. Cela créera donc un certain mouvement de traînée chaque fois que notre missile se déplace. Flamme, fumée, nous voulons également transformer l' espace de simulation en monde. Sauvegardez-le et accédez au parent le plus proche du missile. Donnez l'objet ici, puis appuyez sur Appliquer. Passons maintenant au dossier des scripts, et sous Armes, créons un script de déplacement de missile. Alors, bougez le missile, et ouvrons-le. OK. Maintenant que le missile se déplace, nous devons créer quelques variables. Je vais donc coller ceci. Variable que j'ai déjà préparée. Il s'agit essentiellement de la vitesse de rotation. Puisque le missile va tourner en suivant le joueur. Nous devons le déclarer et le missile ici découlera de notre coup de balle. Ce sera donc la vitesse et non pas le corps rigide, mais la vitesse. Mais nous devons également hériter du corps rigide. Configurons-le donc pour le protéger. Virtual ou simplement protégé devrait être un corps rigide suffisamment protégé, et sous Miss Move, je peux déclarer le corps rigide. Nous pouvons utiliser le MRB et, comme vous pouvez le constater, cette variable est disponible, même si nous ne l'avons pas écrite depuis car le script est dérivé de cette puce. Nous pouvons donc simplement obtenir un composant. Un corps rigide, comme celui-ci. Sauvegardez ceci. Nous voulons également déclarer notre pas de temps en physique. Puisque nous allons utiliser une co-routine dans ce script. Contrairement à la puce , nous utilisons mise à jour fixe et pour le mouvement des missiles, nous utilisons une routine complémentaire, nous voulons créer un délai montant équivalent en secondes à notre pas de physique. Nous créons simplement un nouveau poids en quelques secondes. Ici, nous allons taper fix Delta time, comme ceci. C'est le pas dans le temps. Changeons cela de la façon suivante. Et dans start, nous allons créer un nouveau départ pour le début ici, nous allons saisir le joueur et en utilisant la même méthode que précédemment, nous allons utiliser le bel objet de jeu avec tag et mettre le tag player entre parenthèses et nous allons récupérer sa transformation, nous allons supprimer la mise à jour S nous voulons créer un nouvel énumérateur qui est une routine, et donnons-lui simplement le nom start follow. Ici, nous allons passer à un argument, que je vais appeler durée de suivi, et nous allons définir si la durée de suivi est supérieure à zéro, puis nous voulons faire ce qui suit. Sinon, il se contentera d'avancer. Ici, et en dehors de cela, je vais vous donner le pas temporel de la physique. Chaque fois que le suivi est supérieur à zéro, nous allons le soustraire avec notre temps delta fixe Cela sera soustrait un par un et toutes les secondes. C'est comme un compte à rebours. Cela devrait être dans notre temps. Je vais couper ça ici. Ici, nous allons nous assurer que si le joueur n'est pas nul, s'il y a un joueur, alors nous voulons connaître sa rotation, sa direction et appliquer notre rotation de missile face au joueur. Créons simplement une variable temporaire p trois. Ce sera la direction à suivre. Prenons cette position pour notre joueur, soustrayons-la en transformant cette position, et nous pourrons faire pivoter ce missile en utilisant la rotation transformée et en utilisant le quaternion s. Pour la première rotation, nous avons simplement indiqué notre rotation, comme dans le script look at précédent Pour la deuxième rotation, nous pouvons utiliser le quaternion et sa méthode appelée rotation, et mettons ici la direction de la vitesse de rotation dans ces parents, nous l' avons déjà préparée, tapez rotation speed Mais comme cela s' exécute à une heure delta, il s'agit de cette étape temporelle physique En gros, ce co-rooté émule notre mise à jour fixe car nous voulons exécuter le code à chaque étape physique Nous devons le multiplier par le temps delta fixé dans le temps. OK. Donc, une fois que nous l'aurons. Maintenant, nous devons déplacer le missile désolé . Nous pouvons donc simplement. Déplace-le comme ça. Désolé, ville, mais MRB, la vélocité, et cela devrait être la plate-forme à l' avant de notre missile, multipliée par la Si vous vous posez la question, nous n'avons déclaré aucune variable de vitesse ici, mais nous l'avons accessible parce que nous sommes le script d'erreur du script Bullet Move et que dans notre Bullet Move, nous avons cette variable de vitesse publique et le corps rigide protégé. Chaque fois que nous utilisons une variable publique ou protégée, cette variable sera disponible pour la classe dérivée dérivée de cette classe ici OK. Maintenant, comme vous pouvez le voir ici, nous avons ce script, je vais le sauvegarder. Mais cet enracinement ne commence jamais, nous allons donc commencer cette activation Puisque nous utilisons le pull, nous voulons activer et désactiver les objets du jeu. Ainsi, chaque fois que les missiles sont activés, nous voulons recommencer le mouvement. Et nous n'utilisons pas la routine ontart start et n'exécutons pas la fonction, start flow Nous allons créer une variable qui contiendra la durée de suivi. Tapez simplement une virgule ici suivez la durée et définissez d'abord cette valeur sur un Il ne suivra le joueur que pendant 1 seconde et après cela, il ne volera que dans la dernière direction. Le missile fait face copiez cette variable et mettez-la dedans ici. Ça devrait faire le script. Essayons ceci et sous notre objet de jeu de missiles, sélectionnez l'objet de jeu de missile parent. Ajoutons le mouvement de notre missile ici pour la vitesse, définissons sa valeur. Il suffit de laisser la valeur ici, car le script de tir va nous transmettre la vitesse script de tir va nous transmettre la en utilisant la vitesse de notre profil ici. Sauvegardez ceci et je vais supprimer ce préfept ici et le tireur de missiles, je vais ajouter notre Accédez au dossier préfixe arme et utilisez le missile en tant que précepte de balle. Si nous voyons cela, nous avons une Voyons notre script de tournage. Chaque fois que nous tournons, est-ce que nous réglons la vitesse ? Je ne suis pas tout à fait sûr ici. Nous sommes en train de tirer. Nous devons régler la vitesse ici. Prenons simplement son composant et saisissons le mouvement de la balle. C'est pourquoi nous héritons du déménagement. Nous voulons rechercher uniquement le mouvement de la balle et définir sa valeur de vitesse en fonction de notre profil de tournage, vitesse ici, quelque chose comme ça. Nous pouvons modifier la vitesse de déplacement de notre balle ici en utilisant notre profil. Avec un profil différent, nous pouvons avoir une vitesse de balle différente. Par exemple, celui-ci fonctionne à 50 unités par seconde, pour les missiles, il ne tourne que dix unités par seconde. Pour le joueur, cela correspond à 30 unités par seconde. Maintenant, cette variable, cette vitesse variable lors du déplacement de la balle, sera modifiée par le script de prise de vue automatique Il y a aussi le missile ici. La vitesse va changer. Et si vous vous le demandez, nous ne recherchons le script qui contient un composant Bullet Move, ici que le script qui contient un composant Bullet Move, une classe Bullet Moove Mais n'oubliez pas que le mouvement du missile est dérivé de la classe Bullet Moove et que la variable de vitesse Sorry Where est basée essentiellement sur le script Bullet Moof, et Missile Move aura toutes les variables B. Ainsi, chaque fois que ce code de script est exécuté, il s'applique à notre objet bulame ainsi qu'à l'objet du jeu de missiles OK. Essayons ça. Est-ce que ça tire ? Pas encore D'une certaine façon. Il y a un problème ? Désolée, j'ai oublié. OK. J'ai trouvé les problèmes ici, il suffit de le renommer OK. Je pensais que c'était un problème de nom de fichier, mais il s'agissait essentiellement de problèmes de script ici. Je m'excuse Ici, comme vous pouvez le voir sur notre script de prise de vue automatique, nous voulons que vous ne preniez des photos que lorsque le profil de prise de vue est supérieur à zéro. Et c'est faux. Ce chiffre doit être supérieur ou égal à zéro. En gros, nous n'avons pas besoin de cette ligne en fait. Supprimons donc simplement ceci. Et je vais le repousser. Enregistrez le script et voyons s'il fonctionne maintenant. Voici donc notre script de missile ici et je vais le renvoyer à notre partie supérieure. OK. Je vais donc enregistrer la scène et réessayer. Voilà. Nous avons un missile qui ne suit notre joueur qu'une seconde puis part tout droit, et il tire toutes les deux secondes pour produire une meilleure particule. Nous devons le réparer. Passons simplement à nos armes préfabriquées et à nos missiles. Fixons notre particule ici. La fumée des flammes. Nous allons réduire notre durée de vie à une valeur très courte, peut-être 0,8, pour la flamme également à 0,5 OK. Et nous voulons augmenter ses émissions. Peut-être que 35 devrait faire l'affaire, et aussi pour que la fumée de la flamme atteigne notre émission et augmente la valeur à 35, appuyons sur Appliquer. Nous aurons donc une particule beaucoup plus dense. Voilà. OK. Maintenant, il lance un missile toutes les 2 secondes, ce qui est assez intense, mais nous pouvons corriger ce problème en ajustant le profil des armes. Si vous voulez tirer deux missiles différents de chaque côté, nous pouvons simplement dupliquer ce prétendant aux missiles ce site ici quelque part comme celui-ci et changer de profil d'abord, pas toutes les 2 secondes, mais peut-être toutes les 6 secondes, et nous pouvons simplement renommer cet intervalle de 6 Nous connaissons ici les caractéristiques de ce profil. Enregistrons-le et réessayons. Il lance deux missiles en même temps, mais il attend 6 secondes avant d' en tirer un autre OK. Cela devrait faire tourner notre missile. OK. 21. 21 Bouger dans le monde: OK. Nous allons donc maintenant créer un autre script pour la transformation, et ce sera un déplacement local. Créons simplement un script, et appelons-le ou nous pouvons simplement l'appeler pour nous déplacer. Et ouvrons le script. En gros, c'est pour déplacer des objets par rapport à leur parent. Créons quelques variables nécessaires à la construction du script, et je vais coller quelques variables que j'ai déjà préparées. Ici, je vais vous expliquer un par un. En gros, il s'agit de prendre en compte le décalage de notre mouvement, la cible la position cible. Et nous avons deux variables principales, qui sont au démarrage, et elles servent à activer le mouvement depuis le début, ou si nous voulons déclencher le mouvement à partir d' un autre script, nous pouvons simplement le désactiver dans les options de démarrage Et l'inverse, c'est pour aller dans le sens inverse. La durée est la durée du mouvement en secondes. Pour l'événement Unity, We can create devrait être sur Start Move. Nous pouvons déclencher une autre action à partir d' un autre script via l'inspecteur en utilisant cet événement unitaire et nous pouvons l'activer chaque fois que nous commençons à nous déplacer, il suffit de l'insérer au début du mouvement. Ou si nous voulons déclencher l'action lorsque le mouvement est planifié, et nous pouvons utiliser le résultat non déplacé ici Comme cela nécessite une bibliothèque provenant de l'événement Unity, je vais donc taper dessus ici en utilisant événements du moteur Unity ce qui devrait rendre la classe d' événements Unity disponible dès maintenant. Et nous avons deux entrées de variable privée, et la première est un arbre vectoriel, qui sera le titulaire de notre position cible et également le support de notre position initiale. Et ce sera la distance de déplacement entre notre position initiale et la position cible. Nous pouvons donc calculer la distance à partir de la durée. En gros, nous allons supprimer notre passé de mise à jour et utiliser une routine conjointe. Tapez enumerator, appelons simplement la coroutine Nous allons avoir besoin de quelques variables. abord, nous allons vérifier les options inverses, et l'autre est la durée. Tapons simplement float time. Nous allons donc d'abord vérifier si l'option inverse est vraie, puis nous allons définir notre position cible sur notre position initiale. Si l'option inverse est fausse, nous allons définir la position cible comme étant notre transformation en carn, la position locale, ajoutée avec notre décalage de déplacement ici Notre position actuelle a été ajoutée avec le décalage du mouvement pour que nous obtenions notre position cible. Et ici, nous voulons évoquer l'événement Star Move Unity. Tapez simplement Unity Event Invoke. Ici, nous allons créer une boucle sauvage et vérifier si notre position locale de transformation n'est pas la même que notre position cible. Ensuite, nous voulons déplacer notre position locale de manière vectorielle vers notre position locale en carbone vers notre position cible. Pour la distance maximale Delta, nous allons utiliser notre distance de déplacement. Divisé par notre durée ou le temps que nous avons passé ici, et nous allons le mettre entre parenthèses, puis nous allons le multiplier par notre temps Je vais saisir cette ligne ici afin que nous puissions y voir plus clair. Ensuite, nous allons regarder le code ici en utilisant le numéro de retour. En gros, nous disons que chaque fois que c'est vrai, nous allons regarder ce code ici, et si cela échoue, nous allons ignorer le code et nous allons invoquer notre événement move the unity. Nous pouvons invoquer une autre méthode depuis l'inspecteur en utilisant les variables d'événement unity. En gros, cette routine est définie et déclarée. Nous allons maintenant créer quelques méthodes. Le premier sera le déménagement public. Ici, nous avons également besoin d'une fonction inverse. pas d'une fonction inverse, nous avons besoin d'un argument inverse, et le type doit être b Dans cette fonction, nous pouvons simplement exécuter notre coroutine en tapant la routine de démarrage et la fonction The start to move . Pour l'inverse, nous allons passer cette valeur inverse ici. Pour le moment, nous allons utiliser notre variable à partir de cette durée de flux public en haut de la déclaration de variable. Au début, nous devons remplir quelques variables. Le premier serait notre coût initial et ce sera notre position locale transformée dès le début du jeu, et pour ce qui est de la distance de déplacement, ce sera le décalage de l'ampleur. La durée de notre facteur de compensation de mouvement. Ici, nous allons exécuter notre quotin Si le départ est vrai, nous allons exécuter le mouvement, mais avec notre passe inverse dans cette fonction ici Donc, chaque fois que nous concevons, nous utilisons le script ici. Si nous activons le lingot inversé, il passera par cette fonction ici et il réglera le mouvement en sens inverse Sauvegardons le script ici. Testons cela désactivant peut-être le premier, créant simplement un nouvel objet à trois fouilles et en plaçant l' axe y sur la plaque zéro ici. Je vais dupliquer le cube, redimensionner le second, le réduire, mais comme ça. Nous pouvons ajouter le script theo move à cet objet enfant ici, peut-être pouvons-nous déplacer le zx vers un code négatif Et placez le bulon de démarrage ici et tapez la durée à 2 secondes, 2 secondes. Jouons et voyons s'il bouge. Voilà. Il se déplace, puis s'arrête une fois qu'il a atteint le décalage que nous avons défini ici. Cela sera très utile pour plus tard si nous voulons créer des armes sur notre bus ennemi, par exemple. Une fois que nous avons détruit la première arme, nous pouvons déplacer la deuxième arme pour la faire ressembler à un mouvement mécanique Le bus activera la deuxième arme, et nous la configurerons plus tard. allons donc tester cela si nous pouvons utiliser la fonction inverse. L'inverse devrait fonctionner. L'objectif est la pause initiale. Nous devons régler ce problème. cible serait le p initial, puis après cela, le cours de poussée initial, sauvegardez-le OK. Oh, désolée. On peut juste faire comme ça. La position locale cible que nous suivons est compensée par la position locale Si c'est l'inverse, ils devraient faire l'affaire. Essayons juste ça. Ensuite, si nous jouons à cette option, les petites cases devraient être à moins un sur l'axe z, et elles se déplacent lentement vers l'objet parent Voyons si cela fonctionne. Voilà. Le mouvement est inversé. Mais si nous désactivons l'inverse, il se déplacera normalement. Cela devrait être dû à notre tomove 22. 22 Designing Boss: OK. Maintenant, nous allons concevoir notre mouvement de bus, mais notre objet de jeu de bus. Je vais supprimer ce cube que nous avons ici et je vais accéder à notre dossier de modèles dans le dossier de modèles Nous avons ce navire-bus et nous allons suivre ce navire. C'est notre vaisseau, et je vais renommer deux choses C'est le vaisseau. Faisons-le pivoter 190 degrés sur l'axe y. Il fait face à notre vaisseau. Ce sera la menace, nous allons également le faire pivoter de 190 degrés sur l'axe Y. OK. Nous allons donc d'abord installer le navire-bus. Disons que c'est la première arme, et je vais mettre le négatif 1,4 sur l'axe x, et je vais le dupliquer, et je vais le mettre sur 1,4 sur l'axe y. C'est donc irrod sur la position y, et déplacez ces deux fils vers l'avant que nous puissions voir depuis la vue de dessus ici Et je vais créer un objet de jeu vide et appelons cela le premier fil de discussion. Je vais mettre les deux fils dans cet objet de jeu pour enfants. Ce premier fil de discussion contiendra un cidre en boîte et ce sera en fait un box collider Je le vois de face. Je vais déplacer ce box collider. Je vais mettre ça en place. OK. Et je vais faire en sorte que ce soit grand comme ça. Donc, si nous tirons sur le bus et le mien, nous allons nous assurer que notre balle touche la tourelle Comme ça, je vais activer son déclencheur et je vais copier le composant et coller valeurs de ce composant et le nouveau composant. Je vais le régler sur une valeur positive sur l'axe X. Nous avons un autre planeur qui couvre le second étage ici. Nous allons ajouter un système de santé s'il faut également ajouter ce système. Et je vais d'abord enregistrer les s ici. Nous avons donc déjà installé la première tourelle ici. Maintenant, nous allons créer quelques objets natifs supplémentaires. Je vais juste renommer cette première tourelle pour la seconde, elle va être déchirée. Il en reste, c'est la première tourelle ou je peux la fabriquer Il est plus facile de voir que c'est le premier. Créons un objet donné par une fourmi et nous voulons indiquer le recto de la visite ici Faisons-le simplement pivoter sur l'axe X. Je garde le contrôle, donc ça claque tous les 15 degrés. Je veux le faire pivoter à 90 degrés sur l'axe X. Si nous sélectionnons le gadget de déplacement, nous pouvons voir ici que l'orientation vers l'avant est la même que celle vers l'avant. Déplaçons ça ici, et ce sera le tireur. Et nous voulons que vous reproduisiez ce jeu de tir ici et je vais diriger pour qu'il soit l' enfant de l'autre menace Mettons notre position à zéro pour qu'elle s'aligne sur son parent Pour le jeu de tir, nous pouvons sélectionner ces deux objets de jeu vides et créer un shooting automatique. Et nous pouvons voir notre profil d'arme, créer un autre profil de tir, et nommons d'abord ce bus. Ici, nous pouvons simplement définir une valeur. Réglons la vitesse à 15 et les dégâts à un pour la cadence de tir, nous allons définir une cadence de tir de 0,1, un intervalle de 4 secondes, et nous voulons détruire la balle, disons 3 secondes ou 2,5 secondes. Une fois que le spread aura été stabilisé, je vais laisser ce montant à zéro, je veux le fixer à six Chaque fois que le premier lance une balle, il en tire six avec une cadence de 0,1, puis il passe pendant 4 secondes comme dans cette valeur ici dans l'intervalle. Et pour le tireur, nous sélectionnons les deux et nous pouvons faire glisser ce profil d'arme, placer sur le profil de tir. Et pour le préfabriqué à balles, je vais choisir notre balle ennemie Allez donc dans un onglet défini et choisissez la balle ennemie. Et pour le point de feu, je vais le laisser faire, donc c'est à choisir la transformation du tournage. OK. Réglons l'état de santé à 25. J'ai déjà préparé des effets. Désolée. Je pense que nous devons le créer, alors créons-le. Nous allons donc d'abord créer un canevas pour montrer l' état de santé de notre fil de discussion ici. Créons simplement un nouveau canevas d'interface utilisateur. Et ce canevas, nous allons le transformer en espace mondial et nous pouvons choisir notre appareil photo. Mais comme nous n' utilisons pas l'événement, nous n'utilisons pas cette interface utilisateur ou ce canevas pour toucher ou pour l'interaction. Nous n'avons pas besoin de remplir la caméra. Je vais faire cette taille autour de 200 x 125. Je vais mettre sa position à zéro , le xn je vais faire pivoter la rotation à 90 degrés. Et maintenant, nous avons ce canevas mondial, qui est trop grand. Nous allons redimensionner l'échelle de 1 à 00 0,05, je vais la redimensionner sur l'axe ou je pense que je vais la réduire encore plus Alors je vais mettre cette toile par dessus. Renommons-le simplement en health Canvas. Et nous allons créer une image, et ce sera notre barre de santé. Mais voici le contexte. Pour le fond, nous allons fixer sa valeur à environ 75 et le run 20, peut-être ou moins dix, devrait suffire. Tant que nous pouvons voir, nous pouvons voir la barre, mais je pense qu'elle est encore trop grande , alors je vais la réduire. Peut-être cinq ou cinq. Nous n'avons pas besoin que cette toile soit si grande, alors nous pouvons simplement la tuer à nouveau. Comme ça, et maintenant nous pouvons agrandir, 75 par cinq devraient suffire. En gros, nous pouvons changer la couleur en gris, et dupliquons cela et ce sera la barre de santé et cette barre de santé. Pour la barre d'en-tête, nous allons utiliser l' image initiale de l'image. Nous n'allons pas utiliser de sprite pendant un moment. Modifions-le en rouge. Pour l'enfant, je vais changer son centre vers la gauche ainsi que son pivot. Chaque fois que nous redimensionnons cette valeur ici, elle pivote sur le côté droit. OK. Sauvegardons ça. Je vais créer un nouveau dossier sous prefabs, appelons cette interface Je vais faire glisser ce canevas de santé en tant que préfabriqué. Si nous avons besoin d' un nouveau canevas de santé, nous pouvons simplement le faire glisser depuis nos préfabriqués ici. OK. OK. Maintenant, je vais rouvrir notre système de santé et vous verrez le code de. Puisque nous utilisons la balance ici, nous pouvons simplement faire glisser notre objet de jeu de santé comme barre de santé ici. Faites simplement glisser notre barre de santé et placez-la comme barre de santé, et elle sera mise à jour chaque fois que cette valeur sera soustraite ou atteinte, puis la barre de santé diminuera ici Pour l'effet, nous pouvons simplement puiser nos étincelles dans les actifs. Je vais parler de la scène. Maintenant, nous avons cette première tourelle ici, et nous devons créer quelques explosions Je vais donc sélectionner ce R rouge et cette tourelle L, et créer un script d'objet, et nous allons créer une explosion Voilà, cette explosion. Je pense que nous allons le détruire 2,5 secondes après l'instanciation de l'explosion pendant 2,5 Ici, à l'intérieur du premier vers le rouge, nous pouvons simplement faire apparaître un objet Mais nous ne voulons pas le détruire, alors désactivons simplement options de destruction pour l'objet d'origine, nous allons faire glisser la première vers rouge vers la variable d'objet de génération, puis la seconde Maintenant, en gros, si nous jouons à ce jeu, nous pouvons voir que nous sommes en train de neutraliser la menace et vous pouvez voir que la barre de santé diminue ici. C'est assez petit, laissez-moi l'agrandir. Ouais Voilà. OK. Et il tire six balles toutes les 4 secondes. OK. Créons maintenant la deuxième tourelle Comme nous avons déjà le premier rouge ici, nous pouvons simplement le modifier. Je vais dupliquer l'ensemble du premier groupe ret ici en appuyant sur Ctrl D, et pour le second, nous allons d'abord le renommer Je vais ajouter un missile sous le nom, et nous allons déplacer la tourelle ici Déplaçons simplement la tourelle à -2,7 ici. OK. Et je vais abaisser la position y à environ 0,1, et je vais déplacer la position z autour de cette position ici. Pour le second, je vais copier sa valeur ici, transformer, et je vais coller la valeur. Mais je vais mettre ce chiffre à un positif de 2,7 ici. Je vais juste supprimer le signe négatif et il se reflétera de l'autre côté Pour le second, nous pouvons simplement laisser les paramètres ici et nous assurer que le canevas sur lequel se trouve la barre de santé pointe bien vers celui-ci, le second ici, donc modifiez-le simplement. Et pour le tireur, nous allons modifier son profil. Passons donc aux profils d'armes, et je vais dupliquer la tourelle de bus ici, mais je vais renommer le profil en tourelle de missile Et nous n'allons tirer que toutes les 3 secondes, par exemple, mais nous allons simplement mettre le feu à zéro, mais nous allons augmenter ses dégâts car il s'agit essentiellement d'un missile. Il devrait donc faire plus de dégâts qu'un blaster normal. Et pour la vitesse, mettez-la à huit, pour le montant, je vais la fixer à 21. Nous pouvons modifier cette valeur s'il devient trop facile de combattre le bus plus tard. Pour le deuxième tireur de missiles, il suffit de diriger le traitement du missile ici, et nous pourrons remplacer la balle par le missile ici. Nous allons désactiver le second avant de le désactiver, je vais le déplacer vers une unité derrière comme ça. Nous pouvons donc appliquer un script de déplacement, et nous pouvons déplacer l'axe y puisque nous sommes sur une transformation locale Nous voulons donc déplacer l' axe y vers un axe négatif. Mettez ici un négatif et activez au démarrage pour la durée, nous pouvons régler cela peut-être 1,5 seconde. OK. Et ici, je vais m' assurer que nous faisons référence au tot de ce groupe ici, et que nous voulons désactiver celui-ci Sauvegardez ceci. Maintenant, nous devons créer quelques événements. Chaque fois que nous détruisons le premier tour, nous voulons activer le second. Nous pouvons simplement utiliser le système de mort ici et ajouter un événement à l'intérieur d'un événement mortel, faire glisser objet de notre groupe parent pour le deuxième tore, le faire glisser vers l'emplacement ici et accéder à l'objet du jeu. Nous pouvons choisir la fonction active et la définir sur true. Chaque fois que nous avons réussi à détruire la première tourelle, nous voulons activer la deuxième tourelle. OK. Sauvegardons ça. Je vais créer un nouveau niveau de profil de joueur ici. Changez la vitesse à 25 et infligez des dégâts à un. Mais je veux réduire l'intervalle à 0,25 et l'étendre à trois et je pense que le montant à trois devrait être une bonne chose. Sauvegardez ceci. Je vais utiliser le deuxième profil ici, diriger le profil de tournage du deuxième joueur ici, enregistrer ceci, c'est plus facile de l'essayer. Voilà. Je veux le détruire. Voilà. Oh, il y a un problème en fait. D'une manière ou d'une autre, il tourne toujours. Nous le désactivons déjà, en gros , nous détruisons déjà le premier niveau dont nous avons besoin pour désactiver le jeu de tir ici. Je vais ajouter événement show et diriger l'objet du jeu de tir vers le premier, puis le second vers le deuxième emplacement ici. J'utiliserai également le jeu d'objets de jeu actif et nous allons le désactiver. Cela fera de l'objet un objet de jeu et nous en avons besoin. OK. Chaque fois que nous avons réussi à détruire celui-ci, nous devons également le faire. Faisons simplement glisser cet objet, tireur. L'objet tombe et tombe stativement, l' objectif est également de tomber Je pense qu'il y a un problème ici. Le mouvement d'une manière ou d'une autre Essayons ceci sur l'axe z. Essayons encore une fois. Désolée. OK. Voilà. Vous pouvez voir qu'une fois que nous avons réussi à détruire la première tourelle, nous activons la seconde Mais il y a toujours un problème, en fait. Nous devons nous assurer que chaque fois que la deuxième tourelle est activée, elle ne tirera pas de missile immédiatement. Nous devons désactiver Ici, lorsque nous déplaçons chacun des objets du jeu, nous voulons l'activer lorsque le déplacement est terminé Nous pouvons donc utiliser l'événement Move Done ici et faire glisser le tireur. Nous pouvons simplement l'activer comme ceci, pour le second, nous pouvons également le faire. Comme ça. Mais je vais augmenter légèrement la valeur z afin que nous puissions mieux voir la tourelle Pour le canevas de santé, nous voulons le déplacer vers une autre position. Il ne s'affiche donc pas au-dessus de la même position que le premier canevas, désactivons tout cela ici. Je vais arrêter ça et, dans le cadre du jeu, je vais maximiser le jeu pour que nous puissions mieux voir les choses. Que nous puissions essayer de détruire et de détruire, cela montrera une nouvelle tourelle Mais notre collisionneur est toujours dans la même position que l' ancien, sauf le premier. Réparons simplement à ça. En gros, nous devons passer à la même position que celle-ci. Déplace son centre à moins 2,7 pour l'aligner sur notre tourelle. Pour le second, nous allons le changer en 2.7. Et je pense que nous pouvons simplement déplacer légèrement l'axe Z vers l'arrière. Donc peut-être autour de 0,25, et la valeur est la même ici. OK. Et peut-être que nous pouvons d'abord désactiver le boxeur, pouvoir le tirer immédiatement, et sous notre tourelle, nous pouvons ajouter nouvel événement pour le R, à droite, nous pouvons simplement faire glisser le collide pour le collide pour activer le couvercle. Comment pouvons-nous le faire réellement ? Je vais traîner le deuxième missile Tret ici, il ne lit que l'un des totes Div Et activez-le dès le départ. Ça devrait aller. Plus tard, nous allons ajouter d' autres explosions et également des sons. Désolée. Nous devons désactiver l'avant-premier. Essayons juste de détruire celui-ci et il explosera, et le second, nous pouvons simplement le détruire. Maintenant, continuons à construire notre bus ici. Nous avons le premier jeu et nous pouvons augmenter notre maximum de points de vie plus tard. Si c'est facile à deux. Après le deuxième, nous voulons essayer de détruire le navire-bus qui se trouve ici. Pour le navire-bus, ajoutons un collisionneur de boîtes. Augmentons simplement la taille à 1,5, et peut-être aussi à deux sous l'axe y, passons un peu sur le y et réduisons la taille en dessous de z, x, y. Nous avons un pour commencer à prendre le bus, mais nous voulons désactiver le collidor de bus dès le départ et ajouter un système de santé et un système de mort Nous avons également besoin de la barre de santé, donc je vais aller dans notre dossier d'interface utilisateur préfabriqué et rechercher la santé f pour être notre enfant du bus ici et me déplacer peut-être dans cette position Je vais d'abord désactiver le canevas de santé. Placez-le en haut, sous l'objet du jeu de navires ici. Pour l'objet de forme qui possède le système de santé. Je vais diriger la barre de santé. Pour l'effet, je vais utiliser les mêmes particules d'étincelles que j'ai déjà fournies Oui, nous voulons nous assurer que c'est un ennemi. Nous ne voulons pas détruire. Et nous voulons ajouter un autre script de rotation, de rotation. Et nous voulons utiliser la rotation ciblée. Nous voulons faire une rotation sur l'axe z d'environ 20 degrés et pour la vitesse, définissez peut-être 25 ici. Nous voulons désactiver la rotation extérieure. Mais dans ce cas, nous voulons activer cette rotation automatique. Dirigez le script vers l'emplacement situé ici et choisissez simplement l'activation du taureau et activez simplement la rotation automatique. Nous voulons également créer deux explosions chaque fois que le navire-bus est vaincu, créant un nouvel objet antigame appelé cet effet Pour le navire-bus, nous voulons d'abord définir le maximum de 25, nous pourrons le modifier ultérieurement pour les effets. Je vais créer à nouveau un objet antigam. Il s'agit essentiellement de notre porte-explosion. Je vais mettre une explosion ici. OK. Et je vais ajouter un objet de création et choisir Explosion parmi nos actifs. Ouais Il suffit donc de lancer cette explosion dupliquer plusieurs fois et de changer de position sur chacun des objets du jeu. OK. Et je vais ajouter un objet en forme de flammes. Mais pour la flamme, je vais créer un autre objet de portail vide. Ensuite, je vais consulter notre dossier pré-fax et diriger l'objet du jeu Flame Smoke vers nos flammes ici. Donc, quelque chose comme ça, et changez la plateforme en « globale », afin que je puisse la déplacer facilement vers la position que je souhaite voir se trouver par rapport aux flammes et je voudrais également dupliquer la flamme plusieurs fois ici. Mettez-en un ici et un autre de ce côté, peut-être. Ouais Et nous voulons que vous éteigniez les flammes. Et nous voulons laisser l' explosion activée, puisqu'il s'agit d'un objet créé et que, sous la forme du bus, chaque fois que nous détruisons le bus, nous voulons faire tourner un objet discret ici Je vais verrouiller cet inspecteur, afin qu'il reste concentré sur l' objet en forme de bus, et je vais sélectionner toutes les explosions ici , le faire glisser vers nos emplacements d' explosions ici , le faire glisser vers objets Span qu'il le remplisse automatiquement. Il va générer un objet avec un script de création d'objet. Faites référence à cet objet de jeu ici, et nous pouvons déverrouiller le verrou ici Oui Activez ceci, et je pense que c'est ce que je pense. Mais nous devons activer cette boîte de cuisson. Passons à notre deuxième missile TT et chaque fois que nous vaincrons le deuxième missile, nous voulons activer la boîte à cidre. Faites le meilleur objet de jeu de navires. Pour le codeur box, nous allons utiliser le bull enabled, et nous allons activer ce composant ici. Enregistrez souvent votre scène, puis réessayez. Nous allons maintenant essayer de le détruire. C'est activer le deuxième missile. Une fois que nous aurons détruit le missile, tout ira bien. Mais la rotation d'une manière ou d'une autre. Il y a en fait une erreur ici. Vérifions-le. Lequel est un objet de jeu de script. Je vais vérifier si l' explosion a un script. Supprimons simplement ce script ici en cas d'explosion et appliquons-le. Je pense que c'est le script audio et nous allons le créer plus tard. OK. Essayons encore une fois. Il y a une chose que nous avons oubliée ici. Chaque fois que la deuxième tourelle est détruite, nous activons le codeur de bus, mais nous devons également activer le canevas ici Faisons-le simplement, faisons glisser ce canevas et activons l'objet du jeu. Essayons encore une fois. Maintenant que nous y sommes, nous devons détruire la forme principale ici. Mais la rotation ne fonctionne pas. Chaque fois qu'il est détruit, nous voulons l'activer, nous devons le faire, mais nous devons activer les options de démarrage ici ou nous pouvons simplement l' activer, sous la rotation automatique, nous pouvons exécuter la fonction de rotation Alors fais mieux. Maintenant, essayons de détruire celui-ci et détruisons le second pour essayer de le détruire. Nous pouvons créer ces animations comme une animation en chute. Maintenant, nous devons nous assurer que chaque fois que nous vaincrons le navire-bus, activons le groupe de flammes ici, ces flammes et ces flammes. Cela produira un effet de brûlure. OK. OK. Voilà, nous avons un bel effet de défaite pour le bus ici. OK. Et la prochaine chose que nous devons faire est de créer du mouvement. C'est ce que nous allons faire dans la prochaine vidéo. OK. 23. 23 Mouvement des patrons: OK. Continuons donc d' étendre le comportement de nos bus. Maintenant, nous devons créer le mouvement. Il suffit donc de sélectionner le parent supérieur de l' objet du jeu Bus Ship ici, celui-ci Et ajoutons un nouveau composant, le composant node move. Et comme vous pouvez le voir ici, nous pouvons simplement activer le déplacement en boucle et je ne veux pas faire pivoter l'objet. Je veux que le navire-bus fasse face à notre vaisseau ici comme ça. J'ai désactivé la rotation de l'objet, et je vais modifier le cliquetis, mais je ne pense pas que nous ayons besoin de le changer puisque nous désactivons la rotation pour que cela n'ait mais je ne pense pas que nous ayons besoin de le changer puisque nous désactivons la rotation pour que cela n' aucun effet sur l'objet de jeu de notre bateau-bus Pour ce qui est de la vitesse, je vais d'abord la régler à deux et l'augmenter plus tard si nécessaire. Oui, je vais ajouter quelques nœuds. Je vais ajouter quatre nœuds. OK. Et je vais déplacer l'objet du jeu ainsi que les notes. Voici les troisièmes notes. C'est le second, et c'est le premier. En gros, je veux créer un mouvement en boucle. Et la première position serait là et la seconde serait là et indiquerait que le mouvement sera essentiellement la ligne verte. Ce n'est pas la ligne jaune. Assurez-vous donc de concevoir le mouvement en fonction de son motif vert ici. Créons quelque chose comme ça, ou nous pouvons simplement déplacer le quatrième pour qu'il soit proche du premier nœud ici. Le mouvement va être un peu circulaire ou elliptique comme celui-ci, allons-le d'accord. Et nous allons l' activer dès le début, mais plus tard, nous devrons ajuster le comportement une fois que nous l'aurons mis sur notre scène, et jouons-y. Voilà. Nous avons un navire-bus en mouvement. C'est plutôt sympa en fait. Nous devons détruire la tourelle, une deuxième tourelle, qui est le missile, et nous devons éviter le Maintenant que nous avons déjà détruit les deux tourelles, nous devons détruire l'ennemi du bus Mais comme vous pouvez le voir ici, une fois qu'on l'a détruit, il bouge toujours, ça a l'air drôle. Maintenant, nous avons ce système de mort et gros, nous voulons ajouter un autre événement au système de mort du parent principal, car c'est la dernière aide dont nous avons besoin pour détruire. Il s'agit de la dernière séquence de décès dont nous avons besoin pour ajouter et ajouter un nouvel événement et diriger le déplacement du nœud. Dans la classe de script ici, sélectionnez le bull enable. Et juste désactivé. Sauvegardons ceci, rendons les choses intéressantes. Nous pouvons copier nos flammes ici. Je vais le dire en tant qu' enfant de notre première tourelle. Et je vais jouer à l'effet de feu, et je vais réinitialiser sa position comme ça. C'est aligné sur notre TD. Je vais d'abord le désactiver , le dupliquer et faire du doublon l'enfant de la deuxième tournée, et je vais mettre à zéro la valeur x, elle s'aligne sur le deuxième tot Chaque fois que nous le détruisons, je veux activer ces flammes Je dois créer deux entrées la première flamme et la deuxième flamme ici, attribuer à ces deux événements la classe de jeu ici, choisir la méthode active définie et l'activer. Ouais. Et faisons de même pour notre deuxième touret ici. Il suffit de le dupliquer. Ouvrez notre touret et copiez-le en flamme, mettons à zéro toute la valeur ici Et aussi pour le second. Et dans le cadre du système de mort du second, le missile a fait une tournée lors de deux nouveaux événements, et activons ce triste objet de fumée Donnez à object set act valeur true et le second également à here. Donnez l'objectif au vrai. Assurez-vous donc que cette flamme est désactivée par défaut. Ainsi, chaque fois que nous activerons la deuxième visite, celle-ci ne sera pas activée automatiquement. Ouais. OK. Nous avons donc désactivé le oui », ils ont désactivé le script de déplacement des notes ici après Straight. Essayons donc à nouveau. OK. Ouais. Vous pouvez voir qu'il y a un bel effet de flamme et le second. Mais nous devons changer le monde, celui de la simulation spatiale. Allons dans nos préfabriqués Flame Smoke ici et changeons l'espace de simulation en monde et passons à l'appartement, changeons également l' espace de simulation en Alors fais l'affaire. Une autre chose est que nous allons devoir ajouter un système de santé à notre joueur. Faisons-le simplement. Système de santé et système de décès. Créons un objet, et ce sera notre explosion chaque fois que nous serons détruits, allons chaque fois que nous serons détruits, sur l'actif et choisissons les préfabriqués anti-explosion. Détruisons l' explosion au bout 2,5 secondes et dirigeons création d'objet vers l'objet d'apparition ici Ouais. Parce que l'objet son est essentiellement un type de tableau d'instances de création d'objet. Dans ce cas, nous allons le laisser vide. Pour l'effet hit, achetons les préfabriqués Spark. La barre de santé dont nous avons besoin pour orienter notre barre de santé Accédez à l'interface utilisateur, Health Canvas et dirigez-le vers notre lecteur. Et zéro exposition, et je vais passer à l'arrière de notre vaisseau ici, étendre notre charge de santé et nous pourrons détruire cet objet du jeu de santé pour le volet santé de notre système de santé Sauvegardez ceci et augmentons la santé maximale à 25. Maintenant, nous pouvons être touchés par notre ennemi comme ça. Chaque fois que nous sommes touchés, il semble y avoir un problème. Ouais. Oh, désolée. Parce qu'il est activé. Assurez-vous donc que cette option est désactivée, et je vais augmenter la taille de notre collision sur l'axe y de 1,5, qu'elle soit plus grande. Nous devons donc nous assurer que si la balle est générée depuis cette position, elle atteindra le Rejouons-le et voyons si cela fonctionne. Voilà. Diminuer. Maintenant, chaque fois que nous sommes touchés par son missile, oui. Et. Vous pouvez donc voir que chaque fois que nous battons le bus, le bus s'arrête de bouger. OK. Donc, une fois que nous l'aurons configuré, je vais définir cet objet de jeu Buzz comme préférence. Je vais créer un nouveau dossier Ames sous ce dossier mates, je vais diriger ce bo ship ici pour en faire un prefs Nous l'avons donc enregistré. Je vais définir quelques points ici, mais je vais tout de suite modifier cela dans le script. Ouvrons le script de l'enfer. En gros, ce que nous voulons faire, c'est désactiver la barre de santé une fois que la santé atteint zéro. Il s'agit d'un ajustement mineur. Donc ici, chaque fois que notre santé est nulle, nous allons cacher notre objet de jeu de barre de santé. En gros, je vais d' abord taper la barre de santé et obtenir sa transformation et son parent. Pourquoi voulons-nous avoir son parent ? Parce qu'ici, permettez-moi simplement de vous montrer la barre de santé, notre barre de santé est essentiellement l'objet le plus enfantin ici. En gros, si nous le cachons , le fond gris de la barre de santé est toujours affiché. Nous devons accéder à son parent, puis désactiver tous les éléments de santé, y compris l'objet d' arrière-plan de la barre de santé. Nous ne pouvons donc plus le voir dans la vue du jeu. C'est pourquoi nous devons accéder au parent de l'objet du jeu. Une fois que nous avons trouvé le parent, nous devons accéder à son objet de jeu et taper set active two falls et nous assurer que cela ne se produit que lorsque la barre de santé n'est pas là. Si nous n'attribuons pas, par exemple, si nous n'attribuons pas de barre santé dans cet emplacement de barre de santé ici, cela ne fonctionnera pas. Il s'agit d'un ajustement mineur devrait modifier l'ensemble du comportement. Détruisons simplement cette arme ici. Voilà. Comme vous pouvez le constater, la première barre de tête est masquée. Je vais essayer de me vaincre ici. J'entre délibérément en collision avec le missile ici. Ouais. Je veux voir. Voilà. Nous pouvons donc être détruits. Mais ici, comme vous pouvez le voir, nous avons une erreur concernant le déplacement du missile. En gros, je suis désolée, nous ne trouvons plus le joueur. Nous devons donc ajuster cela. Assurez-vous que si nous avons trouvé le joueur d'objets du jeu, nous voulons lui attribuer une forme forte. Comme ça. Essayons encore une fois, mais fixons simplement l'aide à notre joueur sur une valeur très faible. Disons huit, éliminons cette erreur, et rejouons, mais nous devons détruire le premier au premier. Faisons-le, soyez prudents. Essayons maintenant de nous faire détruire par le missile. Voilà. Nous n'avons plus d'erreur, donc il se déclenchera tout de suite. OK. Donc, une fois que nous avons changé, je ne suis pas sûr que si nous avons changé, je ne pense pas que nous l' ayons changé. Nous ne changeons que les scripts , mais par mesure de sécurité. Appuyons sur Appliquer. Il met donc à jour notre my pre. Après cela, je pense que cela se terminera avec notre navire-bus, et nous pourrons continuer sur les autres sujets. 24. 24 Sauvetage humain: Dans cette vidéo, nous allons créer la fonction de sauvetage humain. Et d'abord, désactivons simplement la forme du boss ici. Passons aux modèles plus loin dans le cadre du projet, et ajoutons simplement le modèle de sauvetage humain à la scène. Et pour le moment, il n'y a aucun matériel. Créons-en donc un nouveau. Nous pouvons étendre l'objet du jeu de sauvetage humain et sélectionner l' objet du jeu appelé voiture, et nous pouvons accéder au dossier des matériaux ici, et nous avons déjà le matériel humain. Nous pouvons simplement diriger ce matériau dans la fente située sous la surface de la peau sur l'objet du jeu de voiture. Et comme vous pouvez le voir maintenant, il a un beau matériau. Et comme vous pouvez le voir ici, le personnage est assez grand par rapport au vaisseau. Mais si on le voit de dessus, ce n'est pas si grand. Nous pouvons donc réduire la taille du personnage, en fait. Mais je pense que si nous le réduisons, il sera trop petit pour que l'utilisateur puisse le remarquer et pour l'écran. Je vais donc m'en tenir à cette taille actuelle. Maintenant que le sauvetage humain est sélectionné, créons un collisionneur de boîtes, et ajustons simplement la taille du collisionneur de boîtes en appuyant sur ce collider d'édition et en ajustant la vue de la scène Et je vais changer la taille de l' inspecteur ici pour le composant x à deux et également pour le composant z avec la même valeur de deux. Augmentons la taille y ici, et nous devons nous assurer que l'option du composant de déclenchement est cochée, car nous allons utiliser l' événement déclencheur pour déclencher le sauvetage humain et le faire pivoter de 180 degrés sur l'axe y. C'est donc face au joueur. Et maintenant, allons dans le dossier des scripts et dans le dossier de jeu, créons un nouveau script C sharp. Appelons simplement le script Human Rescue, puis ouvrons-le. Et dans le script de sauvetage humain, supprimons simplement les méthodes de démarrage et de mise à jour. Et ici, créons la méthode Trigger Enter. Et nous voulons également créer la méthode trigger it. Maintenant, nous voulons vérifier si l'autre collisionneur qui entre dans le déclencheur possède le tag player. Copions simplement ce bloc d' instructions et collons-le dans la méthode de sortie du déclencheur Et je vais également ajouter l'espace de noms de l' interface utilisateur ici en haut. Tapons donc simplement en utilisant l'interface utilisateur à points du moteur Unity. Nous pouvons donc utiliser les objets de l'interface utilisateur dans le script. Et nous voulons également utiliser l'espace de noms d'événements du moteur Unit. Et nous devons déclarer quelques variables ici. Je vais donc coller. Et en gros, c'est toute la variable dont nous avons besoin pour ce script, et le temps de sauvetage sera le temps, le temps avant que l' humain ne soit secouru. Nous devons donc continuer à déclencher cet humain pendant 5 secondes dans cet exemple, mais nous pouvons modifier cette valeur. Et l'image sera l'interface utilisateur du chronomètre. Dans ce cas, il s'agira d'un trait de cercle qui sera rempli lors du sauvetage. Nous savons donc combien de temps il reste pour sauver cet humain. Et l'événement Unity sera événement une fois que l' humain sera secouru Nous pouvons donc associer une autre méthode à cet événement chaque fois qu'un humain sera secouru. Ensuite, nous devons créer une coroutine. Je vais donc taper le numérateur, et nous pouvons appeler la coroutine sauvetage Et je vais également créer une méthode locale appelée date UI pour mettre à jour l'interface utilisateur TR. Passons maintenant à la routine de base du sauvetage. Et pour cette routine de base, nous voulons transmettre une variable flottante, et nous pouvons simplement l'appeler time. Et ici, nous voulons créer une boucle wile avec une condition si le temps est supérieur à zéro Donc, tant que le temps est supérieur à zéro, nous voulons exécuter le code à l'intérieur de cette boucle wile Et ici, je vais d'abord ajouter un return null pour arrêter l'exécution et éviter de créer une boucle infinie. Maintenant, nous pouvons travailler sur le code de sauvetage. Tout d'abord, nous devons réduire le temps et utiliser le temps de ce delta Il diminuera donc en utilisant le temps que le delta donne à chaque image, ce qui entraînera un chronomètre. Cela diminuera la valeur d'une à chaque seconde, et nous allons exécuter la méthode de mise à jour de l'interface utilisateur. Mais nous voulons transmettre la valeur temporelle sur l'interface utilisateur de mise à jour. Je vais donc ajouter un paramètre avec le type de flout et je vais l'appeler value Et maintenant, nous pouvons transmettre la valeur temporelle. Et si le temps est écoulé, nous voulons détruire l'objet du jeu. Nous pouvons donc écrire la méthode destroy ci-dessous, Nous pouvons donc écrire la méthode destroy ci-dessous puis passer l'objet du jeu en argument, et nous pouvons retarder d' une ou 1,5 seconde. Il jouera donc d' abord le son avant de détruire complètement l'objet de jeu humain. Et avant de détruire l'objet du jeu, invoquons l'événement n rescue Unity afin d'y associer une autre méthode. Et ici, nous voulons travailler sur la méthode de mise à jour de l'interface utilisateur. Donc, nous devons d'abord vérifier si l'interface utilisateur du temporisateur n'est pas nouvelle, puis nous voulons exécuter du code. Cela garantira que si l' interface utilisateur du chronomètre est nulle ou ne contient aucun sprite, elle ignorera le code et empêchera toute erreur Et ici, nous voulons créer une variable temporaire que nous pouvons appeler time. Et nous pouvons transmettre une valeur temporelle. Nous pouvons diviser la valeur par le temps de sauvetage. Nous aurons donc une valeur normalisée. Et par souci de clarté. Changons simplement le nom du paramètre en temps et la variable temporaire en valeur. Et pour la valeur qui va être affectée à la variable value, nous pouvons simplement la définir sur le temps divisé par le temps de sauvetage. C'est donc plus clair. Donc, en gros, ce que nous faisons ici, c'est que nous transmettons la valeur temporelle qui est modifiée à chaque image en soustrayant avec la valeur du temps Delta time, et nous transmettons cette fois à la méthode de mise à jour de l'interface utilisateur Et nous devons normaliser cette valeur temporelle en 021 ou 120, selon le sens du compte à rebours Donc, en gros, nous devons diviser la valeur du temps par la valeur maximale du temps, qui est le temps de sauvetage ici. Cela retournera donc sous la forme d'une valeur de 1-0. Nous pouvons donc utiliser cette valeur flottante en pourcentage de progression pour le temps ou le montant de remplissage de l'interface utilisateur. Mais au lieu de compter de 1 à 20, nous voulons inverser cette valeur. Nous devons donc ajouter une valeur flottante de un devant elle, Nous devons donc ajouter une valeur flottante puis soustraire cette valeur flottante en divisant le temps par le temps de sauvetage Nous aurons donc la valeur inversée, qui est 0-1. Nous pouvons maintenant utiliser cette valeur pour mettre à jour le montant de remplissage de l'interface utilisateur du chronomètre. Tapons donc simplement le montant de remplissage par points de l' interface utilisateur du minuteur , puis attribuons la valeur à cette variable de quantité de remplissage. Maintenant, nous devons exécuter la coroutine chaque fois que le joueur entre dans le champ de sauvetage humain, mais nous devons arrêter la coroutine chaque fois que le joueur Donc, en gros, nous pouvons simplement ajouter une méthode de démarrage de co-routine puis transmettre le nom de la co-routine, qui est le sauvetage, et cette co-routine de sauvetage comme un paramètre flottant Nous pouvons donc simplement utiliser le temps de sauvetage comme argument en faveur de cette co-routine ici. Et lorsque le joueur quitte le sauvetage humain, nous pouvons simplement arrêter la méthode de toutes les co-routines, ce qui garantira qu'elle arrêtera toute routine précédente. Ensuite, nous devons également remettre le chronomètre à zéro, selon moi. Cela remettra le visuel du chronomètre à zéro. Je pense que cela devrait faire l'affaire, et essayons-le. Configurons maintenant l'objet du jeu de sauvetage humain et ajoutons le composant de sauvetage humain objet du jeu de sauvetage humain. Et pour l'interface utilisateur du minuteur, nous devons créer un Canvas et j'ai déjà fourni les préfabriqués Nous pouvons donc simplement accéder au dossier pref sous le dossier Orientons simplement le canevas de santé vers le sauvetage humain, et nous allons modifier ce canevas. Au lieu de cela, en utilisant la barre horizontale ici, je vais modifier la barre de santé ici en utilisant une image circulaire. Il suffit donc de sélectionner la barre de santé. Et nous pouvons simplement supprimer la barre de santé, et utiliser simplement l'arrière-plan de la barre de santé. Et je vais renommer cet objet de jeu en barre circulaire. Et je vais attribuer un sprite à barre circulaire à l' image source du composant d'image Et nous pouvons définir la taille de la transformation rec avec et la hauteur à 80, et je vais changer la couleur en rouge, et nous pouvons changer le type d'image en champ. Et pour la méthode field, nous pouvons simplement nous en remettre à la méthode radiale 360. Comme vous pouvez le voir ici, nous avons la quantité de remplissage, et nous pouvons modifier ces propriétés de 0 à 1 pour créer un cercle complet, et le script modifiera cette valeur chaque fois que le navire commence à sauver l'objet de jeu humain Et fixons simplement la valeur par défaut du montant de remplissage à zéro, qu'elle soit invincible au début Et dirigeons simplement l'objet du jeu Circle Bar vers emplacement de l'interface utilisateur du chronomètre , situé sous le composant Human Rescue. Et plus tard, nous pourrons utiliser cet événement non sauvegardé pour émettre le son chaque fois que nous aurons fini de sauver l'humain Ou nous pouvons simplement le faire maintenant, ajoutons simplement un composant de source audio dans l'objet du jeu de sauvetage humain. Ajoutons le son de sauvetage humain au clip audio, et nous devons désactiver la lecture au réveil pour nous assurer qu'il ne sera pas diffusé au début de la scène. Et nous pouvons ajouter une entrée à l'événement unrescue ici, puis faire glisser la source audio dans l'emplacement de l'objet ici Et sous le crochet de fonction ici, nous pouvons simplement sélectionner la source audio et exécuter la méthode de lecture. Ou nous pouvons simplement exécuter la méthode play one shot, et nous n'avons pas besoin de signer le clip audio ici dans la source audio. Mais au lieu de cela, nous pouvons attribuer le clip audio à l'événement Unity. Et maintenant, essayons-le. Et ici, comme vous pouvez le voir ici, si nous déplaçons le vaisseau puis que nous survolons l'humain, il commence à secourir Mais si nous quittons l'humain , il arrêtera le chronomètre, et chaque fois que nous le reprendrons, il remettra le chronomètre à zéro. Et si nous restons et essayons de sauver l'humain. Une fois le sauvetage terminé, il attendra un moment, émettra le son, puis détruira l'objet de jeu humain Bonjour, c'est Rom in from the future, et nous devons apporter une légère modification à l'objet du jeu de sauvetage humain. Pour résoudre ce problème, allons dans le dossier des préfabriqués, et sous les amis, et sous les amis suffit de double-cliquer sur il suffit de double-cliquer sur le sauvetage humain pour ouvrir le Et si vous utilisez toujours l'ancienne version de Unity, vous pouvez toujours faire glisser l'objet du jeu de sauvetage humain dans la scène , puis apporter des modifications, puis appliquer les modifications aux préfabriqués. Les changements que nous devons apporter constituent donc le canevas de santé. Donc, en gros, nous devons supprimer cette roulette graphique. Sinon, si nous avons ce composant ici, chaque fois que nous secourons un homme, il ralentira ou activera le bullet time, car le bullet time sera activé chaque fois qu'il n' y a aucun contact ou qu'il y a un contact au-dessus d'une interface utilisateur Donc, si nous avons cette roulette graphique, elle enregistrera le toucher au-dessus d'une interface utilisateur, ce qui posera problème Je vais donc cliquer avec le bouton droit sur ce composant ici, puis appuyer sur Supprimer le composant, et je vais revenir à la scène ici, et cela devrait résoudre le problème. Cela met fin à ces leçons sur la création du sauvetage humain, et nous pouvons passer à la vidéo suivante. 25. 25 Système de mise en commun de finition: Dans cette vidéo, nous allons commencer à travailler sur le système de gestion du tirage. Commençons par ouvrir le script Pulling Manager. Et le concept de base du gestionnaire de traction est que nous voulons instancier l'objet que nous utilisons souvent, comme un effet de balle ou une explosion, puis nous voulons instancier ces objets ou au début du niveau Et nous voulons instancier pour quelques quantités ou quelques copies des objets Nous pouvons donc réutiliser ces objets et les activer , puis les désactiver lorsque nous ne les utilisons plus. De cette façon, nous économiserons les cycles du processeur, en particulier sur les appareils mobiles. Il est donc vivement recommandé d'utiliser le système de traction pour les objets utilisés à plusieurs reprises. Et nous allons utiliser un Q, qui est un type de collection comme un tableau ou une liste, mais il est plus efficace qu'une liste. Et comment fonctionne le Q ? Laissez-moi vous montrer Donc, avec le système Q, nous pouvons obtenir le membre dès le début de la commande, nous ne pouvons pas obtenir de membre en utilisant un identifiant. Nous ne pouvons obtenir que le premier. Et chaque fois que nous remettons un objet dans le Q, ce sera le dernier. C'est comme un système Q, et c'est le dernier entré, le premier sorti. Voici donc une illustration du fonctionnement de Q. Ainsi, par exemple, si quatre objets sont insérés dans un Q, et chaque fois que nous voulons récupérer un objet de cette file d'attente, le premier sera automatiquement récupéré. Chaque fois que nous essayons de définir un objet, il renvoie le premier objet de la file d'attente, et nous pouvons l'obtenir en utilisant la commande Q depuis l'objet Q. Chaque fois que nous ajouterons un nouvel objet à cette que ici, nous insérerons cet objet dans le moins de l'ordre dans cette que. Et nous pouvons utiliser la commande NQ pour cela. Et par rapport à cela, Q fonctionne bien mieux. Cela rend donc un objet Q très utile ou l'une des meilleures solutions pour le système de sondage. Revenons maintenant à Unity, et ouvrons à nouveau le script du gestionnaire de sondages. Créons donc une nouvelle classe personnalisée pour contenir les données p ou les données de l'objet. Et tapons simplement public class ici en dehors de la classe Pulling Manager. Et nous pouvons l'appeler pull item. Et nous ne voulons pas que cette classe hérite du comportement mono. Nous voulons en faire une classe personnalisée. Et je vais ajouter un attribut sérialisable, qui provient de l'espace des noms du système, afin que nous puissions simplement taper system that Et cela rendra cette classe appropriée et nous pourrons voir cette classe plus tard dans l'inspecteur Et maintenant, déclarons quelques variables. Le premier sera un type d'objet de jeu, et définissons le champ d' public et nous pouvons appeler cet objet de sondage. Et ce seront les préfabriqués de l'objet que nous voulons extraire Et le second serait une portée de type public d'entier, et nous pouvons simplement appeler ce montant du sondage, et cela décidera du nombre objets que nous voulons inciter au démarrage Et le troisième sera une sorte de lingot, également destiné au public Et nous pouvons simplement appeler cela cultivable. Et cet intimidateur et cultivable, c'est nous qui déciderons si le pool peut grandir tout seul ou Et nous créons cette classe personnalisée afin de pouvoir facilement utiliser cette classe personnalisée comme champ dans le script Pulling Managers. Et nous pouvons le créer sous forme de tableau ici. Comme vous pouvez le constater, nous pouvons simplement créer un champ public, puis un tableau d'éléments du sondage. Plus tard, nous pourrons parcourir ce tableau, puis instancier chacun des différents objets du jeu à l' intérieur de cette entrée du tableau d' éléments d'extraction Et nous pouvons également utiliser le pull amount pour décider de la quantité d'objet que nous voulons instancier, et nous pouvons l'appeler pull items Et sauvegardons ça. Et si nous revenons maintenant à Unity et que nous sélectionnons objet du jeu Pulling Manager une fois qu'il sera compilé. Et maintenant, comme vous pouvez le voir, nous avons ce tableau d'éléments d'extraction et nous pouvons augmenter sa taille. Supposons donc que nous voulions obtenir un article à trois, nous pouvons simplement définir la taille 23 ou 5. Et comme vous pouvez le voir ici, nous pouvons attribuer à chacune des entrées de l'objet du sondage un objet de jeu différent. Nous avons donc une bibliothèque d'objets de jeu différente au départ. Et nous pouvons utiliser cet objet de sondage pour l' instancier et le désactiver dans le gameplay Donc, par exemple, si je veux définir le premier sous forme de puce, il suffit de cliquer sur le bouton circulaire ici, puis de parcourir les préfabriqués des actifs, et de choisir Et pour le second, disons que nous voulons tirer la balle de l'ennemi. Choisissons simplement la balle ennemie. Et pour le troisième, mettons simplement l'effet Sparks. Et le quatrième sera pour l'explosion. Et le cinquième, mettons le missile et assurons-nous de choisir le préfabriqué, non le fichier FBX, comme nous pouvons le voir ci-dessous Et maintenant je sélectionne le préfep The Missile Preps . Donc maintenant, chaque fois que nous voulons instancier un objet à l'aide l'instance point du gestionnaire de traction puis de l'objet point get, nous devons placer l'objet dans cette liste Dans le cas contraire, il renverra une exception de référence nulle. Et maintenant, nous devons configurer le numéro du pull amount. Et comme nous allons utiliser cette balle assez souvent, nous allons tirer une grande quantité de balles à chaque image, donc je vais mettre 30 comme valeur de traction. Pour la balle. Et pour la balle ennemie, je vais également la mettre à 30. Et pour les étincelles, nous pouvons utiliser moins de valeur que la balle Par exemple, 20 devraient suffire. Et je vais activer les anciennes options pour la balle, la balle ennemie et les étincelles. Ainsi, chaque fois que nous n'avons plus d'objet d'extraction, le gestionnaire d'extraction peut en instancier un nouveau, et il place immédiatement cet objet instancié dans le q Ainsi, la taille du que peut augmenter, et pour l'explosion, dix devraient suffire pour la quantité d'attraction. Et activons simplement les options grow le également. Et pour le missile, fixons également le montant d'attraction à dix et activons l'option Grow Able. Et chaque fois que nous devons ajouter un nouvel objet à ce gestionnaire de traction, nous pouvons toujours augmenter la taille puis modifier les options de cet élément nouvellement créé dans les éléments d'extraction. Maintenant, rétablissons la taille de l'article à tirer à cinq. Et ici, pour en revenir au script du gestionnaire de tirages, nous devons déclarer quelques variables de dictionnaires Et je vais coller le code ici, et je vais expliquer cela dans chacun des dictionnaires. Donc, en gros, le dictionnaire est une collection avec un type de paire clé-valeur. Chaque dictionnaire doit donc avoir un objet clé et son objet valeur. Et ces objets de paire clé-valeur peuvent être définis l'aide des types de données de base tels que l'objet de jeu à facteur de transformation entier 3. Vous nommez l'objet de base à partir de l'espace de noms du moteur Unity. Et pour le premier, je vais déclarer que la clé est un entier, et pour la valeur, ce sera une autre collection, qui est un objet de jeu de type Q. Et nous pouvons appeler le premier dictionnaire pull Q. Et comme list, nous devons initialiser ce dictionnaire à l'aide d'un constructeur Nous pouvons donc simplement taper un nouveau dictionnaire et ses types de valeurs clés. Et le second dictionnaire est un dictionnaire avec les types de valeurs clés Integer et Boulan. Il contiendra les options évolutives de la classe personnalisée ici vers ce dictionnaire, afin que nous puissions facilement accéder à cette valeur Boulan évolutive Et dans le dictionnaire est, ce sera un type d' entier et de transformation pour les types de valeurs clés, et nous pouvons appeler ce parent. Et cela contiendra l'objet de jeu parent pour chacun des éléments du sondage. Nous pouvons donc bien organiser les objets à tirer dans la scène. Sinon, nous aurons tellement d'objets dans la hiérarchie. Et avec les parents, nous pouvons toujours agrandir et réduire l'objet du jeu, afin de cacher son enfant dans la hiérarchie. Et maintenant, créons une nouvelle méthode privée. Et je vais appeler ce pull pour initialiser le pull Ici, nous voulons créer un nouvel objet de jeu, et ce nouvel objet de jeu agira en tant que parent pour le groupe de traction. Et nous pouvons simplement initialiser cet objet de jeu en utilisant le constructeur new game object , puis passer le nom de l'objet sous forme de chaîne ici, et je vais appeler cela un groupe de sondage Et ci-dessous, nous voulons boucler les éléments de traction à l' aide d'une boucle à quatre boucles. Donc, pour la longueur, je vais la remplacer par la longueur des points des objets à tirer. Donc, en gros, la longueur renverra la valeur du tableau que nous avons défini dans l'inspecteur. Ainsi, par exemple, si inspecteur contient cinq éléments du sondage, la longueur des éléments du sondage renverra une valeur de cinq, et nous pourrons examiner tous ces membres du tableau. Et dans cette boucle, nous voulons d'abord créer un autre nouvel objet de jeu vide, et je vais appeler ce pool unique, et ce sera le brevet pour chacun d'entre eux. Et nous devons construire ce pool unique en utilisant le nouveau mot clé puis l'objet du jeu. Et nous voulons transmettre le nom à partir du nom de l'objet d'extraction afin de pouvoir simplement accéder à l'index des éléments d'extraction de I, puis à l' objet d'extraction, puis au nom. Mais je vais y ajouter une chaîne. Je vais donc ajouter un plus , puis une nouvelle chaîne avec un espace vide ici, puis une chaîne de groupe. Cela créera donc le nom du parent. L'objet de jeu parent sera nommé en fonction du nom de l'objet d'extraction , puis ajouté à l'aide d'un groupe de mots. Donc, si le nom de l'objet d'extraction est une puce, il sera appelé groupe de puces. Cela nous permettra d'organiser et de gérer plus facilement la scène ultérieurement. Et nous voulons définir ce pull parent unique en accédant à son composant de transformation, puis en exécutant la méthode set parent et nous pourrons passer la transformation de l'objet du jeu du groupe de pool. Ensuite, nous devons créer un identifiant d' objet de type entier. J'ai donc déclaré cet entier. Et pour cette valeur, nous voulons transmettre l' ID d'instance des préfabriqués de l'objet pull. Nous pouvons donc accéder à l'index des éléments d' extraction de I. Nous pouvons simplement copier-coller à partir de ce constructeur ici, l'objet pull, puis exécuter la méthode get instance ID Et cela renverra un identifiant unique à partir des préfabriqués de cet objet. Et nous voulons également désactiver l'objet du jeu avant de l'instancier. Accédons donc simplement à l'index des éléments de traction de l'objet de traction, puis exécutons la méthode active définie, puis nous pouvons simplement transmettre une valeur fausse. Et maintenant, nous voulons remplir le dictionnaire pull Q. Et si vous regardez ici, le dictionnaire a un type de clé entier, et nous voulons transmettre la valeur de l'identifiant de l'objet à cette clé entière du dictionnaire. Cet identifiant d'objet sera donc l'identifiant chaque fois que nous voulons extraire un certain objet d'un certain Q. Et ici, nous pouvons simplement ajouter un nouveau membre au P Q, et nous pouvons utiliser la commande ad, et pour cette commande publicitaire, il s'agit d'une clé et d'une valeur. Et pour la clé, nous pouvons simplement transmettre l'identifiant de l'objet, et pour la valeur, nous pouvons simplement initialiser un nouvel objet de jeu de type Q. Et nous voulons également remplir le dictionnaire cultivable. Nous pouvons donc simplement ajouter l'identifiant de l'objet comme clé. Et pour la valeur, nous pouvons simplement transmettre l'indice des éléments d'extraction de I, et nous pouvons transmettre la valeur des lingots cultivables à cette valeur du dictionnaire Et pour les dictionnaires parents, nous pouvons simplement transmettre l'identifiant de l'objet comme clé Et pour la valeur, nous voulons transmettre la transformation de ce nouvel objet de jeu appelé Unique pool ci-dessus. Nous avons donc maintenant configuré tous ces dictionnaires. Ensuite, nous pouvons créer une boucle à quatre boucles, et nous voulons remplacer la longueur en fonction l'indice des éléments du sondage I pull amount. Ainsi, par exemple, pour la première entrée, l'objet du jeu de balles, nous avons défini le montant d' attraction à 30, et cette boucle créera 30 copies de cet objet de jeu de balle. Dans ces quatre boucles, je vais donc créer un nouvel objet de jeu. Nous pouvons simplement l'appeler temporaire, et nous voulons instancier l'objet d'extraction à partir de l'index des éléments de traction de I. Et pour le parent, nous pouvons simplement transmettre la transformation d'extraction unique Ensuite, nous voulons passer cet objet de jeu temporaire dans l' objet de jeu Q du pull Q. Maintenant, nous pouvons simplement accéder au pull Q en utilisant des crochets. Nous pouvons simplement transmettre l'ID de l'objet, tout comme lorsque nous utilisons une liste ou un tableau, nous transmettons l'index. Mais au lieu de transmettre l'index, nous transmettons l'identifiant entier de l' objet, qui est l'identifiant des dictionnaires Ensuite, nous pouvons simplement exécuter la commande Q et nous pouvons simplement transmettre l'objet du jeu temporel. Comme argument pour le commentaire du NQ. Cela garantira que cet objet de jeu que nous venons instancier sera inséré dans cette collection que à l'intérieur de la pull queue, mais avec la clé de cet identifiant spécifique Et si aucun ancien membre n' dans cette file d'attente, cet objet de jeu temporaire sera le premier objet de jeu à être inséré dans la file d'attente. Et pour la prochaine itération, ce sera le deuxième objet du jeu et ainsi de suite. Sauvegardons le script. Et comme ces quatre boucles se trouvent à l'intérieur d'une autre boucle, nous devons changer ce nom entier. Soulignons donc simplement la lettre, et je vais la remplacer par J. Je vais donc changer toutes les références en J dans cette deuxième boucle à quatre boucles. Et pour l'index des éléments pull, nous voulons également le remplacer par J. Ensuite, nous devons exécuter cette méthode pull in dans la méthode wake, et nous devons placer la méthode pull init dans wake car nous voulons nous assurer que l'initialisation a lieu avant le démarrage Ainsi, pour tout autre script ou objet ayant besoin d'accéder à cet objet de pull game dans sa méthode de démarrage, le gestionnaire d'extraction s' assurera que les objets sont déjà disponibles. Ensuite, nous voulons modifier la méthode use object et la méthode return object. Et d'abord, dans la méthode use object, nous voulons ajouter une variable locale de type entier, et il s'agira de l'identifiant de l'objet du jeu que nous transmettons ici en argument Nous pouvons donc simplement taper un OBJ égal, puis nous pouvons exécuter la méthode get incense ID Nous avons donc maintenant cet identifiant que nous pouvons utiliser chaque fois que nous voulons utiliser l'objet du dictionnaire. Et j'ai conçu cette méthode pour qu'elle agisse exactement comme la méthode instanciée où nous devons transmettre l'objet du jeu, position et la rotation du quaternion Maintenant, une fois que nous avons l'identifiant de l'encens dans la variable d'identification de l'objet, nous pouvons obtenir l' objet du jeu dans le pool Q ici Et ici, nous pouvons simplement remplacer la méthode instanciée, puis nous pouvons simplement taper pull Q avec un crochet, et nous pouvons passer l'ID de l'objet dans la touche pull Q située à l'intérieur du crochet, puis nous pouvons exécuter la commande Q à partir du q que nous récupérons dans ce dictionnaire pull Cela récupérera le premier objet de jeu disponible dans le p q avec cette clé d'identification, et cet objet de jeu sera renvoyé à cet objet de jeu TM. Mais le problème avec Q, nous devons nous assurer que l'objet que nous mettons en file d'attente est un objet inutilisé Et pour vérifier cela, nous devons vérifier l' état actif de cet objet. Donc, ci-dessous, nous pouvons vérifier chaque fois que l'objet du jeu T est actif, puis nous devons en récupérer un nouveau. Ajoutons donc simplement une instruction if puis si la hiérarchie active, c'est-à-dire si l'objet du jeu TM, est active dans la hiérarchie des scènes, nous voulons instancier un nouvel Et nous voulons vérifier si certaines options de croissance d'objets d'extraction sont activées à l'aide du sondage de croissance et transmettre l' ID de l'objet pour obtenir sa valeur Donc, ici, chaque fois que les options cultivables sont vraies, nous voulons en instancier une nouvelle. Mais avant d'instancier le nouvel objet de jeu, nous voulons réintégrer l'objet de jeu temporaire actif de Caron dans son sondage Nous n' utilisons donc pas celui-ci Tapons donc pull Q ici, puis passons l'identifiant, SAQ entre crochets, en utilisant l'identifiant de l'objet, et nous voulons exécuter la méthode NQ, puis passer l'objet du jeu TMP comme argument NQ Ensuite, nous voulons remplacer l'objet de jeu Tam par un objet de jeu nouvellement instancié. Nous pouvons donc simplement taper Tam equal, Nous pouvons donc simplement taper Tam equal puis exécuter la méthode d'incitation et nous pouvons simplement inciter l'objet immédiatement en utilisant l'argument object Et pour les parents, nous voulons accéder au dictionnaire des parents, et nous pouvons simplement transmettre l'identifiant de l' objet comme clé. Ensuite, nous voulons définir la transformation temporaire du jeu cette position à la position que nous transmettons dans la méthode use object, qui est pus et aussi la rotation, nous voulons définir la transformation cette rotation sur l'argument rot. Et ci-dessous, nous avons déjà défini l'état actif temporaire du jeu à l' aide de la méthode set active sur true. Cela activera donc l'objet de jeu temporaire automatiquement l'objet de jeu temporaire chaque fois que nous l'utiliserons. Et enfin, dans cette méthode, nous voulons renvoyer l'objet de jeu temporaire. Et en gros, cela ne couvre qu'une seule condition, chaque fois que les options cultivables sont vraies, et nous voulons ajouter une déclaration L ci-dessous. Et en gros, nous voulons renvoyer une valeur nulle. Si les options de plian cultivable sont fausses, nous voulons remettre l'objet de jeu TM à zéro, ce qui renverra un objet de jeu nul Et plus tard, chaque fois que nous utilisons la méthode object, nous pouvons simplement vérifier si l'objet du jeu est nul ou non. Ici, nous voulons également ajouter une condition L dès la première instruction Si l'objet de jeu temporaire est actif dans la hiérarchie, cela signifie que l'objet de jeu temporaire n'est pas actif dans la scène. Donc, si l'objet temporaire n' est pas actif dans la scène, nous pouvons simplement définir la position transformation et transformer la rotation immédiatement dans ce bloc ici. Nous pouvons donc simplement copier ces deux lignes ici, puis les coller dans l'instruction L. Et nous voulons déplacer la méthode active t the set ici pour qu'elle se trouve à l'intérieur de l'instruction. Coupons-le , puis collons-le dans l' instruction L, puis dans le taureau global , car nous voulons nous assurer de n' activer l' objet de jeu temporaire que lorsqu'il n'est pas nul. Et ici, avant renvoyer l'objet de jeu temporaire, nous voulons le remettre dans le dernier ordre de Q en utilisant le n Q ici. Donc, en gros, nous déplaçons la position de l'objet du jeu à utiliser du premier au dernier, car nous devons le remettre au Q. Sinon, nous manquerons d' objet si nous ne le faisons pas. Et maintenant, nous devons travailler sur la méthode de retour de l'objet. Et en gros, chaque fois que nous renvoyons un objet, nous ne voulons pas le détruire , mais plutôt le désactiver Et ici, d'abord, nous voulons ajouter une instruction if, et nous voulons vérifier si la valeur du délai est nulle, puis nous voulons désactiver l'objet du jeu immédiatement car nous n'avons aucune valeur de retard Nous pouvons donc simplement accéder à l'objet , puis exécuter la méthode set active et définir sa valeur sur false. Et nous pouvons simplement supprimer la ligne de destruction ici et la remplacer par une instruction L. Et ici, si nous avons une valeur su pour l'argument delay, alors nous voulons retarder l' objet d'activation. Et pour cela, nous pouvons utiliser une routine conjointe. Alors maintenant, déclarons d'abord la routine co. Tapons donc simplement l'énumérateur de type de retour, et nous pouvons simplement l'appeler delay Et pour l'argument, il doit être identique à l'objet de retour. Nous pouvons donc simplement copier cette ligne puis la coller dans la routine co. Et ici, nous pouvons simplement regarder la valeur du délai à l'aide de l'instruction L, et nous pouvons vérifier si la valeur du délai est supérieure à zéro. Ensuite, nous voulons diminuer la valeur du délai en utilisant le temps Dotel La valeur du délai agira donc comme une minuterie. Et ci-dessous, nous voulons exécuter le rendement. Cela bouclera donc la coroutine à l'intérieur de cette boucle i avant de passer au code suivant ci-dessous. Et chaque fois que le délai est égal ou inférieur à zéro, il ignorera cette boucle, puis il exécutera la ligne ci-dessous ici. Nous pouvons donc maintenant simplement exécuter la méthode set active à partir de l'objet de jeu OBJ, puis passer la fausse valeur comme argument set active Maintenant, nous avons déclaré cette routine de base. Nous pouvons simplement exécuter la routine co dans l'instruction L de la méthode de l'objet de retour en utilisant la méthode start co routine puis en passant le nom de la routine co, qui est delay return, et nous devons transmettre l'argument de l'objet de retour, afin de pouvoir simplement transmettre l'argument OBJ Ensuite, pour le délai, nous pouvons simplement transmettre la valeur du délai. OK. Maintenant, sauvegardons le script. Nous avons maintenant mis en place le pull manager. Revenons à l'unité. Et maintenant, essayons de jouer cette scène ici. Mais il y a une erreur ici. Je vais donc d'abord vérifier l'erreur. OK, alors double-cliquons simplement sur le message d'erreur. Et cela pointe vers cette ligne. OK, il y a donc une erreur avec cet index des éléments d'extraction ici. Ce devrait être l'indice de i car nous sommes essentiellement en train de boucler les éléments d'extraction de cette première boucle ici Nous devons donc utiliser cet entier I de la première boucle pour parcourir les éléments d'extraction. Et c'est pourquoi cela génère une erreur. Remplaçons-le donc à nouveau par l'index des éléments d'extraction et enregistrons le script, revenons au T et essayons à nouveau. Et maintenant, comme vous pouvez le constater, cela fonctionne et les balles sont stimulées par le système de traction Et arrêtons simplement la scène ici. Et comme vous pouvez le voir dans la hiérarchie, nous avons cet objet de jeu appelé poll group, et cet objet de jeu est créé par ce code ici, la première ligne de la méthode pull it. Et si nous élargissons l'objet de jeu du groupe de sondage, nous aurons un autre objet antijeu basé sur les noms des objets du jeu, savoir Bullet Enemy Bullet Sparks Explosion et Meso Et cet objet de jeu est également créé par le gestionnaire de traction, mais en fonction de chacun des objets d'extraction et des trois noms d'objets du jeu, mais nous ajoutons un groupe derrière le nom. Et si nous élargissons l'un des groupes ici, vous pouvez constater que nous avons beaucoup d'objets de jeu pour enfants, qui sont essentiellement des objets de jeu créés à la suite du pull manager, et en gros, nous utilisons cet objet Pour tirer et créer l'explosion. Ainsi, au lieu de détruire et d'intentionner, nous récupérons l'objet du jeu, puis renvoyons le jeu dans ce groupe ici Et comme vous pouvez le voir ici, d'une manière ou d'une autre, le blaster ou la balle, la balle du joueur ne sont jamais renvoyés au sondage ici. Alors réglons ce problème. Et à l'heure actuelle, cela ne cesse de croître, nous devons donc régler ce problème définitivement. Revenons donc au script. Et ici, passons au script de prise de vue automatique et ci-dessous à la méthode de prise de vue dans le vide. Comme vous pouvez le constater, nous instancions la puce à l'aide du gestionnaire de traction, mais nous n'avons jamais désactivé ces puces instanciées Il continue donc à faire pousser l' objet depuis la piscine. Donc, ci-dessous, ajoutons simplement le commentaire à renvoyer depuis le pull manager. Accédons donc simplement à l'instance du gestionnaire de traction, puis nous pouvons simplement exécuter la méthode de l' objet de retour et nous pouvons transmettre l'objet de jeu que nous instancions au début de la méthode ici, qui est l'objet de jeu TM Et pour le délai, nous pouvons simplement transmettre la valeur du profil de prise de vue. Et obtenez la valeur nominale du destroyer. Et sauvegardons ça. Bonjour, c'est Rome du futur, et il y a quelques points que nous devons corriger dans le script de tournage. Donc, ici, sous la méthode de tournage. Comme vous pouvez le constater, chaque fois que nous instancions la puce, nous utilisons la rotation du point d' apparition, qui est la rotation du point le plus éloigné Tout cela est bien, mais chaque fois que le vaisseau s' incline, nous introduisons une légère rotation sur l'axe Z de la balle. Nous devons donc d'abord annuler la rotation z. Donc, pour ignorer la rotation en z, créons simplement une nouvelle variable focale quaternions dans la méthode de tournage, et nous pouvons simplement l'appeler rotation dans la méthode de tournage, et nous pouvons simplement l'appeler Créons un nouveau quaternion à partir d'un type d'ular et nous pouvons transmettre ici la valeur des quatre valeurs ponctuelles, la valeur x et les valeurs y. Et pour la valeur z, nous pouvons simplement passer zéro. Et maintenant, nous avons déclaré cette rotation des balles. Utilisons simplement cette valeur comme rotation chaque fois que nous instancions la puce Et nous avons défini ce taux de destruction à partir de l'objet scriptable du profil de tournage Jetons donc un coup d'œil aux profils des armes. Et je vais juste sélectionner le profil du joueur de niveau 2 ici. Et comme vous pouvez le voir ici, la cadence du destroyer est fixée à 2 secondes. Cela obtiendra donc cette valeur et retardera la destruction de la balle après 2 secondes d'instanciation Alors essayons-le. Et comme vous pouvez le voir ici, publions le jeu, et jetons un coup d'œil ici. Et si nous élargissons l'objet du jeu Bullet Group, vous voyez que je ne suis pas sûre, mais je suppose que nous avons corrigé un objet de jeu de 30 points ici, et il ne grandit pas OK. Comme vous pouvez le voir ici, si je sélectionne quelques objets de jeu, nous en avons deux qui sont activés, et vous pouvez voir ici dans l'inspecteur c'est en fait l'objet activé, donc cela fonctionne. Et en gros, celui qui est activé est l' objet de jeu inutilisé du pool. Ainsi, chaque fois que le joueur va tirer une nouvelle balle, il choisira l'objet de jeu activé. Mais si le responsable du pool ne trouve aucun objet de jeu activé, il augmentera automatiquement ce pool en proposant un nouvel objet, puis en les plaçant dans la collection Q, et également en tant qu'enfant de cet objet de jeu à puces Donc, en gros, le système de mise en pool est une bonne pratique chaque fois que nous créons un jeu pour un appareil aux capacités limitées, tel qu'un appareil mobile Il est donc vraiment recommandé de configurer un système de mise en commun pour gérer les objets utilisés très souvent et de manière très répétée. Maintenant, essayons-le pour le bateau-bus ici, car nous avons déjà changé pas mal de choses au sein du gestionnaire de traction. Je veux donc m'assurer que cela fonctionne bien avec le navire-bus. Désactivons donc le sauvetage humain, puis activons le navire-bus, et essayons-le. OK, pour l'instant, c'est bon. Comme vous pouvez le voir ici, le bus ennemi tire les balles immédiatement, qui produit des étincelles et une explosion Cela semble donc plutôt bon jusqu'à présent. Le missile fonctionne également. Donc oui, le script du Pulling Manager est terminé, et nous pouvons passer à la vidéo suivante. 26. 26 Level Designing partie 1: OK. Nous allons donc maintenant concevoir le niveau. OK. Nous pouvons d'abord désactiver le navire-bus pour voir clairement la scène. Ici, passons au panneau des ressources, au panneau du projet et sous le dossier des modèles. Nous allons chercher notre carrelage ici. Celui-ci, le carreau de sol, et faites-le glisser vers notre scène. Nous allons nous assurer que notre carreau de sol va placer sa couche sur l'objet au sol. Je vais créer un objet anti-jeu. Je vais réinitialiser sa transformation et renommer cet environnement. OK. Disons que le carreau de sol est l'enfant de notre environnement, et je vais également placer de sol est l'enfant de notre environnement, notre dalle de sol une unité ou peut-être deux unités en dessous. La valeur de l'axe y doit être inférieure à deux. Si vous le voyez depuis notre vision du jeu, je vais le mettre dans l'axe. Et définissez la valeur de notre Z deux moins cinq. Si vous souhaitez déplacer progressivement chaque unité, vous pouvez maintenir le bouton de commande enfoncé et simplement diriger l'objet en fonction gadget que vous avez sélectionné. L'objet sera déplacé dans cet accès, chaque unité, comme vous pouvez le voir ici dans l' Maintenant, nous avons ce terrain et je vais le dupliquer plusieurs fois, le déplacer puis le dupliquer à nouveau. Déplacez à nouveau ce duplicata et déplacez-le à l'aide du bouton de commande. Nous pouvons voir qu'il s' accroche correctement à l'autre objet du jeu, l'autre terrain, et nous devons le créer plusieurs fois Je vais l'utiliser pour tout sélectionner, puis le dupliquer ensemble et le déplacer en maintenant le contrôle enfoncé. Ici, nous pouvons voir que la position est moins six sur le t, celle-ci sera de 92 sur l'axe Z et. Nous devrons ajouter du terrain plus tard, mais nous allons d'abord donner la priorité au monde World Mover est essentiellement l'objet parent qui va déplacer notre caméra et notre joueur Le joueur suivra cet objet du monde. Je vais créer un nouvel objet de jeu vide ici en dessous de l'environnement et je vais le mettre au sol. Je vais faire glisser tout le sol vers cet objet en forme de t. Tout le sol soit le fruit de cet objet de jeu terrestre, afin que nous puissions nous étendre et nous effondrer. Maintenant, créons le World Mover. Je vais créer un nouvel objet de jeu et nous allons réinitialiser la valeur de cet objet de jeu vide. Et notre appareil photo. Cette caméra sera l'enfant de notre objet de jeu vide. Revidons l' objet du jeu à déplacer. Nous devons également élever notre joueur à l'image de ce joueur qui change le monde ici OK. Maintenant, avec notre road mover, ajoutons le script to move. OK. Et nous pouvons définir la position, le mouvement bouleversé. Par exemple, si nous voulons passer à ce point, nous devons définir la valeur z sur 90, par exemple. Et combien de temps voulons-nous déménager ? Par exemple, nous voulons nous déplacer pour la 62e place, puis placer la 62e place ici et activer au démarrage. Comme vous pouvez le voir, environ le navire se déplace dans l'environnement, et tout ira bien OK. Nous arriverons. Je vais passer à la vue du jeu ici. Nous arriverons au bout de ce terrain dans exactement 60 secondes. Nous pouvons donc calculer durée de votre niveau en insérant une valeur dans cette durée Donc, si vous souhaitez régler le niveau pour qu'il ne dure que 2 minutes, vous pouvez définir la durée sur 120, car la durée est exprimée en secondes. Maintenant, configurez cela. Élargissons notre niveau. Je vais copier tout cela ici dupliquer tous ensemble et les déplacer également ensemble en maintenant le point de contrôle enfoncé. OK. Vérifions-le. Il s'agit de 200 sur l'axe z. Je vais changer le facteur mondial ici à 200, peut-être 190 et régler la durée pour qu'elle soit plus longue que cette valeur ici, 120 Si nous jouons à ce jeu, il se déplacera à la même vitesse qu'avant, mais nous avons un niveau plus long. OK. Maintenant, nous pouvons commencer à dénicher notre ennemi. abord, je vais activer le sauvetage humain et je vais transformer la couche en objet au sol. Je vais envoyer les secours humains bas, ici, sur le sol. Mais je vais agrandir le collisionneur pour que nos navires puissent le percuter, comme ça Nous allons enregistrer ce sauvetage humain comme prérequis. Passons à la préparation. Je vais créer un nouveau dossier, le qualifier convivial et je vais diriger ce sauvetage humain vers ce dossier convivial Nous pouvons maintenant déplacer le sauvetage humain. Nous pouvons créer quelques objets de sauvetage humains en appuyant sur la touche Ctrl. Mettons le sauvetage humain dans l' environnement de l' objet du jeu, créons un autre vide et retrouvons ce sauvetage et plaçons le sauvetage humain dans ce sauvetage ici. Nous pouvons donc organiser notre hiérarchie ici. Dupliquons cela à nouveau. OK. Cela devrait suffire. Nous allons maintenant mettre des arbres et des pierres dans la scène. Passons à notre dossier de modèles et nous avons en fait une pierre, donc nous pouvons la mettre dans notre environnement ici. En gros, cette roche a deux objets. Je vais donc déplacer le premier objet. Oui, être ici, et nous pouvons nous déplacer pour voir sur la vue du jeu ici. Nous pouvons l'étendre à une plus grande échelle. Et nous pouvons créer une mise en page intéressante. Et je vais faire avancer rapidement la vidéo ici. OK. OK, sauvegardez la scène, et nous allons mettre les arbres ici. Je vais sectionner le rocher et je vais changer sa couche en objet terrestre. Pour le sauvetage humain, je vais également le remplacer par un objet au sol. Pour le sol, nous pouvons changer son objet, et nous pouvons changer tous les enfants. Maintenant, nous devons planter des arbres ici. Revenons aux modèles et où sont-ils ? J'ai mis le cocotier ici. Voilà. Nous avons les arbres. Je vais créer un nouvel objet de jeu vide pour organiser les arbres. ' nommez les arbres et l'un des cocotiers ici. Et dupliquez le cocotier et déplacez-le vers une autre position et nous pouvons faire pivoter sur l'axe y pour créer une rotation aléatoire. Dupliquez à nouveau en appuyant sur Ctrl D, passez à cette position, et nous pouvons concentrer un objet en doublant son nom dans la hiérarchie. Et dupliquez ces deux objets, déplacez-le, faites-le pivoter et dupliquez-le à nouveau et nous pourrons sélectionner tous les cocotiers. Dupliquons-les tous ensemble et déplaçons-les pour exécuter cette position ici . Sélectionnons les arbres et les doublons et déplaçons-les déplaçons-les ici. Nous pouvons simplement supprimer cet arbre ici, sélectionner les trois et changer la couche pour faire pousser l' objet et également changer les enfants Maintenant, nous avons cet arbre ici. Si nous jouons la scène, nous pouvons voir que le vaisseau est recouvert et nous pouvons sauver l'humain. La raison pour laquelle l'animation ne fonctionne pas. Allons vérifier notre sauvetage humain. Choisissons le contrôleur et appliquons-le. Une fois que nous l'avons appliqué , il est appliqué à l'autre objet du jeu de sauvetage humain . Comme les préférences sont les mêmes. Si nous y jouons maintenant, nous pouvons voir l'animation de notre sauvetage humain Nous pouvons sauver l'humain. Un humain a été secouru. Et comme ça. Si c'est trop rapide, si le mouvement mondial est trop rapide, nous pouvons toujours augmenter la durée Je vais régler ce paramètre à 240. Il me faudrait 4 minutes pour rendre au bout de la carte du niveau. Je pense que ce sera mieux parce que nous affronterons beaucoup d'ennemis et tout le reste. Je pense que ce sera pour concevoir le niveau et dans la prochaine vidéo, nous allons placer les ennemis. 27. 27 Level Designing partie 2: OK. Plaçons donc les ennemis ici. Et nous pouvons simplement activer le Tut A, et je vais le nommer missile Et je vais déplacer la tourelle au sol ici. Mais nous allons l'étendre ainsi qu'au tireur de missiles. Je vais appuyer, désolé, pour pousser l'objet de jeu vide. L'objet de jeu vide s'aligne sur notre vaisseau ici. Je vais déplacer les choses jusqu'à ce point. Et je vais fabriquer ce missile à tourelle en guise de pré-fabrication. Allons dans le dossier des préférences sous ennemis et faisons glisser le missile Tret. OK. Maintenant, je vais créer un autre objet de jeu à tourelles, mais ce n'est pas un missile Ce sera la tourelle normale. Tourelle qui tire la balle normale MO normale. Passons donc au modèle et faisons-y glisser un objet. Je vais le mettre à zéro, zéro, le déplacer ici, et nous allons configurer objet du jeu de missiles ici, et nous allons utiliser ce jeu de tir ici. Je vais dupliquer le jeu de tir et changer de position pour supprimer le signe négatif, et nous pouvons redimensionner l' axe X à moins un. Cela devrait donc ressembler à ceci. Et nous allons créer un nouvel objet de jeu vide. Et ce sera la partie supérieure, tout comme le missile. Disons que le tireur du haut du corps est l'enfant de la partie supérieure. Tout comme pour le jeu de missiles, nous allons examiner le composant du joueur dans la partie supérieure. Regardez le joueur, nous allons utiliser la vitesse de rotation ici et déplacer la tourelle vers le Je vais déplacer ce fil ici. Oui. Et nous sommes désolés, nous pouvons créer un objet de jeu vide qui va filmer le MO ici. Créons donc simplement un objet de jeu vide. Et assurez-vous que si nous changeons cela en local, l'axe Z pointe vers l'avant, ou du moins il pointe dans la même direction que la rotation de notre tireur d'objets ici. Je vais m'assurer que la position de cet objet de jeu vide est la même que celle que nous avons ici. Nous allons donc le placer autour cette position ici ou nous pouvons simplement le déplacer juste là. Et ce sera le shoot automatique du tireur. Utilisons simplement la tourelle circulaire pour le profil, mais plus tard, nous pourrons créer le nouveau profil que nous voulons vous voir Je vais aligner l'exposition de manière à ce qu'elle corresponde à celle de notre jeu de tir, à partir du haut. La balle fait référence, je vais choisir la balle ennemie, nous pouvons simplement vider le point de tir ici et le renommer en tireur L ou tireur de gauche, et je vais le dupliquer et ce sera le tireur R ou le tireur droit Et je vais juste supprimer le signe négatif, positionner la ligne avec le maillage du jeu de tir ici, renommons simplement ce jeu de tir Et nous allons le définir comme un préfabriqué. Allons dans le dossier de l'ennemi et dirigeons le préfabriqué. Mais avec le Tt Mazzel et le jeu de tir génial, nous devons créer un système de santé, un système mort et aussi créer des objets OK. Donc, en gros, ce que vous faites, c'est créer un effet de flamme. Allez donc dans le dossier x et faites glisser la fumée de flamme ici, et nous voulons nous assurer que notre particule de flamme est désactivée ici. Et chaque fois que nous vainquons le tireur à tourelle, nous voulons permettre à objet de fumée de feu de le diriger vers cet objet de fumée de feu de le diriger vers le créneau d'événement situé ici Je vais m'assurer que dans le composant objet du jeu ici, choisissez la méthode active définie et configurez-la pour qu'elle soit activée. Nous allons créer un expert, choisir l'explosion. Ici, nous allons mourir au bout de 2,5 secondes. Nous voulons détruire cette explosion au bout de 2,5 secondes. Et pour l'effet hit, nous allons nous procurer nos préfabriqués Sparks Et nous ne voulons pas ajouter de barre de santé ici. Donc oui, ce n'est pas grave si vous n'utilisez pas de barre de santé, et je vais appliquer ces préfabriqués la même manière à notre missile de menace Je vais ajouter de la fumée par ici. Ensuite, si je passe à cet objet de jeu, comme vous pouvez le voir, nous avons un bel effet de flamme, et je vais le repositionner un peu OK. Oui, quelque chose comme ça. Et je vais d' abord le désactiver et passer au missile à bande de roulement Ajoutez quelques composants, comme dans le jeu de tir précédent. Et le dernier devrait être Create Object. OK. OK. Désolée, avec les chaussures rouges ici. Je vais diriger create object vers notre emplacement d'objet spawn ici Cette explosion apparaîtra donc chaque fois que les ennemis seront détruits. Appuyez de nouveau sur Appliquer. Ici, je vais diriger l'objet de création vers l'objet span ici et je vais le définir comme l'autre menace ici, Explosion 2.5. Lors de cet événement également, je voudrais activer la fumée des flammes ici. Accédez au menu des objets du jeu et choisissez Set Active et SubliF l'effet hit. Nous voulons accéder au Spark, dans le dossier des actifs, les types d'actifs ici et rechercher des étincelles OK. Ensuite, nous voulons appliquer les paramètres ici. Il est donc appliqué au préfixe et chaque fois que nous récupérons le nouvel objet auprès du préfet, il aura les mêmes paramètres que celui-ci Sous environnement, je vais ajouter un nouvel objet de jeu. Et je vais appeler cela des ennemis terrestres, et je vais faire en sorte que toutes les tourelles soient des ennemis terrestres ici Je vais activer notre tourelle ronde comme ça, oui. Et je vais le noter, moins deux et peut-être le mettre ici, ça devrait être une bonne chose. Et oui, assurez-vous que la rotation est un objet au sol. Nous plaçons la couche sur l' objet au sol et sur la partie supérieure. Nous avons l'objet du tireur, et voici l'objet encerclé. En gros, celui qui tourne est cet objet de jeu vide, tourne indéfiniment. Je vais déplacer l'objet du tireur ici pour déterminer la position de notre vaisseau sur l'axe Y, dans la même position. Là. Nous avons maintenant la configuration. Je vais le faire. Une autre chose est que nous devons créer le planeur en forme de boîte pour les collisions Configurons simplement cela. Je vais l'agrandir sur le x et aussi sur le z, quelque chose comme ça. Je vais activer Reger, et nous allons également créer le système de santé, le système de mort et le script de création d'objets Configurons donc rapidement cela. glisser vers l' objet de génération lors de cet événement, nous activerons les effets de flamme plus tard, mais nous ne l'avons pas mis comme enfant de ce thread d'exécution Il suffit de mettre en place les étincelles ici faire glisser l'objet en forme de flamme et de le placer comme un enfant, et je vais le repositionner quelque part autour de cette position OK. Et je vais désactiver la fumée des flammes ici. Et chaque fois qu'elle sera détruite, nous allons permettre à cette flamme de fumer. L'objet du jeu est activé et définissez-le comme vrai. Et cette canne, nous pouvons aussi la conserver en tant que préfabriquée, et nous allons la mettre en tant qu'enfant de cette canne à pêche. Pour ces deux missiles, nous avons déjà configuré notre système de santé, mais j'ai oublié d'ajouter un collisionneur Nous devons créer un nouveau collisionneur, et créons un plus grand collisionneur comme celui-ci Chaque fois que notre joueur tire des balles, notre joueur touche ce collisionneur Réglons la taille et la taille sur 1,5 et réglons le déclencheur sur true. Nous pouvons donc simplement terminer ce composant, appuyer sur Appliquer et passer à notre jeu de tir ici, et nous pouvons coller le composant comme nous pouvons simplement appuyer sur Oui. Sauvegardons ceci et essayons-le. Nous en avons un mais il y a un problème ici, comme vous pouvez le constater. La tourelle est en train de tirer, même si l'objet est toujours hors cadre, hors écran, et nous voulons créer une sorte de déclencheur Ainsi, chaque fois qu'un ennemi est hors de l'écran, nous voulons le désactiver une fois que l'ennemi entre dans notre écran, nous voulons l'activer. Nous devons donc créer une sorte de déclencheur. Et nous le créerons dans la prochaine vidéo. 28. 28 Activateur d’ennemi: Créons maintenant le déclencheur dont nous avons parlé dans la dernière vidéo. Passons à notre script. Sous le script de l'ennemi. Nous allons créer un nouveau script d'activation. Désolée. Et ouvrons un script. En fait, le script est très simple. Nous allons supprimer tout cet investissement intégré ici et nous allons utiliser événements du moteur unitaire. Nous allons créer deux nouveaux événements d'unité publique seront affichés à l'écran, et l'autre à l'écran. OK. Maintenant, en gros, nous allons créer une entrée de déclenchement, ce sera entrée de déclenchement et nous allons vérifier si le collisionneur possède une étiquette d'activateur Ensuite, nous voulons appeler l'écran d'entrée. Ici. Invoquer. Pour quitter l'écran, nous voulons créer un vide privé lors du déclenchement de la sortie Nous voulons également vérifier le tag, mais ce sera thevator et nous voulons invoquer l'écran de sortie Nous pouvons enregistrer ce script activateur. Maintenant, nous devons configurer quelques éléments avant d'utiliser ce script. Dans Word Mover, je vais activer la vue du jeu, afin que nous puissions voir et activer le gadget, et je vais créer un nouvel objet de jeu vide Et cet objet de jeu vide, nous avons un planeur en forme de boîte Et aussi un corps rigide. Mais je vais régler le corps rigide sur cinématique, afin que nous puissions simplement activer les options cinématiques Je vais ajuster la longueur, la taille de notre collisionneur, à environ dix ou peut-être 12 Il couvre donc l'écran ici et règle le z sur une valeur très faible, disons 0,25 ici Je vais le déplacer pour qu' il soit au bord de notre écran supérieur ici. Faisons-le simplement. OK, peut-être par ici. Et je vais activer les options de déclenchement ici. Et je vais attribuer un nouveau tag à cet objet. Créons donc une nouvelle balise, et nous allons créer une balise activatrice, et l'autre est désactivatrice Donc, pour celui-ci, je vais le définir sur activateur et le renommer également Et je vais arrondir la valeur z à 11. Et je vais dupliquer cet objet de jeu, le renommer en activateur et changer son texte, l'activateur, et peut-être placer l'activateur et peut-être placer l'activateur ici en bas de notre écran ou le négatif 11 devrait faire l'affaire. OK. Ouais. Et je vais augmenter la taille du collimateur de l'activateur. Dirigeons-le simplement. Oui, comme ça. OK. Ou nous pouvons simplement définir zéro et l'axe de la taille à une très grande valeur, disons sept et pour l'activateur, il suffit de changer également le y27 Sauvegardons d'abord la scène. Et maintenant, nous pouvons activer l'ennemi de cette manière. Nous, par exemple, pour cela, je vais déplacer cette partie ici. Maintenant, nous pouvons désactiver la partie supérieure , nous pouvons également désactiver le boxeur et ajoutons le script. Désolé, en C, mais tapez le script activateur. Et à l'écran, je veux d'abord activer le box glider Je vais accéder au box glider et je vais l'activer. OK. Nous pouvons donc tirer sur la tourelle. Je souhaite également activer la partie supérieure de l'objet du jeu ici. Objet du jeu et réglage actif sur true, quelque chose comme ça, chaque fois que vous quittez notre écran, je veux que vous désactiviez à nouveau la partie supérieure. Si nous ne le détruisons pas, je veux désactiver la partie supérieure qu'il arrête de tirer sur notre vaisseau Suivons simplement cette partie supérieure et activons l'objet du jeu pour qu'il tombe ici, et appliquons simplement ce tore la même manière à notre tourelle ronde ici Je vais ajouter un script activateur. Nous allons mettre la partie supérieure en rouge pour qu'elle soit désactivée dès le départ, ainsi que notre bus Chaque fois qu'il entre sur notre écran, je veux d' abord activer notre collider sur true et je vais également activer la partie supérieure Et allez dans l' objet du jeu, choisissez la méthode active définie et vérifiez cela. Donc, chaque fois que nous quittons l'écran, nous devons le désactiver à nouveau. L'objet du jeu tombe comme ça, qui devrait faire l' affaire et appuyez souvent sur Appliquer pour enregistrer votre scène, et jouons. On peut le voir sur. Je vais désactiver la fonction Maximiser en cours de jeu ici afin que nous puissions voir notre vue de scène ici. Détruisons simplement le vaisseau ici. Comme vous pouvez le constater, l'ennemi est toujours activé. Il y a apparemment un problème. Comme le boxeur est désactivé et que nous ne pouvons pas réellement déclencher le script activateur, nous devons donc l'activer, mais nous devons désactiver notre système de santé Et chaque fois que notre joueur entre dans l'écran, nous devons activer ce système de santé pour qu'il le fasse glisser. Passez ensuite au point b du système de santé : nous sommes en train de changer cela. Également pour le jeu de tir à tourelle. Nous allons réactiver le box colador, mais nous allons modifier le système de santé pour l' activer et nous allons le désactiver dès le départ ici Vous appuyez pour enregistrer les titres et traiter missile, dans le mauvais arbre, je vais également appuyer sur Appliquer Disons ceci et essayons à nouveau. Pour l'instant, nous pouvons le détruire. Je suis désolée Il y a une erreur. Dans le cadre du système de santé. Une activation ? OK. Parce que c'est vide d'une manière ou d'une autre, nous devons renseigner une valeur par défaut. On peut juste régler ça sur Bullet. Il s'agit de la valeur par défaut. Donc, comme la plupart des systèmes de santé sont réglés sur l'ennemi, il suffit de définir cette valeur par défaut sur balle et cela ne s'appliquera que si l'ennemi à santé se trouve sur l'objet du joueur. OK. Essayons encore une fois. Il y a certaines choses que nous devons également modifier pour tous ces objets de jeu ennemis. Nous voulons désactiver la destruction , l'objet ne sera pas détruit. Cela créera donc une explosion, puis activera l' objet du jeu Flame. Alors, essayons encore une fois. Je vais désactiver le gadget ici. Voilà. Maintenant, chaque fois qu'il entre dans le jeu, l'objet est activé, mais essayons à nouveau. OK. Ouais. Voilà. Il y a toujours un problème ici. Oh, c'est écrit « tirer ». Nous devons maintenant définir un certain nombre de choses. Chaque fois que nous vainquons le défi, nous devons désactiver un certain nombre de choses. Passons à notre partie supérieure pour faire l'objet du deuxième événement ici. Pour le joueur, nous pouvons le désactiver. De plus, pour le tireur, nous pouvons faire glisser le tireur de missile un et le tireur de missiles, deux, et nous pouvons activer cet objet de jeu. OK. OK. Comme ça. Ouais. Appuyez sur Appliquer et cela devrait être sauvegardé, et nous devrions faire de même pour nos autres ennemis. Chaque fois que nous le détruisons, nous devons désactiver l'autre composant que nous avons ici. En gros, la partie supérieure, le script rotatif, qui consiste à regarder le joueur, désactive le joueur, et nous pouvons simplement désactiver l' objet du jeu de tir ici en l'activant. Passez à l'acte défini et à l'objet activé en cochant les options actives définies ici, et en appuyant sur Appliquer va de même pour notre course en rouge ici. Nous pouvons simplement désactiver le sorry. Nous pouvons désactiver la rotation, la rotation automatique ici, capable de tomber, et nous pouvons également désactiver les objets du jeu de tir ici Il suffit donc de sélectionner l'objet de tir parent. Puisque tous les objets du jeu de tir sont ceux qui se trouvent hors du jeu de tir ici, et qu'ils sont sous-actifs et activés, sauvegardez et je vais appuyer sur Supply. Mais je vais vérifier notre rotation ici. Script, nous avons déjà dit qu'il était désactivé. Nous voulons arrêter tout root. Cela devrait bien fonctionner. Conservez notre sceau ici. Rejouons-y et je vais détruire la première tourelle ici Comme vous pouvez le constater, une fois détruit, il cesse de tourner et ne tire plus. Et cet autre triton tire sur notre avion ici. Oui, on peut le détruire. Une fois que l'autre tourelle entre dans notre scène, elle est activée OK. Ils fonctionnent donc tous bien. Plus tard, nous créerons des récompenses ou des pièces chaque fois que nous détruirons l'ennemi. 29. 29 Réglage de pièces: OK. Continuons maintenant à créer nos pièces ici. En gros, nous devons d'abord créer un script pour créer les pièces afin de créer le mouvement des pièces. Faisons-le simplement. Accédez à notre dossier de scripts et à la transformation, je vais créer un nouveau script de mouvement. Ouvrons le script. Tester. Maintenant, c'est le chargement. Tout d'abord, nous devons déclarer quelques variables ici. Faisons-le simplement. Je vais ajouter un privé et ce sera notre force magnétique. Mais plus tard, nous allons changer cela et nous allons obtenir la valeur de notre force magnétique à partir d'un autre script. Nous devons modifier le début car nous allons utiliser un enable et awake sera exécuté avant un enable, mais start sera exécuté après un enable. C'est pourquoi je dois effectuer l'initialisation dans la fonction d'éveil, et nous allons d'abord récupérer notre composant rigide Nous utilisons donc le composant get comme avant, et nous allons créer une fonction non activée. Alors, sauvegardez ceci. Pour la fonction non activée, nous allons définir nos valeurs de mouvement ici, nos valeurs de mouvement du facteur trois En gros, nous allons définir nos valeurs de déplacement pour transformer la position. Donc, la position de cette pièce ici. Mais après cela, nous allons ajouter un vecteur aléatoire à l' intérieur de la sphère unitaire ici. Cela renvoie essentiellement un point aléatoire à l'intérieur de la sphère avec un rayon de un. Point aléatoire 0-1 à l'intérieur d'une sphère à partir de notre position. C'est pourquoi nous devons d'abord définir notre position ici. Nous copions la position de notre mouvement. Nous ajoutons notre vecteur ici avec une sphère aléatoire à l'intérieur, mais je vais le multiplier, désolé, multiplier cette valeur par notre vitesse ici. Nous pouvons obtenir une valeur aléatoire maximale au lieu d'une seule, rayon un, nous pouvons avoir un rayon de trois. Eh bien, cela dépend de nos valeurs ici. Ensuite, je vais mettre la valeur y à zéro. Nous voulons nous déplacer uniquement sur les plans x et z. Puisque nous allons utiliser un corps rigide, je vais modifier la mise à jour pour corriger la mise à jour. Désolé, je dois entrer cette fourchette ici, nous voulons créer une alerte entre la position de pièce et notre position aléatoire ici, mouvement ici, la valeur finale du mouvement. Nous allons l'introduire dans notre variable cible, tapez target. Nous pouvons utiliser la fonction de la classe des facteurs trois et définir notre position transformée pour la cible, ce sera notre mouvement pour la valeur flottante ici, nous allons utiliser la vitesse multipliée par notre temps Delta time fixe. Nous n'utiliserons qu' une valeur d'un float, et nous la multiplierons par notre temps de données fixe. Oui, nous avons d'abord besoin d'une référence à notre joueur. Tapons simplement Transform Player comme méthode de démarrage. Dans Start, nous allons d' abord trouver notre objet de jeu, mais en utilisant des objets fins avec tag et tag player, et nous allons le transformer. Nous avons une référence à notre joueur. Nous pouvons maintenant comparer notre distance à celle de notre joueur. Je vais créer un facteur pour position de notre joueur et le soustraire avec notre position de transformation Nous allons vérifier distance en magnitude carrée mais en valeur carrée Nous n' allons donc pas utiliser la racine carrée par rapport à la distance, nous allons donc simplement comparer la distance carrée. Si elle est inférieure à une valeur, disons met f power, par exemple, définissons celle-ci ici, et la puissance est de deux, car nous voulons comparer la valeur carrée à notre amplitude carrée, et si elle est inférieure ou égale, nous voulons déplacer notre pièce. Nous pouvons aimer notre cible, nous pouvons donc simplement copier cette diapositive ici. Ce sera la position de départ. C'est à chaque fois que notre joueur s'approche de notre pièce que nous voulons passer à sa position de joueur ici. Pour la valeur, fixez-la maintenant à un ou nous pouvons changer les aimants de deux et nous pouvons utiliser cette valeur. Temporairement, nous allons utiliser cette valeur ici. OK. Ensuite, nous allons déplacer notre position à l'aide du composant du corps rigide et nous allons régler sur cible pour la rotation Nous allons obtenir notre quaternion à partir de la valeur ulaire de notre vecteur cible ici Cela créera un mouvement de rotation sur notre pièce. Sauvegardons ça. Je vais créer notre pièce. Passons au modèle. Nous avons cet objet d'équipement. Je vais le diriger vers notre scène. Et nous pouvons utiliser le matériau de la pièce pour cet objet ou le diriger vers l'objet ici. OK. Et je vais ajouter une texture éclatante Alors c'est où ? Je pense que c'est sous Sprite et sous Bullet. Nous avons cette lueur ici. Nous pouvons simplement le définir comme un objet de jeu pour enfants et nous pouvons simplement mettre cette rotation à zéro. Redimensionnons simplement la taille de l'échelle et définissons la lueur sur la couleur jaune. Et nous pouvons diminuer notre valeur alpha pour que ce soit un peu transparent. Pour le matériau, je pense que nous avons un additif à base de sprite. avons-nous ? Oui, celui-ci, Sprite Additive Je vais m'en servir pour qu'il brille mieux. Pour la couleur, je pense qu'on peut simplement augmenter sa luminosité. Cela se démarque donc davantage et diminue peut-être la valeur métallique. Cela augmente la douceur ou la diminue afin que nous puissions mieux la voir Maintenant, une fois que nous aurons configuré notre objet Clo Gear ce seront les récompenses ou la pièce Ici, nous pouvons utiliser le mouvement des pièces pour actionner nos engrenages. OK. Maintenant, je vais le mettre dans la rubrique Friendly et utiliser cet équipement en tant que préfabriqué. Une fois que je l'aurai défini comme préhab, je supprimerai notre objet Gears de nos scènes Comme toujours, si nous voulons utiliser l'objet via le système de pulling, nous devons sélectionner le manager, ajouter de nouveaux membres, augmenter la taille de la dernière entrée, je vais le modifier pour l' adapter à notre pièce Et changez le montant de traction, peut-être que 220 devraient suffire. Maintenant, nous pouvons affronter nos ennemis. Par exemple, je vais sélectionner les ennemis au sol et le missile ici, et je peux ajouter un objet de création Je vais le déplacer ici. Je vais créer la pièce, mais à partir de l'actif et de celui-ci, nous avons configuré les préfabriqués et fixé le montant de création, peut-être cinq, et nous n'avons pas besoin de le détruire, en créons 25 Nous pouvons faire glisser un objet de jeu vers notre objet d'apparition ici, sous ce système, pour qu'il fasse également apparaître une explosion et une pièce. Maintenant, appuyons sur Appliquer. Cela mettra à jour notre préfet et enregistrera la scène. Essayons Désolé. Détruisons ça. Il y a une erreur. Aucune carrosserie rigide n'est attachée à notre équipement, nous devons donc sélectionner nos préfabriqués ici, et j'ai oublié d' ajouter une carrosserie rigide Je dois ajouter un corps rigide, désactiver l'utilisation de la gravité et activer la cinématique Et aussi, je dois ajouter un codeur de boîte et configurer ce codeur de boîte pour qu'il se déclenche De plus, nous devons définir l'étiquette ici, créer une nouvelle étiquette, et nous pouvons simplement créer une étiquette, sélectionner les engrenages et changer le type de pièce, enregistrer le projet. Chaque fois que vous modifiez les préfeps, enregistrez toujours le projet. Les modifications des préférences sont sécurisées, et nous allons réessayer. Maintenant, lorsque nous détruisons, il y a une pièce, mais l'orientation est fausse. Comme vous pouvez le voir, si nous nous en approchons, il commencera à se déplacer en suivant notre avion. Mais nous avons effectivement déclaré le script de ramassage. Mais changeons cette rotation à zéro, préferons et enregistrons-la à nouveau voir si cela résout le problème OK. OK. Non, il est toujours instancier et fait face dans la mauvaise direction. Je vais d' abord passer la scène et, sous le groupe de traction, je vais vérifier les vitesses et vérifier s' il est nécessaire de régler ce problème. C'est une solution assez simple en fait. Désolé, il y a un problème avec ma souris ici. Maintenant, nous devons effectuer une rotation nous pouvons simplement laisser ce zéro dans la rotation, mais je vais créer un nouvel objet de jeu vide, et ce seront les engrenages. Maillage, et nous pouvons ajouter un filtre de maillage et également un rendu de maillage. Et pour le filtre maillé, je vais rechercher notre objet de jeu. Est-ce du matériel ou je vais juste naviguer. Voici le cylindre ici. Et je vais le faire pivoter de 90 degrés, donc nous l'avons. Et pour les matériaux, je vais choisir le matériau de nos pièces. Et pour l'objet de jeu parent, je vais supprimer notre filtre de maillage ainsi que notre rendu de maillage. Pour le planeur en forme de boîte, je vais passer de la valeur y à z pour la taille ici, afin que nous puissions définir que nous pouvons copier ceci et nous pouvons le coller sur l'axe y et régler l'axe z sur 0,6, afin qu'il s'adapte à notre maillage ici, et nous allons faire pivoter la colle à 90 degrés sur l'axe X. Cela s'aligne donc et nous allons maintenant appliquer ces pré-mises à jour, et supprimer cette sauvegarde Et essayons encore une fois. OK. Voilà. Nous avons une pièce fonctionnelle, et chaque fois que nous nous en approchons, elle suit notre avion. OK. Continuons maintenant notre installation de pièces ici. Tout d'abord, je vais passer à notre script et dans la section gameplay, je vais créer un nouveau script magnétique. Et ce script ne doit contenir que quelques variables. Alors, où est ce script magnétique ? Je vais juste le rouvrir. Et je vais coller quelques variables fournies. Et nous allons supprimer notre mise à jour et commencer. En gros, nous allons créer une variable flottante, et la première est la puissance magnétique, qui aura pour attribut un zéro à cinq et une plage magnétique. Et ce sera la distance ou le seuil à partir duquel nos navires commenceront à influencer le mouvement des pièces. Sauvegardons ce script magnétique, nous allons le mettre sur notre lecteur. Donc, sous le mot mover, choisissez notre lecteur, ajoutez un composant et tapez un script magnétique, et nous aurons quelque chose comme ça Remplacez cette valeur par une valeur, disons deux. OK, enregistrez la scène. Nous devons maintenant modifier le mouvement de nos pièces. Ouvrons simplement le script de mouvement des pièces de notre session de gauche. Et maintenant, nous allons changer un certain nombre de choses ici. Tout d'abord, nous allons avoir besoin de notre script magnétique. Je vais appeler ça un aimant. Je vais trouver notre script magnétique dans notre page de départ. Cela changera notre référence de joueur. Tapez magnet, et nous allons utiliser une méthode fine de type objet et simplement renseigner notre type ici, tout comme un composant get, qui est le type de la variable, qui est un script et il trouvera celui que nous avons mis sur notre lecteur. Ceci est utile pour trouver un autre composant attaché à un autre objet du jeu. Mais s'il existe plusieurs scripts avec la même classe attachés à deux objets différents, il n'en choisira qu'un. La meilleure utilisation de cet objet raffiné est de trouver un autre composant qui ne soit disponible qu'une seule instance dans la scène. S'il y en a plus, alors nous ne devrions pas utiliser ce bel objet de type. OK. Maintenant que nous avons déjà fait référence à notre joueur via notre script magnétique, nous pouvons simplement saisir la position en tapant le mot-clé magnet ici et en ajoutant transform et cette position, puis nous trouverons que nous allons saisir la position du support magnétique, qui est notre joueur. Donc, il suffit de copier ce mot clé ici. Je vais remplacer notre position de joueur. OK. Et pour la force magnétique, nous allons obtenir notre puissance magnétique pour comparer la distance, nous allons obtenir la valeur de notre aimant et ce sera notre gamme d'aimants. Nous pouvons maintenant enregistrer le script et nous assurer qu'il est également sûr. Nous pouvons maintenant essayer le script. Pour le moment, notre valeur est et la plage l'est également. Jouons et voyons s' il y a une différence. Une fois que nous nous en approchons, comme vous pouvez le voir , il se déplace. Par exemple, si nous augmentons la portée ici à quatre, disons, et aussi la plage à quatre et la puissance à quatre, nous verrons un effet beaucoup plus fort. Ça, ça y sera. Nous devons maintenant créer un pick-up pour cette pièce ici. Créons maintenant le script de ramassage de pièces, et intégrons-le à notre gameplay. Créez un ramassage de pièces. Ouvrons ce script de collecte de pièces. Maintenant, nous pouvons simplement le supprimer pour l'utiliser puisque nous n'allons pas utiliser de less tableau ou de coroutine ici Je vais ajouter l'événement au moteur Unity et simplement supprimer la méthode de démarrage et de mise à jour. Et je vais créer un nouvel événement Unity public et je vais nommer cette variable pickup, et nous allons utiliser la méthode de déclenchement. Maintenant que nous avons déjà réglé nos pièces sur pièce, nous pouvons comparer la technologie en nous référant à l'autre collisionneur qui est entré en contact avec notre joueur ici Comme ce ramassage de pièces doit se trouver sur l'objet de jeu de notre joueur, nous pouvons taper immédiatement à l'aide de la balise de comparaison et vérifier son étiquette. Si l'autre objet qui entre en collision avec notre joueur est une pièce, nous voulons alors détruire cette pièce Mais nous devons utiliser notre pull manager, cette instance. Et nous pouvons simplement renvoyer l'objet du jeu, l'autre objet du jeu. Nous voulons détruire, mais nous voulons détruire en utilisant le gestionnaire de pool afin pouvoir utiliser la fonction return object. Je vais ajouter un commentaire ici et nous allons créer un compteur de pièces. Mais pour ces vidéos, nous allons laisser le script comme ceci, mais plus tard, nous allons ajouter du code ici et nous allons simplement mettre le script sur notre lecteur. Je vais donc ajouter notre ramassage de pièces. Ajoutez donc un composant, et je vais taper coin pick up. Et pour le ramassage des pièces, je vais ajouter une source de podio sur notre lecteur Et nous pouvons ajouter un événement ici sur notre ramassage de pièces, faire glisser le pointeur sur notre source audio et choisir le composant de la source audio, et nous pouvons choisir de lire le clip audio d' un plan ici. Je pense que nous avons du son ici, la vague de pièces. Et je vais économiser. Nous allons choisir le son de la pièce. Maintenant, si nous jouons à ce jeu, et chaque fois que nous détruisons l'ennemi, nous pouvons récupérer la pièce. Aucun n'est réellement le son qui ne joue pas. C'est du jeu, mais d'une manière ou d'une autre, ce n'est pas un jeu. Oh, désolée. J'ai oublié d'évoquer cet événement ici. Chaque fois que nous ramassons une pièce, nous devons l'invoquer en tapant ramassé, puis nous allons l'invoquer. Sauvegardons à nouveau le script et réessayons-le. Troy et ramasse la pièce. OK. Voilà. Chaque fois que nous ramassons la pièce, nous entendons le son de la pièce. Ainsi, le son sera un retour audio chaque fois que nous ramasserons une pièce. Cela donnera donc un bon feedback au joueur chaque fois que nous récupérerons la pièce. OK, je pense que c'est terminé et que nous pouvons passer à la vidéo suivante. 30. Mouvement de la caméra 30: OK. Nous allons donc maintenant créer un script de caméra pour créer un léger mouvement chaque fois qu' un joueur se déplace de gauche à droite. Nous voulons déplacer le toboggan de la caméra vers la gauche ou vers la droite en suivant le joueur. Cela ajoute donc plus de dynamisme. abord, dans la section World Mover, je vais sélectionner notre caméra ici et je vais vérifier la longueur, la valeur maximale et la valeur minimale Si je déplace le x vers la gauche ici, le maximum doit être inférieur à 1,4, la position minimale sur l'axe x puis le maximum doit être 1,3. Ce n'est pas centré en fait. 1.4 ça va toujours bien. Oui, 1.4 devrait convenir. OK. Nous avons donc ces valeurs. Créons notre script, passons au script, transformons et créons notre script de caméra. Je vais ouvrir notre script de caméra ici, et nous allons créer quelques variables. En gros, nous allons créer une transformation pour stocker notre joueur et un flotteur pour définir notre exposition minimale et maximale, ainsi que la vitesse de notre caméra et un arbre de facteurs de position privé, destiné à calculer notre mouvement. Nous allons faire tout cela dans notre dernière mise à jour Je vais donc remplacer notre mise à jour par mise à jour tardive, enregistrer cette copie et supprimer notre méthode de démarrage Et je pense que le fichier n'est pas ouvert correctement ici. Comme vous pouvez le voir ici, le texte du comportement est coloré en noir et doit être bleu. Je vais donc passer en revue nos actifs présents dans la solution et dans c transform. Je vais ajouter un article existant. Cela s'est produit souvent dans le studio officiel Vous pouvez donc ignorer ce processus si vous le souhaitez, transformer et je vais ajouter le script de caméra. Une fois que nous avons ajouté le script de caméra, il sera corrigé en un instant. Maintenant, le comportement du bono devient déjà bleu. J'ai une fonction de mise à jour tardive et la fonction de mise à jour tardive est également colorée en bleu ici. Je vais vérifier si notre joueur est nul, puis je vais renvoyer la méthode ici. Je vais éviter de faire le code ci-dessous qui est de revenir ici. Mais si un joueur nous a été assigné, nous utiliserons tout le code ci-dessous ici. abord, je vais définir la position pour transformer la position locale. La position locale de notre caméra, cette position sera la même que celle de notre caméra, mais nous allons modifier les valeurs x. Et ces valeurs seront reçues ou nous obtenons la valeur x à partir de la position de notre joueur ou je pense à la position locale du joueur X. D'accord. OK. Ouais. Je pense que c'est la position locale, puis nous voulons confirmer notre position x. Je vais remplacer notre position x en utilisant le clam mathématique. Pour la valeur, je vais changer le point de position x, donc c'est la position précédente, donc c'est la position précédente, mais nous voulons la fixer en utilisant la valeur x minimale et aussi la valeur x maximale Pour la valeur minimale, nous allons l'obtenir à partir de notre minimum x ici, et pour le maximum, nous allons l'obtenir à partir de notre valeur flottante ici. Une fois que nous avons calculé notre position, nous voulons l'appliquer à notre caméra. Ce type transforme la position locale en vecteur trois, l de notre position locale transformée en position. Pour la vitesse, nous allons utiliser cette vitesse ici, mais nous allons la multiplier par le temps delta. Sauvegardez ceci. Une fois que nous l'avons enregistré, nous pouvons simplement le mettre sur notre appareil photo. Sélectionnez notre caméra objet, et il suffit de l'appliquer à la caméra parent. Nous n'avons pas besoin de le placer sur notre objet au sol et de diriger notre script de caméra, et nous pouvons régler le minimum x à moins 1,4, la valeur que nous avons essayée auparavant. Pour la vitesse maximale, nous allons passer à 1.4 et placer objet du jeu directement sur le plan du joueur ici, et nous pourrons enregistrer le projet de scène Maintenant, essayons ceci. Je vais optimiser l'écran pendant le jeu afin que nous puissions mieux le voir clairement. Et voilà. Chaque fois que notre joueur se déplace vers la droite, vous pouvez voir que la caméra suit, mais seulement jusqu'à une certaine position, puis elle s'arrête. Nous pouvons donc créer un comportement dynamique agréable comme celui-ci. Notre script de caméra est terminé et nous pouvons passer à la vidéo suivante. OK. 31. 31 Intégration des patrons: OK. Bonjour. Dans cette vidéo, nous allons activer le bus de notre niveau que nous avons déjà conçu auparavant. Commençons donc et le navire-bus est désactivé depuis la dernière fois que nous l'avons installé. Activons-le simplement pour que nous puissions voir le bus. Et désolé, déplaçons abord la position Z pour peut-être contourner cette zone ici. OK. OK. Nous pouvons maintenant redéfinir le mouvement des nœuds Je vais déplacer le premier nœud ici, le deuxième nœud, le troisième et en fait le quatrième ici. Comme ça, je veux d' abord créer un nouvel objet de jeu sur les fourmis et ajouter un planeur Et ce sera notre activateur de bus. Renommons simplement cet activateur d'objet et mettons la position y à zéro. Déplacons-nous un peu ici, peut-être dans cette zone. Maintenant, nous pouvons simplement être parents de ce bus, afin qu'il soit déplacé ici. Je vais donc le déplacer légèrement ici. Cet objet tigame devrait donc se trouver autour des nœuds de départ ici Maintenant, nous pouvons simplement le diriger en tant qu' enfant de cet activateur de bus OK. La prochaine chose que nous devons faire est de créer un activateur. Désolé, je vais d'abord vérifier le script, ennemis. Activez le script. Désolée, j'ai oublié le nom. Ajoutons simplement un script. Et chaque fois qu'il apparaît à l'écran, nous voulons activer ce navire-bus. Désactivons-le, faisons-le glisser et définissons le jeu Sect true. Nous voulons également transmettre cet activateur de bus à notre joueur de monde. Faisons simplement glisser ce joueur mondial. Ou faites glisser cet objet de jeu ici, la transformation. Ensuite, nous pouvons simplement accéder à l'objet du jeu et le transformer. Nous pouvons changer son parent en utilisant la méthode set parent ici et en faisant glisser le world mover en tant que transformation parent Disons ceci. La prochaine chose que nous devons faire, c'est chaque fois que notre bus est détruit ou qu'il y a un décès ici. Nous devons détacher les enfants. Il suffit de faire glisser cet objet de jeu ici, transformer le navire-bus, transformer, nous pouvons utiliser la méthode des enfants détachés. En gros, chaque fois que le bus est vaincu, il arrête de suivre le qui se déplace et reste sur place. Sauvegardons la scène et essayons. Tout d'abord, je vais vérifier si des balises sont nécessaires pour définir l'activateur Non. Nous n'avons pas de tag ici, donc je pense que cela devrait fonctionner tout de suite. Essayons de jouer à ça. OK. OK. Vous pouvez sauver un humain secouru. Attendons juste un moment. Je pense que nous avons placé l'objet du jeu sur le bus trop loin de l'écran, mais ça va. Attendons de voir le bus ici. Je vais d'abord minimiser l' écran afin que nous puissions voir sur notre scène ce qui se passe réellement. En fait, nous sommes déjà entrés dans la zone où le bus est arrivé. OK. Oh, oui, voilà. Le bus est activé. Oui. Voilà. OK, il semble y avoir un problème avec le bus. Il est en fait en train de passer au Alors vérifions-le. Quoi ? OK. OK. Donc, d'une manière ou d'une autre, cette note est réinitialisée, donc je vais simplement supprimer toutes les notes ici. Et ajoutez des notes. Réajustons simplement les notes ici. Soit le nœud quatre et celui-ci est le troisième. C'est le second et celui-ci devrait être le premier. Jetons un coup d'œil à nos activateurs de bus là-bas si nous les voyons en haut Je vais avancer légèrement le tout pour que nous puissions rejoindre le bus plus rapidement. Je suis désolée. D'une manière ou d'une autre, il est remis à cette position. Et je vais vérifier quel est le problème, oui. OK. Donc oui, trouvez les problèmes. Et en gros, nous devons modifier notre script d'éditeur de notes Move. Nous devons ajouter une entrée qui, pour marquer chaque fois qu'un changement est apporté, nous devons marquer le s d. Ouvrons simplement notre script , notre éditeur de mouvement de notes ici. Et je vais probablement augmenter ce K un peu plus. Oui. Donc, ici, en gros, nous devons vérifier si les gangs ont changé. Créons donc simplement une instruction, puis tapons GI, puis modifions-le. Et il s'agit en fait d'un lingot que l'unité fournit chaque fois qu' il y a des changements dans l'IG Maintenant, nous devons utiliser l'utilitaire d'édition et définir la cible, ce sera notre source. Oui. Et nous devons également marquer les points sales, mais nous devons d'abord utiliser une bibliothèque Nous devons donc utiliser cet éditeur de gestion de scène. Assurez-vous donc de taper ceci et nous pourrons utiliser cet éditeur de gestion de scènes, et nous pourrons utiliser la méthode, marquer sale et obtenir notre scène en accédant à notre script source, objet et à la scène du jeu. T ou nous aurons la scène dans laquelle l' objet du jeu en fait partie. Par exemple, ce sera notre scène de jeu ici. Enregistrez ceci et nous pouvons simplement copier cette entrée et la coller ici également sur le CI et l'enregistrer. Maintenant, il va d'abord compiler, et quand par exemple, si je déplace ces nœuds ici, comme vous pouvez le voir, marquez la scène comme sale et nous pouvons le voir par ce signe astérisque dans la tête ici Alors, ajustons simplement notre position, et je vais vérifier où se trouve l'activateur ? Si l'activateur est là, je veux que le bus entre dans notre écran ici, car une fois que l'activateur est déclenché par cet activateur, l'activateur se trouve en haut de L'activateur du bus commencera à suivre. Nous allons tout de suite être parents de cet activateur. Nous devons nous assurer que notre navire-bus se déplace à une certaine distance d'environ huit ou dix unités par rapport à ce planeur Il se déplacera au milieu de l'écran ici, le bus Sélectionnons simplement le navire-bus. Je vais le déplacer ici et créer un mouvement en boucle. première note sera donc presque exactement à la même position que nos notes inférieures, et la troisième se trouvera par ici. OK. Donc oui. Et puis sauvegardez ceci. Et dans le cadre du mouvement des notes, je veux m'assurer qu'il aura air d'être noté dès la première note. Alors changez ceci, désolé, un ici. Sauvegardons à nouveau la scène. Maintenant, essayons ceci. Je suis désolée. OK. D'abord. Désolé, nous avons oublié de désactiver le bus. Nous devons d'abord désactiver le bus. Répétez la scène et essayons à nouveau. OK. Sauvons certaines personnes. Un humain a été secouru. Détruisons d' abord celui-ci et sauvons l'humain. OK. OK. Maintenant, nous pouvons voir que nous avons ce bus ici. Commencez à s'afficher et il devrait suivre l'écran lorsqu'il se déplace. Voilà. Nous avons un bus mais il retourne au premier nœud. Peut-être devons-nous probablement changer. Ils ont l'air de noter le second, le premier. C'est bon. Comme le mouvement fonctionne déjà, nous pouvons y remédier facilement. Essayons d'abord de vaincre ce bus et voir si le décès fonctionne. OK. Maintenant, nous pouvons vaincre le bus. Oui. Une fois le bus vaincu, il s'arrête. Et il restera sur place et nous pourrons nous faire passer par lui. Nous allons également avoir besoin de certaines choses ici. Je vais ajouter un nouvel événement, cet événement, et nous allons agrandir notre navire-bus ici, écrire le second et en gros , il contient un atome sur lequel est activé le tireur, des objets enfantins, il commence tirer des missiles. Mais le problème est que si nous détruisons tout de suite, si nous détruisons la deuxième tournée avant qu'elle ne soit terminée, où est-elle ? Désolé, pas ici. C'est faux. Je dois le désactiver. Donc, si nous détruisons la deuxième tourelle avant la fin de son déplacement, elle lancera un missile immédiatement lorsqu' elle aura fini de se missile immédiatement lorsqu' elle aura fini Nous devons nous assurer de désactiver le déplacement automatique ici. Créons simplement une nouvelle tourelle et faisons glisser la tourelle R. D'accord. D'accord Et allez dans l'auto et réglez-le sur Désactivé. Donc, en cochant la case totale sur les propriétés activées pour l'automobile, pneu vers la tourelle gauche, en choisissant également le même composant, qui doit être déplacé, et en cochant la case à bascule La prochaine chose dont nous avons besoin est de modifier notre script automov. Je vais donc l'ouvrir. Et ce que nous voulons faire, c'est démarrer la coroutine ici lorsque nous déclenchons ce mouvement, mais nous devons nous assurer qu'en cas de désactivation, nous devons arrêter toutes les coroutines dans ce composant à comportement mono Nous devons donc courir. Cela arrêtera donc cette coroutine si d'une manière ou d'une autre, les composants tommove désactivés par cet événement mortel sur notre deuxième ritive. Si elle est désactivée, cela arrêtera la coroutine et elle n' invoquera pas ce mouvement effectué. Si nous avons défini notre tomove, cela permettra au tireur de se déplacer nous avons défini notre tomove, cela permettra au notre tomove, cela permettra Cela annulera donc cette action, et aucun missile ne sera tiré. 32. 32 Intégration des vagues ennemies: Dans cette vidéo, nous allons intégrer les vagues ennemies dans la scène et configurer un activateur pour activer les vagues ennemies Maintenant, en élargissant les vagues ennemies, nous voulons activer l'avion ennemi afin de pouvoir voir l'instance de l'objet enfant et ses trajectoires se déplacer. Et c'est la courbe que nous avons définie dans la vidéo précédente. Et si nous sélectionnons le World Mover, vous pouvez voir que nous avons deux boîtes de collision, l'un à l'avant et l' autre à l' C'est pour et pour déjouer l'ennemi. Et ici, je vais ajuster la position de la vague ennemie. Il se trouve donc devant le collisionneur activateur, et nous pouvons simplement le remettre sur l'axe Z, ce qui devrait être une bonne position de départ Je vais réarranger un peu la courbe. Maintenant, nous voulons désactiver les vagues ennemies, puis ajouter un box collider à l'objet du jeu Enemy Waves. OK. Et pour le collidor de boîtes, nous voulons décaler la position du collecteur de boîtes Pour ce faire, nous pouvons simplement nettoyer la composante z sur les propriétés centrales ici, et en maintenant le clic gauche de la souris enfoncé et en faisant glisser le pointeur sur l'échelle Z, nous pouvons nettoyer la valeur et nous pouvons voir les modifications dans l'éditeur Et cela devrait être une bonne position pour le déclencheur. En gros, nous voulons décaler le collidor de la boîte manière à ce que, lorsque l'activateur ennemi déclenchera ce collisionneur, il activera cet Nous pouvons donc voir que l'ennemi va entrer dans l'écran. Sinon, s'il est trop proche de l'objet de jeu ennemi, une fois l'ennemi activé, nous verrons les avions ennemis surgir de nulle part. Nous voulons donc ajouter ce décalage pour éviter cela. Et nous devons également activer les options de déclenchement sous le composant Box Colder Ensuite, nous devons également ajouter un script activateur. Et nous voulons ajouter une entrée sur l' événement d'entrée de l'écran, puis diriger le script enim vers cet emplacement d'objet ici Et dans le menu déroulant sans fonction, nous voulons sélectionner mes vagues, puis sélectionner les propriétés activées par Bull, et nous voulons les activer en cochant la case. Et il y a quelques points que nous devons modifier avant de le tester. Allons donc dans le studio SO et ouvrons le script Enemy Wave. Et en gros, je veux remplacer la valeur du rendement par une valeur plus longue ici, dans le cadre de la routine de base de check combo. Et pour cela, nous pouvons probablement simplement utiliser le désactivé après avoir attendu le deuxième objet ici. Et en gros, désactivé après avoir été défini par la variable remove after, et nous l'avons défini sur 2 secondes par défaut, ce qui est assez court en fait. Mais si nous revenons à l'unité et que nous sélectionnons les vagues ennemies ici sous la composante des vagues ennemies. Vous voyez que nous avons défini la valeur remove after à 10 secondes. C'est assez long, en fait. Donc, si nous utilisons la désactivation de l' attente pour le deuxième objet, cela retardera la combinaison de vérification de 10 secondes avant d' exécuter le code. Dans la routine check combo C, nous pouvons simplement supprimer la nouvelle variable wait for seconds et la remplacer par la variable disable after. Et le fait est que nous nous appuyons sur le nombre d'enfants transformés pour vérifier si nous tuons tous les ennemis ou non, et nous devons également modifier le système de mort. Mais maintenant, nous pouvons simplement essayer ceci d'abord. Maintenant, pour tester cela, assurez-vous que l'objet de jeu ennemi ou l'objet enfant de la vague ennemie est désactivé, et nous devons également nous assurer que le composant script de la vague ennemie également désactivé sur l'objet de jeu de la vague ennemie. Et sauvegardons simplement la scène, et essayons ceci. Oui, une autre chose que nous devons modifier ici, c'est l'avion ennemi. Assurez-vous que la santé maximale est fixée à trois, car la valeur par défaut est de dix, et avec une santé de dix, il est assez difficile de tuer l'ennemi. Je le réduis donc à trois pour faciliter le test. Testons donc à nouveau cela et détruisons simplement ce sol, tournons les deux tourelles au sol, et maintenant vous voyez que les vagues ennemies entrent Essayons simplement de détruire toutes les vagues ennemies. Et voici, comme vous pouvez le constater nous éliminons toutes les vagues ennemies, mais nous avons toujours le message de perte de chaîne sous la console des bogues. Et ici, parce que chaque fois que nous tuons un avion ennemi, nous ne le détruisons pas, nous le détruisons simplement ou nous renvoyons l'objet du jeu dans le pool ennemi Le nombre d'enfants n'est donc jamais égal à zéro, et auparavant cela fonctionnait parce que nous détruisions l'objet du jeu. Et avec les modifications apportées à la destruction, cela ne fonctionne plus. Nous devons donc modifier le script de la vague ennemie. Nous devons donc apporter une légère modification au script du système de mort. Et ajoutons simplement un nouveau lingot public au système de mort, et je peux juste l'ajouter à côté du lingot de destruction, et rappelons-le pour le retirer Et nous voulons définir la valeur par défaut sur true. Et avec ce lingot défini sur true, nous n'avons pas besoin de modifier tous les autres objets du jeu qui utilisent ce script système, et il se comportera comme il se doit Chaque fois qu'il est détruit, il revient automatiquement dans le pool. Mais nous pouvons désactiver ces options pour l'objet que nous voulons détruire immédiatement. Et ici, dans l'instruction if destroy, nous voulons ajouter une autre instruction if, et nous voulons vérifier si le beg extrait de la valeur Si la valeur beg to pull est vraie, alors nous voulons exécuter cet objet de retour, et nous voulons ajouter une condition L, qui signifie que si le beg to pull est faux, nous voulons détruire l'objet immédiatement en utilisant la méthode destroy Nous pouvons simplement transmettre le mot-clé de l'objet du jeu ainsi que la durée, qui correspond à la destruction après les variables. Sauvegardons simplement le script, et revenons à Unity. Une fois le script compilé, si vous sélectionnez l'avion ennemi ici, vous verrez que le système de mort aura un nouveau champ appelé B à extraire. Et elle est activée par défaut. Et pour l'avion ennemi, l'enfant des vagues ennemies. Nous voulons désactiver cela. Ainsi, chaque fois que cet avion ou cet objet de jeu est détruit, il le détruit immédiatement, et il se retire de lui-même des vagues ennemies, et nous pouvons faire en sorte que la chaîne ou le combo de chèques fonctionnent comme prévu. Et pour les autres objets qui utilisent le système de mise à mort, tels que la balle, le sauvetage humain ou la tourelle au sol, nous pouvons simplement laisser les options « arrière pour tirer » activées Maintenant, essayons ceci. OK, maintenant les vagues ennemies entrent et nous pouvons simplement détruire. Et comme vous pouvez le voir ici, sous les vagues ennemies, il ne nous reste plus d'enfant. Et vous voyez que dans la console, le combo ennemi est imprimé. Alors maintenant, le script Enemy Wave fonctionne comme prévu. Maintenant, je vais le tester à nouveau, mais cette fois, essayons de ne pas tous les tuer. Je vais donc juste détruire l'un d'entre eux et laisser l'autre terminer son mouvement jusqu' à ce qu'ils soient tous désactivés. Comme vous pouvez le voir ici, parce que nous avons toujours un enfant sous les vagues ennemies. Nous avons ce message de perte de chaîne sur la console. Et c'est ainsi que nous configurons les vagues ennemies dans le niveau. Et en gros, si nous voulons en créer une autre instance, nous pouvons simplement copier les vagues ennemies ici et les déplacer vers une autre position, et nous pouvons simplement réajuster le mouvement des objets du jeu Et maintenant nous en avons fini avec l'intégration des vagues ennemies dans le niveau. Et nous pouvons passer à la leçon suivante. 33. 33 alimentations laser: OK, alors maintenant dans cette vidéo, nous allons créer l'arme laser. Ouais. Eh bien, j'ai préparé les illustrations pour le laser, et elles sont également incluses dans le package pour les projets de démarrage que vous pouvez télécharger dans le cadre de ce cours. Et ici, nous avons défini ces sprites un multiple en mode Sprite et également sur le type de maillage pour qu'il soit full rec Nous pouvons donc les empiler en utilisant les neuf fonctionnalités fournies avec l'Unit 2017. OK. Passons maintenant à la vue du dessus, passons à la vue du haut, et je vais m' assurer que c' est autographique pendant un moment. Et je vais diriger ce laser ici. Et je vais également faire en sorte que ce jeu soit au top ici. Et pour cet objet de jeu laser. Je vais d'abord créer un parent, donc c'est notre objet de jeu laser, gros, et je vais réinitialiser sa valeur. Et je vais créer ce laser zéro sprite, et je vais faire pivoter les lasers pour souligner zéro objet du jeu à 90 degrés ou à moins 90 degrés sur l'axe X. Donc, si je déplace ce laser ici, nous pouvons voir l'œuvre d'art, et je vais faire pivoter la vallée à 180 degrés Nous allons donc nous assurer que la partie arrondie se trouve au bas de la partie laser ici. Passons d'abord à l'échelle, nous allons remplacer le do par slicé. Et avec cela, nous pouvons augmenter sa taille comme ça, passer à la vue du jeu, et je vais passer à Nous allons passer au zéro sur l'axe z. Nous pouvons donc approximer la longueur de notre laser. La longueur de notre laser doit être aussi longue que celle de notre écran ici. Ouais. Comme ça, il devrait être autour de 19 et il devrait être d'environ deux ou deux, c'est trop gros. Je pense que 1,25 devrait être une bonne chose. Ici, nous allons changer le matériau en additif sprite Changeons la couleur pour des plages un peu jaunes comme celle-ci ici. Nous allons diminuer la taille alpha, nous pouvons dupliquer ce laser et nous pouvons le diminuer en fonction de la taille du rendu du sprite, faire fonctionner peut-être 0,6 ici Ouais. Et augmenter la valeur alpha ? OK. Nous pouvons également dupliquer celui-ci à nouveau. Mais cette fois, nous allons augmenter la largeur, mais il y aura aussi un sprite différent. Je vais choisir le sprite et nous allons choisir le sprite laser ici Je vais agrandir la taille. Cela devrait être le bord lumineux, et je vais le diminuer en alpha Ce ne sera pas si dur, cela peut également diminuer la valeur ici. D'une certaine manière, c'est toujours aussi fort, je pense. Utilisons que la version tuile de la tuile est une bonne tranche ou je vais changer la valeur du matériau en augmenter couleur, le matériau devrait être celui-ci et réduire l'opacité Je pense que nous devrions utiliser l'additif, donc je vais choisir l'additif, mais je vais juste charger la valeur alpha ici. Nous avons maintenant cet objet laser. En gros, cet objet laser, si je règle l'ajustement. Notre laser devrait partir de ce point. Je vais déplacer cet axe, mais je vais définir sa valeur à 9,5. Si nous passons au laser ici, commencez vraiment par le début, assurez-vous que la longueur est de 19, donc je la divise par moitié, l'axe z est 9,5. Et nous allons ajouter un nouveau système de particules, où est-il ? C' est notre particule. Nous voulons créer des sortes d' étincelles dès le départ. Cela devrait donc faire l'affaire, et passons la vue à trois. Je devrais le faire, la direction est déjà correcte. Nous allons changer Non, c'est une émission. Cela devrait être une émission, mais nous allons régler l'angle à une valeur wer ici, 45, par exemple, Lifetime, nous allons le raccourcir d' environ 0,17 75 secondes. Et vitesse de démarrage. La vitesse doit être très élevée. Mais si nous changeons la vitesse et que nous devons réduire la durée de vie nous pouvons également augmenter les émissions à 25 %. Ça déborde. Soulevez-le ici et modifions-le sa valeur, commencez la couleur pour organiser également la couleur ici Mais je vais le diminuer. OK. Et une autre chose que nous devrions faire est de privilégier la taille au cours de la durée de vie. Nous voulons donc nous assurer que la particule devient plus petite, comme ça. Ouais. Et nous voulons accéder au rendu et le transformer mode de rendu en un panneau d'affichage extensible Nous avons donc quelque chose comme ça. OK. Nous avons donc un tel effet d'éclatement. Mais changeons l'angle à une valeur plus grande et augmentons simplement l'émission à 50. La dernière chose dont nous avons besoin est de changer son matériau pour un matériau qui ajoute un additif à ce cercle. Nous devons créer un nouveau matériau. Passons donc au matériel. Et je vais me rendre à l'explosion ici, changer et créer un nouveau matériau. Et ce sera le sursaut laser. Et changez le type de matériau Ser Birds shader ou en additif de particules, et je vais choisir la particule par défaut ici Quelque chose comme ça. Et faisons glisser ce matériau vers notre particule ici. Nous avons une particule lisse mais avec un comportement additif, et nous allons désactiver Play On. Mais nous allons conserver les options en boucle et simplement fixer la durée à une OK. Je vais donc renommer la particule en agitateurs. Nous avons maintenant cette pièce laser. Nous voulons maintenant associer ce laser à notre objet de jeu ici. Désolé, notre objet de jeu pour joueurs. Passons directement à l' enfant de notre objet de jeu. Mettons sa position à zéro, et je vais déplacer ce joueur. Notre joueur est zéro, zéro, zéro, je m'adresse à notre joueur ici. Je pense que je vais déplacer ça ici. Mais en fait, cela correspond à notre joueur. Je ne sais pas pourquoi il fait ça, je vais déplacer notre laser pour qu'il soit devant notre joueur. Et le centre. Nous devons ajouter un planeur à notre laser ici. Ajoutons simplement cette boîte, un planeur normal, et réglons le déclencheur Je vais également ajouter un corps, mais celui-ci au corps, mais celui-ci au corps, nous allons le régler ischematic et désactiver l'utilisation de la gravité, donc il ne fera rien Redimensionnons notre planeur pour qu'il s'adapte à notre laser Et je vais le faire glisser jusqu'au bout de notre ligne laser, quelque chose comme ça. Je vais enregistrer la scène ici. Nous devons maintenant créer des scripts pour créer le comportement que nous voulons avec ce laser. Accédez au script sur les armes. Je vais créer un nouveau script que nous appellerons script laser. Ouvrons maintenant le script. Je vais d'abord augmenter la taille. Je peux voir clairement. Maintenant, nous devons créer quelques variables et j'ai déjà fourni un copier-coller à partir du script précédent et je vais le coller ici En gros, nous avons besoin de quelques flotteurs ici. Nous avons deux flottants et en gros, le premier concerne la durée du laser et la durée pendant laquelle le laser reste chaque fois que nous le filmons et la vitesse de l'animation. Cette vitesse d'animation correspond la vitesse de mise à l'échelle de zéro à la valeur normale, à l'échelle jusqu'au Ici, vous pouvez voir la valeur de un sur l'échelle ici. Nous allons donc redimensionner le laser et nous avons besoin d'une variable à bulon, permet de basculer chaque fois que nous tournons le laser et nous voulons que ce bulon soit chaque fois que nous tournons le laser et nous voulons que ce bulon Et pour la dernière variable que nous devons utiliser, c'est le poids du deuxième type. Nous allons l'utiliser pendant toute la durée de la routine. OK. Au début, nous allons définir la durée de notre coroutine laser, et il s'agira d'un nouveau poids pour les secondes, mais la valeur que nous obtiendrons sera la valeur de la durée du laser Et la sécurité et maintenant nous allons créer une coroutine pour lancer un laser Tapons simplement able, mais ce devrait être un énumérateur et appelons simplement cette méthode Fire Chaque fois que nous lançons le laser, nous voulons activer le tir . Et nous allons faire une boucle sur l' échelle du laser, nous allons vérifier si l'échelle est déjà égale ou supérieure l'échelle cible, puis nous voulons arrêter. Donc, tant que nous transformons l'échelle locale. Magnitude ou nous pouvons simplement utiliser la magnitude carrée, qui signifie que plus de performance est inférieure à un, notre valeur cible, qui est une échelle de un. Nous voulons redimensionner l'objet du jeu laser. Nous voulons définir une échelle locale pour utiliser l' arbre vectoriel vers lequel se déplacer. L'animation doit être linéaire ou nous pouvons essayer de l'utiliser voir si cela fonctionne mieux. Si nous pouvons utiliser le moward, nous passerons de notre échelle locale à l'échelle cible Les ventes cibles devraient être le vecteur 31 et la vitesse sera notre vitesse M multipliée par le temps. Et nous allons passer à l'action. Avant de redimensionner cela, nous voulons définir l'échelle locale de transformation sur un vecteur 30. OK. Et maintenant, nous avons cette animation de mise à l'échelle. Nous voulons maintenant revenir, je pense, à la durée du laser. Donc, si la durée du laser est de trois, il conservera cet état pendant 3 secondes et passera à la ligne suivante ici. Et nous voulons faire en sorte que chaque fois que nous le sommes, nous sortons de cette boucle. Cette boucle de fichier, nous voulons nous assurer que l'échelle de notre objet est le vecteur 31. Nous passons donc à un si la valeur est inférieure ou supérieure au vecteur 31 Et nous allons suivre cette ligne ici après avoir retardé le code indiquant le nombre de secondes de configuration de la porte laser en étain Nous allons le coller ici et nous voulons nous assurer que ce chiffre doit être supérieur à 0,01 Si l'asticot carré est toujours supérieur à zéro, disons zéro, alors nous voulons le ramener à notre valeur zéro ici Faites passer le facteur un à zéro ici. Et une fois que c'est terminé, nous voulons le remettre à zéro, et nous voulons régler le tir du laser sur False. Ouais. Et maintenant, nous devons créer une fonction unrigger enter. Faisons-le simplement. Ici, nous allons vérifier si autre étiquette comparée est ou l'étiquette de santé de l'ennemi, puis nous voulons endommager cet objet de jeu. Comme nous savons que la plupart des ennemis ou tous les ennemis script de système de santé sont associés à un script de système de santé, nous allons créer un type de système de santé variable temporaire et nous allons récupérer dans l' autre composant get, qui est la classe que nous recherchons pour le système de santé. Nous allons faire en sorte que si la santé n'est pas vraie ou ne l'est pas, nous allons subir des dégâts. Il ne reste plus qu'à subir les dégâts. Pour cet exemple, fixons simplement cette valeur à 100, il s'agit donc d'une valeur très forte ici. Plus tard, nous allons modifier cette valeur. Maintenant que nous avons déjà cette routine de base et ce déclencheur, nous devons le déclencher lors de la mise à jour. À cette fin de test, nous allons utiliser un clavier, mais plus tard, nous allons créer une interface pour celui-ci. Dans ce cas, utilisons simplement la touche vers le bas, et je vais utiliser le code clé L pour le laser. Je vais m'assurer que c'est aussi laser à feu, pas un laser à feu. Le tir laser est faux. Chaque fois que le fichier laser est faux et que nous appuyons sur L sur le clavier, nous voulons lancer ou démarrer la coroutine laser à tir ici OK. Pour démarrer le courtin comme le rail habituel, tapez start routine et tapez la méthode que nous voulons exécuter ici, tir laser, laser et dites ceci Maintenant, nous pouvons simplement le mettre sur notre objet de jeu laser. Script laser. Et nous allons mettre sa valeur d' échelle à zéro. OK. Disons ceci et essayons. Je vais déplacer le vaisseau ici et essayer de tirer au laser. Voilà. Nous tirons au laser et détruisons tous les objets du jeu qui sont tombés en contact avec notre laser Reste-t-il un ennemi ? Ici. OK. Il y a un ennemi. Je vais à nouveau tirer au laser. Voilà. Pour ce qui est de l'animation, ça ne semble pas très beau. Remplaçons le MP à une valeur plus élevée. Disons dix et voyons si cela fonctionne mieux. Ouais. OK, alors. Voilà. Ouais. Voici notre système laser. Désolée. Une chose que nous devons faire, c'est que j'ai oublié. Nous devons créer un nouveau système de particules, en faisant référence à celui-ci. Créons simplement un système. Ce devraient être les effets de vers. Enregistrez ceci Dans notre routine, chaque fois que nous démarrons le laser, nous voulons créer un effet de particules ici. Shore devrait aller bien. Il suffit de taper les effets de couplet, jouer Ensuite, ici, d' arrêter les effets de couplet. Tapez l'effet de couplet et arrêtez. Nous commençons à jouer ici et à commencer les animations, puis nous voulons arrêter les effets de particules. Nous devons également créer une autre variable de collision privée. Et on l'appellera comme ça. Nous devons saisir ce collisionneur car nous devons le désactiver chaque fois que le laser est inactif Nous devons donc d'abord obtenir le composant du collisionneur Et ici, dans notre routine de base, au démarrage, nous voulons que vous la désactiviez. Il suffit donc de taper call that enabled, et cela définira le statut activé. Et si nous le définissons sur false, cela le désactivera, et je vais copier cette ligne ici. Et collons-le ici et définissons-le t car à la fin, nous voulons le définir comme faux. OK. Ainsi, il ne tuera pas accidentellement les ennemis qui sont entrés en contact avec notre collisionneur Même si notre échelle est probablement nulle , la collision sera toujours là, et elle détruira l' ennemi involontairement Nous devons donc désactiver chaque fois que nous ne tirons pas et ne l'activer que lorsque nous tirons. Et maintenant, nous devons développer notre objet de jeu de particules. Et une fois le script mis à jour, nous devons placer l'objet du jeu dans les emplacements du système de particules ici et l'enregistrer à nouveau Rejouons-y et voyons le résultat : désolé, j'ai appuyé sur le mauvais clavier et voilà Nous avons un effet de vers à l'avant de notre système de particules. OK. Et nous allons essayer de tirer sur l'autre ennemi ici. Sauvez d'abord. Un humain a été secouru. Essayons simplement. Ouais. OK. Mais nous pouvons tirer un nombre limité de lasers, mais nous allons régler ce problème plus tard. OK. Je pense que cela devrait convenir à notre laser. Bien entendu, nous allons modifier ce script ultérieurement pour avoir des limites et un niveau de résistance en fonction de nos améliorations laser OK, nous pouvons passer à la vidéo suivante. 34. 34 méga bombe: OK, donc oui, dans cette vidéo, nous allons continuer notre système d'armes, et cette fois nous allons créer les fonctionnalités des méga-bombes. Alors, commençons simplement à le faire. Maintenant, nous allons passer à notre joueur. Et voici le système laser, et je vais créer un nouvel objet de jeu vide. Et cette fois, ce sera la méga-bombe. Donc, la première chose à faire est de créer un système de particules. Je vais donc créer un nouveau système de particules, et ce système de particules sera le fruit de ce mégabome, et nous devons ajuster ce système de particules abord, nous devons ramener l'émission à zéro, je crois, et nous allons utiliser une rafale, et peut-être que le nombre fixé à cinq serait suffisant. De plus, pour la forme, nous allons la changer en sphère, et je veux changer le rayon en un très petit rayon. Et l'épaisseur est également très petite, 20. Nous avons donc des particules qui commencent à émettre par le milieu. Et je veux aussi désactiver la vitesse. Donc ici, sous notre vitesse de départ, réglez ce zéro pour que la particule ne bouge pas. Cela reste. Si vous pouvez voir qu'il y a une légère lumière blanche, c'est une particule Actuellement, la durée de vie est fixée à cinq. Je veux que vous le mettiez à une très petite valeur, et peut-être pourrions-nous le régler à 2 secondes. Et pour les durées, je vais également réduire la taille ici d'environ 2 secondes à peut-être 3 secondes , afin que nous puissions voir les objets clignotants Et fixons la taille de départ à une très grande valeur. Donc, si je pars du haut, je vais définir la taille de départ sur un très gros, je veux voir notre rayon ici, vous pouvez voir ici que nous avons une grille et je veux m'assurer que notre particule de base a taille d'environ deux par deux par rapport à cette grille ici. Remplaçons les deux en quatre et/ou peut-être deux. Oui, comme ça. Et nous déterminerons la taille de départ à partir du script, en fonction de la force de notre méga-bom, mais je pense que la valeur de départ quatre devrait être bonne Donc oui, on peut utiliser ça. Nous allons maintenant créer une animation. Euh, je vais mettre la particule ci-dessous ici. Donc, si on le voit du haut. Oui, il devrait être en dessous de notre vaisseau, et maintenant nous pouvons créer une animation. Je vais donc utiliser cette taille tout au long de ma vie. Et avec cette taille au fil de la durée de vie, nous pouvons créer une animation en utilisant une courbe comme celle-ci. Et maintenant, cela commence à zéro, la taille jusqu'à notre taille maximale, notre taille de départ que nous assignons ici, qui est quatre. Je vais changer cette valeur en 02, donc je vais sélectionner les nœuds ici et régler l'heure sur un, mais la valeur sur zéro, donc la courbe ressemblera à ceci, et je vais ajouter une nouvelle clé ici. Et pour cette clé, je vais définir le temps 20,5 et la valeur un Je vais ajuster la tangente que nous avons ici. Quelque chose comme ça. Donc, si nous jouons à ce jeu, nous pouvons voir que notre bombe est en train de s'étendre puis de rétrécir Mais je pense que la durée de vie , l'âge ou la durée de vie de la particule sont trop lents Je vais donc régler ce paramètre sur un, et voyons voir. OK, c'est mieux. Nous allons donc désactiver la boucle, afin qu'elle ne se boucle pas et nous voulons également désactiver le jeu au réveil, et peut-être que nous pouvons ajuster la couleur, donc Nous pouvons utiliser le dégradé, je pense , utilisons simplement le dégradé. Pour le dégradé, nous voulons partir d' une couleur vive et estomper la bonne couleur. Donc, si on y joue. OK. Nous Cela n'affecte pas cela. Changeons simplement cette couleur petro. Celle que nous voulons changer est en fait la couleur au fil du temps. Je vais utiliser celui-ci ou celui-ci. Je vais ajouter un nouvel alpha au milieu. La couleur du haut correspond en fait aux valeurs Alpha, et celle du dessous est la couleur Ici, nous allons régler l'Alpha 20 ajouter un nouvel Alpha ici et le redéfinir 120. Si nous jouons à ce jeu, nous devrions avoir un bel effet de décoloration comme celui-ci Bien sûr, vous pouvez devenir fou avec les paramètres de particules, si vous le souhaitez. Ce n'est pas très difficile. Vérifiez simplement les paramètres. Mais dans ce but, nous allons utiliser ces paramètres ici. Et aussi, je vais changer l'alpha, l'alpha de base, à une valeur inférieure, par exemple 200. Nous avons donc une légère transparence. OK, quelque chose comme ça. OK. Créons maintenant le script. Et je vais renommer cet objet particulaire. Créons donc un nouveau script CSO, et appelons-le méga-script Et ouvrons-le. Donc, en gros, nous devons définir quelques variables et je vais coller le code que j'ai déjà préparé. En gros, nous devons déclarer deux variables flottantes. Le premier est le rayon , le second les dégâts. Et pour les dégâts. Plus tard, nous allons changer cela chaque fois que nous effectuerons des mises à niveau. Actuellement, nous allons la définir comme valeur par défaut, soit deux pour le rayon et cinq pour les dégâts. Et la dernière variable est un système de particules, et nous allons connecter notre système de particules cet emplacement de variable ici dans l'inspecteur. Et chaque fois que nous commençons, nous voulons ajuster la taille des particules. Ce serait donc notre variable particulaire ici, la Box, et ce sera le déploiement principal Donc, si je le lance comme ça, cela signifie que nous accédons à ce déploiement principal Et si nous voulons accéder à l'émission ici, au déploiement des émissions, nous devons taper l'émission Et si nous retournons, vous pouvez voir que le résultat indique que nous accédons au modèle d'émission du système de particules. Donc, si nous voulons accéder à la couleur sur une durée de vie, alors nous accédons à la couleur du système de particules d'un modèle à durée de vie, nous pouvons placer ce module dans une variable arbitraire ou générique, utilisant simplement le mot-clé far et particule main et nous pouvons le placer ici Je vais accéder à la variable principale et je vais modifier la taille en accédant à notre variable nouvellement créée dans start, et nous avons ici la taille de départ. Et je vais choisir la taille de l'étoile. Puisque c'est le cas, je pense que c'est quatre par défaut. Je vais donc m'assurer que notre rayon est la taille de notre rayon multipliée par notre valeur par défaut ici. Oh je pense ou nous pouvons simplement obtenir le Je pense que nous pouvons obtenir la valeur de la constante. Je pense que nous pouvons peut-être utiliser cette constante ici. En gros, cela renverra la valeur que nous avons actuellement. Puisque nous utilisons une constante, vous pouvez le voir ici. Si vous utilisez une courbe, nous devons accéder aux autres propriétés du script, mais nous utilisons une constante. Plus tard, si nous modifions la valeur par défaut ici, elle sera appliquée à cette ligne ici. Cela suivra toujours notre taille de particules. Sauvegardons ça. Je vais maintenant créer une nouvelle variable publique appelée deploy bomb. Et sauvegardons d'abord cette particule. Désolée. Sauvegardons le script. Donc, ce que nous voulons faire, c'est essentiellement que vous imprimiez d'abord un débogage Mettons donc simplement la bombe à messages déployée ici sous l'imprimé. Et nous allons jouer les effets de particules. Je vais donc taper la variable de particule ici. Nous n'avons aucune déclaration de variable et il suffit de taper ce play Nous déclenchons donc la particule two play one chaque fois que cette méthode est exécutée. Nous allons maintenant créer un réseau de collideurs. Et appelons-le Colliders. Et nous allons utiliser une méthode physique, qui est la lance superposée sort Overlap renvoie un tableau dans lequel tous les collideurs se touchent à l'intérieur de la lance que nous déclarons ici Donc, avec la méthode des sphères superposées, nous devons insérer notre position d'origine, qui sera la position de notre vaisseau ou cet objet de jeu sur lequel nous avons ce mégabbscri puisque l'objet du jeu est attaché au joueur, afin que nous puissions utiliser la Et le prochain sera un rayon. Nous avons maintenant ce rayon par défaut de Q, et utilisons ce rayon. Mais je pense que c'est très faible parce que c'est en unités. Nous pourrons le modifier ultérieurement dans l'inspecteur. Cela récupérera donc tous les objets du jeu qui ou se trouvent à l'intérieur de cette sphère de superposition lorsque nous exécuterons ce code ici. Si l'objet du jeu possède des collideurs et qu'il se trouve à l'intérieur de notre sphère de superposition, il sera saisi par ce réseau Et maintenant, nous pouvons boucler le tableau. Je vais donc créer une déclaration à quatre niveaux. Et au cas où vous ne sauriez pas comment taper les quatre déclarations tout de suite automatiquement , tapez quatre et appuyez deux fois sur Tap dans un studio physique, et je pense que cela fonctionne également pour le développement de motos. Appuyez deux fois sur une bande, et nous avons cette instruction à quatre boucles par défaut Je vais ouvrir notre réseau de collideurs, et nous allons accéder à taille de ses membres en accédant aux propriétés de longueur Donc et maintenant, nous allons effectuer tous les calculs des dégâts à l'intérieur de cette boucle ici. Tout d'abord, nous allons créer un nouveau système de santé temporaire. Nommons donc ce système de santé, nous allons vérifier si l'un des collisionneurs, qui est l'indice de, et nous allons regarder cette valeur ici de zéro à la longueur maximale de nos collisionneurs, nous voulons obtenir le système de santé des composants OK. Et nous voulons vérifier si le système de santé n'est pas nul, et nous voulons nous assurer que nos planeurs, selon l'indice actuel, portent la mention « ennemi Donc, si l' objet du jeu est un ennemi et qu'il possède un système de santé, alors nous voulons lui infliger des dégâts Vérifie l'étiquette que nous avons ici pour les vagues ennemies et l'avion ennemi. OK, désolé, nous avons ce tag. Réglons donc simplement l'avion ennemi sur ennemi, et je vais examiner les autres ennemis au sol que nous avons ici. OK. La plupart d'entre eux équipés de box glider sont actuellement équipés de technologies Je vais donc sélectionner tous les ennemis terrestres et changer la technologie en ennemi. Ou y en a-t-il un autre. Oui, je pense que ça devrait suffire. Et pour le bus, il s'agit de l'activateur et du navire-bus OK, ils devraient donc avoir des étiquettes d'ennemis. Le bus principal. Et pour chacune des parties où se trouve le collisionneur, vous devez également définir cet ennemi comme ennemi et la deuxième tourelle doit également définir cet ennemi. Ouais. OK. Il s'agit du modèle du navire et le collidor de base se trouve dans l'objet du navire-bus Nous pouvons maintenant leur infliger des dégâts. Il suffit d'accéder au système de santé, puis de subir des dégâts, et pour les dégâts, nous pouvons appliquer cette valeur de dégâts ici. Et nous pouvons créer un système de débogage, lequel nous pouvons vérifier lequel est touché par notre bombe, accéder au nom et concaténer la chaîne touchée par la bombe. Sauvegardez ceci. Maintenant, nous devons attendre pour déclencher cette bombe et pour le moment nous pouvons simplement utiliser une entrée. Mais plus tard, nous allons créer une interface utilisateur pour cela, comme celle de Sky Force. Appuyez sur la touche vers le bas. Et je suis désolée, pour le code clé, je vais utiliser la lettre B de notre clavier pour le déclencher et lancer la bombe de déploiement ici. OK. Enregistrez ce script, et je vais supprimer ces deux bibliothèques que nous n'utilisons pas pour le rendre plus optimisé Revenons à l'unité. Maintenant, si nous élargissons nouveau le World Mover et que nous sélectionnons notre joueur, ajoutez le méga bobcrip à notre jeu d' objets Mega Bomb Ajoutez cela et ajoutez les effets de bombe. Mais je pense que la réduction est trop faible actuellement, donc nous pouvons simplement changer cela Je vais probablement consulter la grille ici. OK. Peut-être cinq ou un, deux, trois, quatre, cinq, six. Réglons d'abord sept, et pour les dégâts, fixons-le à une valeur beaucoup plus élevée, soit 25. Essayons ça. OK. OK. Je vais essayer de les déployer. Comme vous pouvez le voir ici. OK. Nous détruisons directement l'ennemi, mais d'une manière ou d'une autre, notre particule ne change pas de taille. La taille de départ est modifiée à 28. Nous devrions donc en avoir une grosse, comme vous pouvez le voir sur la scène, nous en avons une très grosse, mais du point de vue du jeu, il n'y a pas de grosse explosion. Je pense donc que cela est lié au moteur de rendu ici, et ici nous avons la taille maximale des particules de 20,5, changeons simplement cela, disons Peut-être un, et je vais déplacer l' ordre par couche à 100 D'accord, nous avons maintenant une particule beaucoup plus grosse, mais nous ne pouvons toujours pas couvrir l'écran. Je vais donc augmenter cette taille maximale de particules. Disons 24 et voyons comment cela fonctionne et nous pouvons envoyer du spam à la bombe dès maintenant, c'est bien mieux, comme vous pouvez le voir ici, si je déploie à nouveau la bombe, nous détruirons Yeah. Je pense donc que nous devons augmenter le rayon ainsi que la valeur des dégâts. Mais oui, il faut détruire deux fois. Et voyons simplement combien de points de vie nous avons pour l'ennemi au sol, la fuite. Il est dix heures. Eh bien, peut-être le premier, il n'entre pas en contact avec notre sphère de chevauchement ici. Bien sûr, nous allons modifier cette bombe plus tard lorsque nous incorporerons menu de l'interface utilisateur pour déclencher cette bombe ici Mais oui, je pense qu'ils devraient le faire pour notre système de méga-bombes. 35. 35 boucliers power-ups: Dans cette vidéo, nous allons travailler sur le système de protection, et nous avons créé les lasers et le mégabm dans la vidéo précédente Maintenant, sélectionnons l'objet du jeu du joueur. Créons ensuite le nouvel objet de jeu vide en cliquant avec le bouton droit de la souris sur l'objet de jeu du joueur. Et nous pouvons renommer cet objet du jeu en bouclier. Et pour l'objet du jeu Shield, créons une lance en tant qu' secondaire de cet objet du jeu Shield Et maintenant, comme vous pouvez le voir, nous avons cette sphère blanche au milieu de notre avion. Et pour ce qui est de la lance, transformons la couche en objet aérien, afin qu'elle soit rendue sur le dessus Et si vous définissez la lance par défaut, vous verrez que dans certains jeux, la lance est rendue sous le plan, donc ce n'est pas ce que nous voulons, et redéfinissons la couche de lance Ensuite, nous devons redimensionner l'objet du jeu Spear. Et je l'ai déjà testé, donc je vais régler l'échelle 24 sur les trois axes. Ensuite, nous voulons créer un matériau. Donc, dans le dossier des matériaux, créons un nouveau matériau. Et renommons simplement le matériau en bouclier. Et pour l'albédo ou la couleur, nous pouvons sélectionner une texture, et je vais choisir une texture de bruit ici Et appliquons ce matériau à l'objet du jeu Spear en le faisant glisser vers l' objet du jeu dans la scène Et ajustons simplement le carrelage à trois par trois. Nous avons donc un bruit plus faible sur l'objet du jeu. Et passons au mode de rendu transparent. Et puis je veux également teinter la couleur de l'albédo en orange clair Et diminuons la valeur alpha à 75. Nous avons un matériau transparent. Ensuite, nous voulons activer l'option d'émission, et je vais changer la couleur d'émission en un orange plus foncé, comme ceci Je pense que cela devrait convenir l'objet du jeu Shield et à son matériel. Ensuite, nous devons créer le script pour gérer le bouclier. Allons dans le dossier des scripts et dans le dossier des armes, et créons un nouveau script de boutique, que nous pouvons simplement appeler script de bouclier. Ensuite, ouvrons le script. Et dans ce script, nous devons déclarer quelques variables. Et le premier sera une sorte de flotteur, que nous pouvons simplement appeler durée du bouclier. Et le prochain sera une sorte d'objet de jeu que nous pouvons simplement appeler des effets de frappe. Et nous allons placer les préférences de Sparks sous cette variable d'objet de jeu Hit Effect Et dans le cadre de la méthode de démarrage, nous voulons redimensionner l'objet du jeu Spear en vecteur 30 Il est donc caché. Pour ce faire, transformons simplement l' échelle locale en vecteur égal à 30. Et le vecteur 30 est une version abrégée, et il renvoie une valeur de zéro, zéro, zéro sur trois axes x, y et z. Ensuite, nous pouvons créer une nouvelle méthode, une méthode publique avec le type de retour void, et nous pouvons simplement appeler ce shield up. Et nous allons utiliser cette méthode pour activer le bouclier à l' aide de l'interface utilisateur ultérieurement. Ensuite, nous devons créer une routine de base. Tapons donc enumerator, et nous pouvons simplement appeler ce bouclier engagé Et je vais passer un paramètre float à cette routine de base, nous pouvons simplement appeler durée, et ce sera la durée de notre bouclier. Et dans la routine de base, nous devons créer une variable flottante temporaire. Appelons simplement la première durée M, et fixons simplement sa valeur à 0,5. Et nous devons créer un autre type de float, et nous pouvons l' appeler M duration, et nous pouvons simplement définir la valeur à 0,5 également. Nous avons donc besoin de ces deux valeurs pour créer une durée permettant d'agrandir l'animation du bouclier , puis de réduire l'animation de la lance lorsque nous activons le bouclier Et ajoutons une boucle sauvage ici. Et avec la condition, si dans une durée est supérieure à zéro. Donc, s'il nous reste encore de la valeur dans la durée de l' animation, nous allons examiner ce code générique. Et en gros, nous devons créer une boucle de trois temps ici dans la routine co. Donc, il suffit de le copier-coller. Et pour le second, nous voulons changer la condition pour une durée supérieure à zéro. Lors d'un deuxième essai, pendant un deuxième temps, nous pouvons simplement le supprimer complètement, puis utiliser un rendement, redonner un nouveau poids pendant une seconde, puis dépasser la durée. Cela maintiendra donc la coroutine en secondes avec la valeur de la durée Mais pour optimiser cela, nous pouvons convertir le temps d'attente pendant les secondes dans une variable, car nous allons l'utiliser à plusieurs reprises dans le gameplay. Ajoutons donc simplement une nouvelle variable privée avec le type d'attente pendant quelques secondes. Et nous pouvons simplement appeler cela un délai de protection. Et dans la méthode de démarrage, nous devons initialiser cette variable Nous pouvons donc simplement taper le délai du bouclier égal au nouveau poids pendant quelques secondes , puis transmettre la valeur de la durée du bouclier , puis transmettre la valeur de la durée du bouclier à ce constructeur Et cela sera beaucoup plus optimisé et réduira le ramassage des déchets. Et nous pouvons réutiliser cette variable de délai comme valeur de rendement dans notre routine conjointe. Et puis, dans la durée in nim while, nous voulons soustraire la durée de l'animation avec le temps delta, afin qu'elle soit soustraite d'un par seconde, afin que nous puissions créer une sorte de Et nous devons insérer un rendement nul ici. Sinon, cela créera une boucle infinie, et nous voulons arrêter l'exécution jusqu'à ce point et elle bouclera pendant tout le temps. Et si la condition contenue dans ce moment est fausse, nous passerons à la ligne suivante ci-dessous. Il exécutera le prochain délai de protection contre le rendement. Et puis, une fois le délai de protection expiré, il exécutera la durée spécifiée. Copions donc simplement le manteau du premier testament dans le second. Et pendant un second temps, nous devons remplacer la variable flottante par la durée sortante. Je vais donc changer à la fois celui qui se trouve à l'intérieur du manteau et celui de l'état. Ensuite, dans le cas d'une durée supérieure à zéro, nous voulons redimensionner l' échelle locale de la transformation. Et pour la valeur, nous pouvons utiliser la classe vectorielle trois , puis utiliser la fonction b. Et pour la valeur du vecteur A, nous pouvons utiliser l'échelle locale précédente. Tapons donc simplement transform cette échelle locale. Ensuite, nous voulons passer à un vecteur 31. Il va donc être interpolé de la précédente à une échelle de un, et nous voulons l'ajuster à la taille maximale, ce n'est pas quatre car le script repose sur l'objet du jeu Shield, et comme vous pouvez le voir sur l'unité ici, objet du jeu Shield a une valeur d'échelle de un au lieu de quatre Nous voulons donc redimensionner cet objet bouclier plutôt que l'objet du jeu de lance Et pour la valeur d'interpolation, nous pouvons simplement mettre une certaine valeur Je vais mettre 0,1. Et copions simplement cette ligne ici et collons-la dans la seconde. Mais dans un second temps, nous voulons changer le vecteur cible ou le vecteur situé dans la fonction pour qu'il soit le vecteur trois points zéro. Alors changeons simplement cela. Cela redimensionnera donc le bouclier de sa valeur précédente à une valeur nulle, et cela créera un effet de réduction. Et maintenant, nous voulons créer une entrée de débogage dans la méthode de mise à jour Créons donc simplement une instruction if, et pour la condition, nous pouvons simplement utiliser la touche input dot get down. Et pour la touche, je vais utiliser un point S, nous devons donc appuyer sur la lettre S pour déclencher le bouclier. Et dans cette instruction, nous voulons exécuter la méthode shield up. Et dans le cadre de la méthode shield up, nous voulons appeler la routine co. Tapons donc simplement start coroutine, puis transmettons la coroutine Engage Shield dans cette méthode de coroutine de démarrage Et nous n'avons plus besoin de cette durée de flux. Nous pouvons donc simplement supprimer l'argument ou le paramètre, Nous pouvons donc simplement supprimer car nous avons déjà utilisé ce poids de délai pour la deuxième variable, nous n'avons donc plus besoin de cette durée. Ensuite, nous devons créer une méthode de saisie par déclencheur. Créons-en un. Ensuite, nous voulons vérifier l'autre collisionneur d'objets en utilisant la méthode des balises comparées Et si c'est l'ennemi, que nous voulons ajouter un R ouvert et que nous voulons vérifier s'il y a un autre tag ici à la deuxième condition. Et pour le tag, nous voulons le remplacer par Enemy Bullet. Donc, en gros, ce bouclier détruira à la fois l' objet de jeu ennemi et la balle. Le joueur sera donc infaisable pendant un certain temps. Et dans la déclaration, nous voulons récupérer le système de santé de l'autre objet du jeu. Créons donc un nouveau type de système de santé variable temporaire , et s'il s'agit d'un ennemi, ce système de santé y sera attaché. Et nous pouvons simplement appeler cette variable temporaire la santé de l'ennemi, et nous devons obtenir un composant de l'autre objet. Tapons donc simplement le composant AGT et définissons le système de santé de type 2, et nous voulons vérifier si cette variable est nulle ou non. Donc, en saisissant l' état de santé de l'ennemi, cela permettra de vérifier si la santé de l'ennemi n'est pas nulle, et nous voulons utiliser la méthode de prise de dégâts de l'ennemi et lui transmettre une très grosse valeur. Pour cet exemple, je vais passer une valeur de mille, afin que l'ennemi soit détruit immédiatement. À bien y réfléchir, je vais augmenter ce chiffre à 10 000, et nous voulons ajouter une condition L, et pour l'instruction L, nous voulons renvoyer l'objet du jeu dans le gestionnaire de traction. Nous pouvons donc simplement utiliser la méthode de retour de l'objet depuis le gestionnaire de traction, et nous pouvons simplement passer l'autre objet du jeu en argument, et cela renverra immédiatement la puce au gestionnaire de traction. Et nous devons accéder à l'objet du jeu car l' autre est une sorte de collisionneur Et maintenant, nous voulons générer l'effet chapeau. Pour ce faire, nous pouvons donc simplement copier le code du système de santé ici. Passons donc au système de santé, et je vais sélectionner cette partie du code. Puis copiez-le. Et je vais coller ce code dans le déclencheur n avant la déclaration du système de santé. Et ça marche tout de suite. Comme vous pouvez le constater, nous n'avons aucune erreur car nous utilisons le même nom pour la variable d'effet de frappe ou l'objet du jeu Cette partie que je souligne sert à calculer la position de l'effet de frappe et également la direction en fonction la partie du contexte du collisionneur, ou de la partie où l'ennemi ou la balle entre en contact avec le bouclier Maintenant, sauvegardons le script. Revenons maintenant à Unity et attachons le script Shield à l'objet du jeu Shield. Et fixons simplement la durée du bouclier à cinq pour le moment. Et pour l'effet hit, il suffit de naviguer ici, d'accéder à l'onglet At et de sélectionner les préfabriqués Sparks Et nous voulons ajouter un lance-collision dans l'objet du jeu Shield Nous pouvons donc simplement supprimer le spear collider de l'objet de jeu pour enfants L'enfant se chargera donc uniquement de la visualisation, et nous pouvons désactiver à la fois les ombres projetées et l'ombre reçue en désactivant l'ombre projetée et en décochant l'ombre reçue Et pour l'objet du jeu Shield. Ajoutons un lance-collision. Mais vous pouvez voir ici, dans la vue en forme de sinus, le rayon est plus petit que celui de l'objet PysalGame Nous devons donc changer le rayon à deux, afin qu'il corresponde à l'objet du jeu Spear Et comme vous pouvez le voir, si j'augmente le rayon, il est plus grand que l'objet du jeu Spear Remettons cela à deux, et nous devons activer l'option de déclenchement. Mais cela ne déclenchera pas la méthode de saisie du déclencheur. Et ici, sur l'objet du jeu du joueur, nous avons un élément rigide qui y est attaché. Ce collisionneur pour enfants sera donc considéré comme un collisionneur de l'objet de jeu parent, savoir le joueur Et cela posera problème, car chaque fois que nous activons le bouclier et que nous sommes touchés par une balle ou par un ennemi, le système de santé se déclenche au moment de l'entrée du déclencheur et il nous soustrait immédiatement nos points de vie grâce à ce collisionneur Pour résoudre ce problème, nous devons ajouter un composant rigide à l'objet du jeu Shield assurer que l'utilisation de la gravité est désactivée et que l' option cinématique est activée, afin qu'aucun calcul dynamique ne soit Et cela empêchera l'objet du jeu du joueur enregistrer ce collisionneur comme son propre collisionneur Il se comportera donc comme un collisionneur distinct ou autonome, et il ne sera déclenché que par ce script de bouclier. OK. Maintenant, sauvegardons la scène, et essayons ceci. Et comme vous pouvez le voir ici, si nous appuyons sur S, le bouclier sera activé, et comme vous pouvez le voir, la balle ennemie ne peut pas du tout toucher. Et nous avons également ce couteau avec des effets d'étincelles à l'extérieur ou sur la surface du bouclier. Mais il y a un problème ici. Le bouclier ne tombe jamais. Alors arrêtons ça. Et revenons au script Shield. Et il y a un problème. J'ai oublié de modifier la seconde condition de durée, et nous utilisons toujours le flottant de durée. Remplaçons donc cela par le float de la durée de sortie. Et sauvegardons le script, revenons à Unity, et testons cela à nouveau. Et je vais appuyer sur S pour activer le bouclier. Et comme vous pouvez le voir, au bout de cinq secondes, le bouclier disparaît. Mais 5 secondes, c'est probablement un peu trop long pour le bouclier de niveau inférieur. OK. Donc, en gros, le script de bouclier, la valeur de la durée du bouclier seront modifiés en fonction de la mise à niveau que nous utiliserons ultérieurement. Nous pouvons donc passer à une durée plus longue. Mais probablement comme point de départ, nous pouvons simplement régler ce paramètre sur trois secondes. Et nous devons également ajouter une variable de collision dans le script de bouclier. Appelons simplement cet appel, et mettons-la en cache dans la méthode de démarrage à l' aide du composant get, et nous voulons activer et désactiver le collider en fonction de l'engagement du bouclier Je commence donc, nous voulons d' abord désactiver le collider en utilisant les propriétés activées , puis définir la valeur sur false Et nous pouvons simplement copier la ligne ici et la coller au début de la coroutine début de la coroutine, nous pouvons simplement définir cela sur true Et à la fin de la routine, nous pouvons simplement coller ce code ici puis remettre la valeur à falls Sauvegardons donc le script. Parce que si nous ne désactivons pas le collisionneur, même si l'échelle de notre bouclier est nulle, nous risquons de détruire accidentellement l'ennemi, car il infligera même si l'échelle de notre bouclier est nulle, nous risquons de détruire accidentellement l'ennemi, car il infligera à l'ennemi des dégâts d' une très grande valeur au moment de l' activation de la gâchette. J'ai également ajouté un code pour forcer la valeur du bouclier local à être nulle avant de désactiver le collisionneur Cela permet de s'assurer que le shield fiscal est masqué après la seconde boucle. Dans cette partie, nous allons créer un code afin que les vaisseaux ennemis puissent endommager le joueur. Donc, dans le dossier des scripts, allez dans le dossier des scripts ennemis et dans le dossier des scripts ennemis. Créons un nouveau script C sharp. Et on peut l'appeler Damage Player. Et ouvrons les scripts. Et c'est en fait un script assez simple à faire. Supprimons donc simplement les méthodes de démarrage et de mise à jour, et déclarons un nouvel entier public que nous pourrons appeler valeur de dommage. Cela contiendra la valeur des dégâts qui seront appliqués au joueur, et nous devons créer une méthode d'entrée sans déclenchement Et nous voulons vérifier si l'autre balise d'objet est le joueur, nous pouvons utiliser la méthode des balises comparées. Et ce script va être attaché à l'objet du vaisseau ennemi. Et si le tag est bien joueur, alors nous voulons récupérer le système de santé de cet objet de jeu. Nous pouvons donc utiliser l'autre composant point get et le système de santé pour le type. Et nous voulons exécuter la méthode take damage pour appliquer les dégâts, et nous pouvons transmettre la valeur des dégâts que nous déclarons ici dans le script. Et nous voulons également détruire le vaisseau ennemi Nous pouvons donc simplement accéder au script du système de santé à l'aide du composant get , puis exécuter la méthode Take Damage. Et nous pouvons transmettre une valeur importante pour nous assurer que l'ennemi sera détruit touché instantanément par le joueur. Et nous voulons également nous assurer que cette entrée non déclenchée n'a lieu qu'une seule fois Je vais donc créer une nouvelle variable d' investissement privée, et nous pouvons simplement la qualifier de détruite Et nous voulons que le lingot devienne réalité chaque fois que l' ennemi touche le joueur Et au début de la méthode, nous pouvons ajouter une instruction if pour vérifier si le bulon détruit est vrai, puis nous pouvons renvoyer la méthode Donc, s'il est détruit, le code ci-dessous ne sera jamais exécuté. De cette façon, nous allons nous assurer que la collision entre l' ennemi et le joueur ne se produise qu'une seule fois. Nous pouvons maintenant enregistrer le script, mais nous devons modifier le script du système de santé. Ouvrons donc le script du système de santé. Et en gros, je vais déplacer tout le code lié à l'effet de frappe dans le déclencheur, et je vais le mettre dans la méthode Take Damage. Copions donc simplement la ligne ici , puis collons-la dans la méthode take damage. Et nous aurons une erreur ici car vous pouvez voir que le collisionneur n'est pas défini ici dans la méthode Nous pouvons donc simplement passer le collider comme paramètre de la méthode Tapons donc simplement Collider. Nous pouvons simplement l'appeler, et maintenant prendre des dégâts comme pour un autre argument ou paramètre. Nous devons donc faire passer le collisionneur ici à l'intérieur de la gâchette. Maintenant que nous avons modifié ce code ici, nous pouvons simplement supprimer le code associé aux effets de frappe dans le champ de désactivation et enregistrer le script Une autre chose que nous voulons faire est de simplement déplacer le code s'il n'est pas un ennemi. Passons simplement le code à la méthode take damage. Et cette ligne ci-dessous. Nous ne voulons pas le déplacer vers le point de subir des dégâts, car nous voulons désactiver la balle qui touche l'objet du jeu. Donc c'est pour décocher la balle. Sinon, si nous supprimons cette ligne pour infliger des dégâts, l' ennemi qui nous a frappés instantanément sera également éliminé en utilisant le script du joueur de dégâts. Nous ne voulons donc pas déplacer ce code ici. Revenons à l'unité, et essayons-la. Et ici, dans la console, comme vous pouvez le constater, nous avons quelques erreurs car d'autres scripts reposent sur cette méthode take damage Nous devons donc corriger ce code pour ajouter l'argument collider Il suffit donc de double-cliquer sur le message d'erreur. Et ici, dans le script du joueur de dégâts, nous pouvons simplement passer l'autre collider à la méthode take damage, et aussi pour la deuxième méthode take damage, passer l'autre collider Et l'autre script que nous devons corriger est le script laser, le mégabum et le script shield, car tous ces scripts font appel à la méthode Take Damage Ouvrons-les donc un par un, et nous pourrons passer en toute sécurité l'autre collider comme argument oublier de sauvegarder le script Et dans le script Megabom, comme il ne s'agit pas d'une méthode d'entrée sans déclenchement, nous pouvons simplement faire passer le collider du réseau de colliders de Nous pouvons donc simplement transmettre le tableau des collideurs, puis transmettre l'index de et enregistrer le script Et le dernier est le script Shield. Il suffit donc de double-cliquer sur le message d'erreur et d'ouvrir le script. Et nous pouvons simplement passer devant l' autre collisionneur et enregistrer le script Et en gros, nous avons besoin de ces autres collisionneurs pour déterminer la position des étincelles ou celle des effets de frappe Et dans le système de santé, les particules touchées sont désormais générées selon la méthode « take damage ». De retour dans l'unité, nous devons ouvrir les vagues ennemies puis sélectionner l'avion ennemi, et ajouter les scripts de dégâts infligés aux joueurs sur l'objet du jeu sur l' avion ennemi. Nous devons définir la valeur des dégâts, et je vais la fixer à cinq. configuration du système de protection est donc terminée et nous pouvons passer à la vidéo suivante. 36. Missile à 36 joueurs: Donc, dans cette vidéo, nous allons créer un missile pour notre joueur. Donc oui. Pour commencer, nous allons ouvrir le script de missile ici, afin de pouvoir accéder à notre dossier de scripts Weapons et ouvrir notre script de déplacement de missile, et nous allons modifier le script ici. Ainsi, au lieu d'utiliser le lecteur de noms, nous allons changer la variable transform ici en target. Et avant, je vais en réciter quelques passages du script. Ouais. Nous avons donc changé la variable player en target, et nous pouvons simplement copier ce nom ici coller ici et également le coller ici. OK. Et la prochaine étape serait d'ajouter une variable bullion, et appelons ce joueur Et cela sera désactivé ou sera faux par défaut. Et nous devons ajouter une condition ici. Si le joueur est vrai, alors nous voulons rechercher cette balise ici. Nous voulons rechercher cette balise ici, et l'activer, nous voulons faire autre chose , nous voulons vérifier si le joueur est faux, puis nous voulons trouver l'ennemi. Trouvez l'ennemi le plus proche ici. Et pour trouver l'ennemi le plus proche, nous devons créer une fonction distincte pour ce faire. Donc, dans le cadre de la routine, commencez par suivre ici, je vais créer un vide. Je vais créer une nouvelle méthode renverra une transformation de type, et nous pouvons appeler cette méthode find enemy. D'accord, il s'agit donc d'une méthode qui renverra une transformation de type. Nous devons donc renvoyer quelque chose à la fin de ce code ici. Tout d'abord, nous allons créer un nouveau tableau, un tableau d'objets de jeu, un ensemble d'objets de jeu, appellerons ennemis, et nous allons utiliser la classe d' objets de jeu et une méthode de la classe d'objets de jeu, qui consiste à sélectionner des objets de jeu avec une étiquette et à nous assurer que la lettre est derrière l'objet. Cela signifie donc pluriel, ce n'est pas singulier, et nous pouvons rechercher le tag ennemi OK. En gros, nous allons récupérer tous les objets de la scène qui ont marqué un ennemi, pas seulement un objet, mais de nombreux objets, et ces objets seront ajoutés à la liste des ennemis. Ensuite, nous pouvons trier ce réseau en fonction la distance entre les ennemis et notre missile qui vient d'être détruit. Nous devons donc utiliser le mot clé system pour utiliser la fonction de tri. Je vais donc l'ajouter en utilisant le système et nous pouvons créer en utilisant la classe array. Il a une fonction de tri et nous pouvons l'utiliser et il existe de nombreuses façons de l'utiliser, comme vous pouvez le voir, il a 17 combinaisons. Mais celui que nous voulons utiliser, c'est placer en premier le tableau que nous voulons modifier , à savoir les ennemis. Ensuite, nous allons utiliser le mot clé delegate. Et cela saisira le premier index et le suivant. Désolé, l'index actuel, le membre actuel, désolé, l' index actuel du membre dans les ennemis et le suivant. Donc, comme mis a le type d'objet de jeu, nous allons utiliser la classe d'objet de jeu A, puis mon objet de jeu B. Nous allons donc saisir le premier et le suivant, et cela se répercutera sur tous les membres de nos ennemis à l'intérieur de cet objet de jeu Et après cela, nous pouvons simplement appuyer sur Entrée et ouvrir un support bouclé Et ici, nous pouvons taper return. Nous allons donc renvoyer l'objet le plus proche en comparant sa distance, afin d'utiliser la classe du facteur trois, puis utiliser la fonction, qui est la méthode, appelée distance, et nous allons comparer notre transformation de notre missile, qui est la position transformée, la position de notre missile et la position de notre premier objet de jeu, le jeu objet. Nous allons vérifier cela. Et cela renverra essentiellement une valeur flottante. Et nous devons le comparer à un autre membre, qui est le second. Je vais donc simplement copier ce code ici et le coller dedans par rapport à. Mais au lieu de le comparer à l'objet de jeu A, nous allons le comparer à l'objet de jeu B. Donc, pour faciliter la lecture, nous pouvons simplement appuyer sur Entrée sur le point de comparaison. Nous avons donc deux lignes ici. Et je vais terminer par le point-virgule. Donc, en gros, cette ligne veut comparer la position de la distance entre l'objet de jeu A et notre missile, et nous voulons également la comparer à la distance entre l'objet de jeu B et notre missile. Et quel que soit Oh, quelle que soit la méthode qui renvoie le plus petit flux entrant en termes, cela signifie que c'est elle qui a la distance la plus proche entre l' objet ennemi et notre missile Il retournera celui-ci. Il va donc déplacer celui-ci vers le premier index et le second vers l'index suivant, et ainsi de suite. Chaque fois qu'il essaie de comparer le prochain index avec l'index suivant, je trie puis il change de position à nouveau. Il continuera donc à le faire jusqu'à ce qu'il fini d'itérer notre tableau mis, et à la fin, nous aurons l' ennemi le plus proche à l'indice zéro Le premier indice sera le plus proche car le premier indice aura la distance la plus proche, la valeur la plus faible en termes de valeur flottante renvoyée par le facteur trois de distance, et il sera déplacé vers la première position. Ou vous devez fermer cette parenthèse puisque nous avons ce crochet frisé après ce délégué ici, nous devons donc le fermer Et en gros, après le délégué, il n'y a pas de coma. Assurez-vous qu'il n'y a pas de virgule dans votre code. Sinon, cela donnera une erreur. Ouais. Après cela, déléguez pour exécuter ce code ici. OK, maintenant nous avons ce tableau, ce type. Si nous voulons vérifier cela, nous pouvons créer une boucle et nous pouvons boucler notre réseau d'ennemis. Longueur des points, nous voulons donc déterminer le nombre d'ennemis que nous avons actuellement capturés. Ensuite, nous pouvons simplement imprimer la distance entre notre position de transformation, la position notre missile et l'index thématique de transformation de cette position. Puisque les ennemis reçoivent un objet, nous pouvons imprimer et nous pouvons voir que le premier index aura toujours la valeur la plus faible. Et ensuite, après cela, nous devons renvoyer le premier membre de nos ennemis. Mais comme il renvoie le type de transformation, il a besoin d'un type de transformation pour être renvoyé. Nous devons taper transform comme ceci. Et oui, ça devrait suffire, et gardons ça. Et maintenant, nous avons cette fonction. En gros, nous n'en avons pas besoin pour la boucle. Nous voulons juste le montrer dans notre console, mais nous pouvons vérifier cette application. Rédacteur. Nous pouvons donc utiliser ce bulon et vérifier si nous fonctionnons dans l'éditeur ? Donc, une fois que nous aurons créé ce jeu plus tard, ce code ne sera pas exécuté. Donc oui. Je vais juste couper ça pour le mettre en boucle et le mettre dedans. Nous n'avons donc pas besoin de le désactiver ultérieurement. Il sera automatiquement désactivé par cette vérification ici. Je ne m'enfuirai pas. Et une fois que nous aurons ce bel ennemi, nous pourrons l'attraper, nous pourrons copier cette ligne ici. Mais nous allons changer cet ennemi. Et en gros, nous voulons nous assurer que notre scène comporte au moins un objet portant des étiquettes d'ennemi. Si nous l'avons, nous voulons y retourner, prendre le plus proche. Puisque nous avons déjà créé une méthode pour ce faire, il suffit de l'exécuter. Et comme cette méthode renvoie le type de transformation, je peux l' assigner à une variable. Donc, quel que soit le retour de cette méthode, elle sera définie cette variable cible que nous avons ici. OK. Donc oui. Maintenant, nous avons changé cela. Nous devons accéder à notre dossier de préfixes. Et désolé, dans le dossier des préfixes et sous le dossier des armes. Je vais dupliquer notre objet de jeu de missiles. Mais celui-ci est mon missile, donc je vais le renommer en missile joueur Et je vais remplacer l' étiquette par une balle normale, afin qu'elle touche l'ennemi, nous touche, pas le joueur. Et pour le script Missile Move, je vais vérifier le joueur Bulon Cela permettra donc de différencier le comportement. Celui-ci est pour le missile ennemi, et il suffit de désactiver le joueur. Et celui-ci est pour, pour le missile du joueur. Et peut-être devons-nous créer un nouveau profil d'arme. Je vais donc dupliquer le niveau 2 du joueur, mais celui-ci, je vais renommer ce missile de niveau 2 et simplement ajouter le suffixe d'un C'est donc probablement pour le missile de niveau 1. Et oui, pour ce qui est de la vitesse, je vais passer à huit parce que, comme vous pouvez le voir ici, dans le bus meselt ou dans le metteur ennemi, nous avons une vitesse lente missile doit donc avoir une faible vitesse, mais des dégâts plus importants. Donc, pour les dégâts, je vais les augmenter à cinq. Et l'intervalle, je ne vais pas le faire trop souvent, donc je vais le faire toutes les 3 secondes. Et pour le tarif du restaurant, six suffiraient. Je pense OK. Nous avons tout le temps de nous assurer que ce missile sort du cadre et qu' il se détruise tout seul. Pour le spread, je vais définir ce 20, et pour ce qui est du spread, je vais le définir 21. OK. Et nous pouvons créer différents profils pour cela ultérieurement pour le système de mise à niveau. De plus, nous allons configurer notre joueur pour qu'il tire ce missile, nous devons utiliser le script de tir automatique ajouter le script de tir. OK. Et pour le profil de tournage, nous pouvons diriger le missile de ce joueur. Et pour le préhep à puces, nous pouvons utiliser le prehep des joueurs que Et pour le point de tir, nous pouvons simplement diriger le point de tir ici. Et maintenant, nous avons ce tir de missile. Nous devons nous assurer que chaque fois que nous détruisons un ennemi, l'objet ou l'objet du jeu n' est pas toujours détruit, mais il reste sur place et nous ajoutons des particules qui brûlent des particules pour créer un effet ennemi, ce qui posera problème car notre nouveau missile le considérera toujours comme un ennemi parce qu'il porte des étiquettes d'ennemi. Nous devons donc changer certaines choses dans le système de santé. Donc, dans le cadre du système de santé, désolé, j'ai déjà essayé cela auparavant. Ce que nous devons faire, c'est vérifier si le système de santé appartient à l'objet du jeu, puis nous devons changer son texte chaque fois qu'il est détruit. Et en gros, cette fonction n'est exécutée ici que si la santé actuelle est nulle ou inférieure à zéro. Cela signifie donc que l'ennemi a été détruit. Ainsi, chaque fois que l'ennemi est détruit, nous voulons remplacer le tag du jeu par un autre, et nous pouvons peut-être utiliser le tag. Et cela fait la distinction majuscules/minuscules. Nous devons donc nous assurer que ce que nous avons saisi ici est correct. Revenons donc à l'unité, et je vais choisir un autre objet et prendre, comme vous pouvez le voir, nous avons un U majuscule, et le reste est en minuscule, oui. Sauvegardez ceci et une chose qui devrait suffire. Essayons donc d'abord ceci. OK. Pour essayer, je vais désactiver notre puce par défaut, la prise de vue automatique. Il ne tirera donc le missile, afin que nous puissions le tester. Et je vais élargir nos ennemis terrestres, et je veux que vous choisissiez celui-ci ici. Et je veux voir le t, le tag change-t-il chaque fois que nous le détruisons ? Alors essayons simplement ceci. OK. OK, désolée. Il y a un problème ici. J'ai oublié de mettre l'objet du jeu dans notre système de sondage. Nous devons donc ajouter ceci. Donc, en gros, réduire le réglage de notre mesure de sondage, c'est comme ça. Et chaque fois que nous créons un nouvel article, je dois le mettre dans la mesure de regroupement. Je vais donc agrandir la taille ici. Peut-être que pour le montant d'attraction, je n'ai pas besoin d'autant de missiles, donc je vais le mettre à dix, et pour l' objet du jeu, nous pouvons accéder à nos actifs et choisir le missile du joueur, où se trouve-t-il ? Ah, voilà. Voici le joueur Mel. Sauvegardons la scène et essayons à nouveau. Oui, voilà. Nous avons cet ennemi. Mais ce n'est pas le cas. Je pense qu'il y a un problème ici. OK. C'est le plus proche, mais il faut vérifier, il a des étiquettes d'ennemi et d'ennemi. Regardons notre code ici, sous la rubrique « Missile Move ». Donc, en gros, nous rassemblons nos ennemis nous chantons et nous nous rapprochons de l'ennemi le plus proche. OK, donc si ce n'est pas un joueur. Oh, désolée. C'est là que nous nous trompons, que nous nous trompons. Pour le missile par défaut, pour le premier, nous devons nous assurer qu'il ne s'agit pas d'un joueur , car si le missile cherche il appartient à l'ennemi et si le missile recherche l'ennemi, il appartient au joueur. Nous devons donc nous assurer que le joueur est fidèle dans ce cas. OK. J'ai tout confondu, et essayons encore une fois. Oui, voilà. Il a détruit le premier. Et s'il essaie de suivre cette expédition. OK, j'ai été détruit. Essayons encore une fois. D'accord, oui, peut-être que la vitesse de rotation est trop lente, c'est pourquoi nous avons du mal à toucher notre ennemi. OK. À une certaine distance, il peut atteindre notre ennemi. Et il trouve toujours le plus proche, et maintenant il essaie de le détruire. OK. Comme vous pouvez le constater, nous avons un système de missile qui fonctionne très bien. Et pour corriger ce problème de rotation, nous pouvons accéder à nos préférences et accéder au dossier des armes. Sous le missile du joueur, nous pouvons augmenter la vitesse de rotation afin augmenter la durée de suivi à 1,5 seconde. Et pour la vitesse de rotation, réglons cette valeur à 25 et testons-la, pour voir si nous allons mieux nous comporter. Ouais. Oui, il touche l'ennemi, et il suit l'ennemi le plus proche. Comme vous pouvez le voir, avant d'avoir cet avion, il atteint ce trois-là, mais une fois que nous avons ces vagues ennemies, il atteint celui-ci Il attrapera donc toujours l'ennemi le plus proche. Ouais. OK, alors, voilà. Nous avons un système de missile pour joueurs, et nous pouvons bien sûr l' étendre ultérieurement. Nous devons également l'inclure ultérieurement dans le système de mise à niveau. OK. 37. 37 Level Manager: Dans cette vidéo, nous allons créer un script de gestion de niveaux. Le script gardera une trace de tous les succès de la session en cours du niveau. Le script comptera donc le nombre de victimes ennemies, ainsi que le nombre de personnes secourues. Ainsi, à la fin du jeu, le script sera en mesure d'évaluer ces valeurs et de débloquer le succès en conséquence. Maintenant, ouvrons le dossier des scripts. Dans le dossier, créons un nouveau dossier. Et nous allons appeler cela des scripts de données. Dans le nouveau dossier, créons un nouveau script et appelons-le gestionnaire de niveaux. Ouvrons maintenant un script. abord, je vais déclarer une variable statique à utiliser comme référence statique pour faciliter l' accès à ce script depuis d'autres scripts. Et comme il n'y aura qu'une seule instance du script dans la scène, le script est donc adapté à l'utilisation de références esthétiques. Marquons ça comme statique. Pour un type, saisissons le gestionnaire de niveaux, et appelons-le simplement instance. Et initialisons-le dans Wake. Je vais donc déclarer la méthode d'éveil. Nous pouvons l'initialiser en passant ce mot clé à la variable d'instance Cela permettra de s'assurer que le script occupe la référence statique afin que les autres scripts puissent y accéder immédiatement. Ensuite, je vais créer une classe sérialisable personnalisée pour contenir ou contenir les données de réussite Configurons-le donc ici en dehors de la classe Level Manager, et appelons-le métaux. Nous devrons également ajouter un attribut sérialisable afin que les valeurs de cette classe puissent être sérialisées et affichées dans l'inspecteur, et nous pouvons l' ajouter en accédant à l'espace de nom du système Comme cette classe est uniquement destinée à contenir des données, nous n'avons pas besoin d'hériter du comportement mono Déclarons donc quelques variables d'investissement publiques. Pour le premier, je vais l'appeler sauvetage. Et puis Keel et le dernier ne sera pas touché. Nous pouvons maintenant instancier cette classe tant que variable dans le script du gestionnaire de niveaux Déclarons-le ici avec une portée publique, et appelons-le simplement métaux en minuscules, et pour l'initialiser, nous pouvons taper le mot clé new metal égal, nous pouvons taper le mot clé new metal égal puis ouvrir et mettre des parenthèses entre parenthèses Maintenant, si nous sauvegardons le script et retournons dans Unity, créons un nouvel objet de jeu vide, réinitialisons sa transformation, et je vais réorganiser la hiérarchie Ce nouvel objet de jeu s'accumule donc en dessous du gestionnaire de tirage. Renommons également l' objet du jeu en gestionnaire de niveaux. Ensuite, associons-y les scripts du gestionnaire de niveaux. Une fois qu'il sera joint, nous pourrons voir les trois lingots de la classe moyenne remis à l'inspecteur Et cela est possible parce que nous avons déclaré que les lingots appartenaient à la classe moyenne Ainsi, chaque fois que la classe est déclarée en tant que variable dans un autre script, nous pourrons la voir dans l' inspecteur grâce à cet attribut réalisable Supprimons ensuite les méthodes de démarrage et de mise à jour, puis nous devrons également déclarer quelques variables entières. Je vais dire que c'est l'ennemi total tué. Sauvetage total et sauvetage humain. Ensuite, nous devons créer une nouvelle méthode publique avec un retour de void, appelons-la simplement register Enemy. Ajoutez une autre méthode pour enregistrer le sauvetage humain. Un autre a appelé ma quille pour compter la quille ennemie et un autre appelé Ad Rescue pour compter le sauvetage humain Dans la méthode des ennemis enregistrés, nous voulons augmenter la variable du nombre total d'ennemis, et je vais également modifier les noms des variables pour qu'ils commencent par une lettre minuscule par souci de convention Et pour la méthode de sauvetage du registre, nous devons incrémenter la variable de secours totale Pour at my kel et add rescue, nous devons ajouter ou augmenter respectivement les variables kel ennemi et humain de sauvetage Et avec toutes les variables calculées tout au long du jeu, nous pouvons les comparer à la fin du niveau et débloquer le succès correspondant en fonction de cette comparaison. Ensuite, nous devons également créer une nouvelle méthode publique. Et je vais appeler ça un jeu. Et avant de définir cette méthode, nous devons d'abord créer une routine co. Créons-en un en tapant enumerator et appelons-le count delay Et au début de la routine de base, je vais retarder le code en utilisant yield return, attendre quelques secondes et le retarder de 0,25 seconde. Après le délai, comparons d' abord si la valeur de l'ennemi tué est égale à la valeur totale de l'ennemi. Et si c'est le cas, nous voulons définir la variable kill lingot on the metals sur true Ensuite, nous voulons vérifier si le sauvetage humain est également égal au sauvetage total. Et si c'est le cas, nous voulons définir la valeur du lingot de sauvetage sur la variable métaux sur true Et nous devons créer une autre méthode publique pour détecter chaque fois que le joueur a été touché, et nous pouvons l'appeler joueur touché. OK. Dans le cadre de la méthode, nous devons définir les valeurs Bullen inchangées de la variable des métaux sur Donc, pour débloquer ce succès, le joueur ne doit pas être touché tout au long du niveau. Pour une version intacte, nous devons définir sa valeur sur true au début du niveau, afin de pouvoir simplement définir sa valeur dans la méthode awake La valeur par défaut sera donc vraie. Mais une fois que le joueur a été touché, cela deviendra faux tout de suite. Ensuite, nous voulons exécuter la routine count delay co depuis la méthode de jeu. Tapons donc start co routine pour exécuter une routine co et passons le nom de la coroutine ainsi qu'un ensemble de parenthèses Une autre chose que je voudrais ajouter est un événement Unity. Mais avant de l'utiliser, nous devons importer l'espace de noms des événements du moteur Unity ci-dessus. Alors faisons-le. Et déclarons une variable publique avec un type d'événement d'unité. Et disons-le dès le début. Nous voulons invoquer cet événement d'unité à tout moment du jeu. Ajoutons-le donc dans la routine co en appelant la méthode invoke. De cette façon, nous pouvons ajouter des actions personnalisées provenant d'autres classes ou objets que nous voulons invoquer via l'inspecteur, même manière que l'événement onclick sous le composant button Maintenant, sauvegardons le script. Ensuite, nous devons modifier le système de santé. En gros, nous devons enregistrer un ennemi chaque fois que la méthode de démarrage est invoquée. Appelons donc la méthode register enemy à partir du script du gestionnaire de niveaux en évaluant sa référence statique de cette manière. Bonjour, c'est Rome du futur. Il semble que ce code pose problème pour le moment car le script du système de santé est utilisé à la fois par le joueur et par les ennemis. Le nombre total d' ennemis sur la scène sera toujours le nombre réel d'ennemis plus un. Puisque le joueur s'enregistrera également en tant qu'ennemi au début. Et nous pouvons facilement régler ce problème , car nous avons déclaré un lingot pour indiquer si le système de santé est attaché à un ennemi ou non À l'aide de ce lingot, nous pouvons ajouter un chèque I avant d'exécuter la méthode de l'ennemi enregistré Ajoutons donc si parenthèses ouvertes sont des ennemis et fermons les parenthèses Ensuite, nous voulons exécuter la méthode de l'ennemi enregistré. Ensuite, dans la méthode de vérification de la santé, chaque fois que l'ennemi est vaincu, nous voulons appeler la méthode Add Enemy Kill depuis le script du gestionnaire de niveaux pour enregistrer la valeur k de l'ennemi. Modifions donc le blog Enemy is True et appelons la méthode contenue dans cette instruction if. De cette façon, la variable de destruction l'ennemi et le nombre total d'ennemis auront certaines valeurs à la fin du niveau. Ainsi, lors du calcul du résultat, nous pouvons débloquer le succès de kill en comparant ces deux valeurs. Ensuite, nous voulons enregistrer le nombre total d'humains qui doivent être secourus ainsi que le nombre d' humains qui ont été secourus. Ouvrons donc le script de sauvetage humain, et nous voulons déclencher la méthode de sauvetage du registre sur la méthode de démarrage et appeler la méthode de sauvetage AD chaque fois que l'humain est secouru par le joueur. Et il semble que nous devions définir la méthode de démarrage ici. Créons donc simplement la méthode et nous pouvons appeler la méthode de secours du registre en accédant à l'instance du gestionnaire de niveaux , puis en appelant la méthode. Et une fois le temps de sauvetage terminé, ici, dans la routine de base, nous pouvons appeler la méthode d' ajout de secours. Ajoutons donc la méthode et nous pouvons ajouter au-dessus de la ligne d'appel unrescue De cette façon, nous pouvons également comparer le sauvetage humain au nombre total d'humains présents sur place à la fin du niveau pour débloquer le succès du sauvetage humain. J'ai remarqué un bug lors des tests où le chronomètre continue même si le joueur est détruit. Nous devons donc vérifier si le joueur a été détruit ou non. Nous pouvons le faire en créant une variable privée de type objet de jeu pour récupérer l'objet de jeu du joueur Et dans la méthode de démarrage, vérifions s'il existe un objet de jeu avec le tag du joueur. Ensuite, nous voulons récupérer cet objet de jeu et l' encaisser dans la variable joueur. Ensuite, dans la routine Rescue Co, dans l'instruction while, lorsque le temps est encore supérieur à zéro, nous voulons vérifier si le joueur est nul ou non. Et si c'est le cas, nous voulons arrêter la routine co et régler le montant de remplissage de l' interface utilisateur du chronomètre à zéro. Ainsi, dès que le joueur est détruit, il arrête le chronomètre et efface l'interface utilisateur du chronomètre. Une autre chose que nous devons mettre en place est celle de la réussite intacte Pour en revenir au système de santé intégré à la méthode Untrigger Enter, chaque fois que le propriétaire du script est touché par une balle, nous voulons vérifier s'il s'agit d'un joueur En vérifiant si la valeur ennemie est fausse. En utilisant la version abrégée, nous pouvons appeler la méthode de frappe du joueur depuis le gestionnaire de niveaux Cela désactivera le succès intact dès que le joueur sera touché par une balle Sauvegardons le script, et revenons à Unity. Et si nous sélectionnons l'objet du jeu Level Manager, vous verrez que nous avons deux nouveaux champs de nombres entiers ainsi qu' un nouveau jeu et un événement Unity. Et testons cela à nouveau. Dès que nous entrerons dans l'ambiance de jeu, vous verrez le nombre total d'ennemis et les valeurs totales de sauvetage changer en fonction du nombre d'ennemis et de sauvetages humains présents sur les lieux. Il semblerait que mon plan soit détruit, donc je vais le rejouer. Maintenant, nous avons tué un ennemi. Et j'ai raté de tuer toutes ces vagues ennemies. Mais c'est bon. Et j'ai détruit un autre ennemi. Et si nous inspectons l'inspecteur, nous avons un total de sept ennemis, et nous en avons tué cinq jusqu'à présent. Et nous devons définir le jeu et la méthode dans le script d'Afo Managers chaque fois que nous tuons le boss Et essayons de sauver l'humain. Et une fois que nous avons secouru l'humain, la variable de sauvetage humain augmente. Et vérifions quelques points avant de terminer. abord, nous devons nous assurer d'exécuter la méthode de jeu à partir du script du gestionnaire de niveaux chaque fois que nous avons tué le bus. ce faire, sélectionnons l'objet du navire-bus présent sur la scène sous l'activateur du bus Si vous vous en souvenez, l'objet du bus est composé de plusieurs parties. Et sur l'objet principal du jeu, nous pouvons voir que le collider est désactivé lorsqu'il est apparu pour la première fois car nous devons d'abord détruire les tourelles Ainsi, lorsque nous détruirons la première tourelle, elle activera le deuxième collisionneur de tourelles Nous pouvons donc le détruire, et une fois détruit, il activera le collision de corps principal. Pour exécuter la méthode de jeu, nous pouvons donc ajouter une nouvelle entrée dans le champ des événements mortels sous le composant du système de mort de l'objet de jeu B ship. Ensuite, faisons glisser l'objet du jeu du gestionnaire de niveaux le nouvel objet d'entrée, puis exécutons la méthode en accédant au composant du gestionnaire de niveaux dans le menu déroulant et en sélectionnant le jeu. Cela déclenchera la méthode chaque fois que le navire-bus est vaincu. Avant de tester cela, sélectionnons l' objet du jeu du joueur. Et activez le script de tournage, la puce par défaut, et n'oubliez pas de surligner le gestionnaire de niveaux, afin que nous puissions voir l' évolution de la valeur en fonction du succès. Et à l'heure actuelle, il existe un bug selon lequel le nombre d'ennemis tués est actuellement beaucoup plus important que le nombre total d'ennemis. Mais c'est bon. Nous y jetterons un coup d'œil dans un instant et passons rapidement au boss. Maintenant, nous avons tué le boss, mais à boss. Maintenant, nous avons tué le boss, cause de ce bug et nous n'avons pas obtenu les autres médailles, aucune d'entre elles n'est activée. Alors réglons ce problème. Ainsi, dans le script du gestionnaire de niveaux, au lieu de comparer la valeur avec un comparateur égal, remplacons-la par une valeur supérieure ou égale par mesure de sécurité. Retour à l'unité. Essayons-le encore une fois, et je vais accélérer la vidéo. Et pour le bug de la valeur de l'ennemi tué, nous devons vérifier si l'ennemi a déjà été détruit. Je dois également réajuster la position de sauvetage humain afin que nous puissions le sauver avant d' engager le bus Maintenant, nous avons vaincu le bus et, comme vous pouvez le constater, nous avons débloqué le kill achievement Je vais terminer le match. Ensuite, surlignez et concentrez-vous sur le joueur. Et comme vous pouvez le voir, l'avion a été touché quelque part dans le niveau. Et si nous examinons le gestionnaire de niveaux, nous n'avons pas réussi à obtenir le résultat intact à cause de cela Une autre chose que nous devons faire est d'invoquer également la méthode de jeu du gestionnaire de niveaux lorsque le joueur meurt. Donc, si nous sélectionnons le joueur, ajoutons une nouvelle entrée dans le champ des événements mortels sous le système de mort et dirigeons l' objet du jeu Level Manager vers l'emplacement des objets. Et dans le menu déroulant, sélectionnez le gestionnaire de niveaux et la méthode de jeu, comme nous l'avons fait avec le box ship. Ainsi, chaque fois que le joueur gagne ou perd le niveau, le jeu est invoqué et le joueur peut revenir au menu ou à l'écran de sélection des niveaux. Pour résoudre le problème de boîte selon lequel le nombre d'ennemis tués est beaucoup plus élevé que le nombre total d'ennemis, nous devons nous assurer que la méthode d'ajout d'ennemis tués ne soit exécutée qu'une seule fois lorsque l'ennemi est tué. Dans le script du système de santé, nous devons donc ajouter une variable bullion qui servira de protection contre ce problème Appelons-le simplement comme ça. Et dans la méthode Check Health, sous le bloc if is enemy. Ajoutons une deuxième condition à la déclaration avec l' opérateur et vérifions si la valeur du lingot mort est fausse Donc, le code contenu dans ce I ne sera exécuté que si les deux conditions sont vraies. Et faisons en sorte que ce lingot devienne réalité. Cela empêchera la collision de balles qui déclencherait cette partie du code. Ainsi, nous veillerons à ce que l'ennemi publicitaire ne soit tué qu'une seule fois. 38. 38 Statistiques et mises à niveau partie 1: OK, maintenant nous avons créé le gestionnaire de niveaux pour la dernière vidéo. Nous allons maintenant créer le gestionnaire de statistiques ou le système de mise à niveau et la manière dont nous allons gérer les capacités de notre jeu dans les jeux de tir, tels que la santé et peut-être le laser, bouclier, le méga-bom, etc. J'ai donc créé une petite présentation ici. Permettez-moi de vous montrer OK, alors maintenant nous allons créer un composant ou une classe du gestionnaire de statistiques. Et ce responsable fiscal s' occupera des profils des articles. Nous allons donc créer une sorte de liste qui contiendra les données relatives aux armes et aux armes dans chaque niveau. Dans ce projet, nous allons créer cinq niveaux d' armes ainsi que cinq niveaux de missile, puis cinq niveaux de santé, cinq niveaux de bouclier, cinq niveaux de laser, et le dernier est cinq niveaux de mégabon. Et ce responsable technique s' occupera également du chargement sécurisé, et nous allons utiliser un formateur binaire Ce sera donc une technique très polyvalente par rapport à la préparation des joueurs et vous verrez y. Et après ce gestionnaire fiscal, nous gérons ou gérons également l'élément d'amélioration L'objet d'amélioration est donc essentiellement un composant qui sera attaché à un objet à améliorer. Ce sera une interface utilisateur préférée qui gérera le système de mise à niveau, le système de pondération. Et le gestionnaire de statistiques ne fournira les données qu'une fois la mise à jour terminée ou chaque fois que nous chargerons, il chargera les profils dont nous avions besoin ou, désolé, les profils que nous avons enregistrés lors de la session précédente. Donc oui, c'est plus ou moins une question de gestionnaire de statistiques, et passons à Unity. OK. Maintenant, dans Unity, je vais d' abord créer une nouvelle scène, et ce sera notre scène de menu. Donc, sauvegardons simplement la scène ici, enregistrons la scène et accédons à notre dossier de scènes, et ce sera le menu. Maintenant, dans ce menu, nous allons créer une interface utilisateur, et pour l'interface utilisateur, je vais créer un objet fiscal. Et si nous allons voir, nous pouvons voir l'interface utilisateur ici. Nous devons maintenant remplacer le scalaire va sous l'objet du canevas par une échelle correspondant à taille de l'écran et nous assurer qu'il est la taille de l'écran et nous assurer qu'il est défini sur un ratio de neuf sur 16 Nous pouvons donc simplement insérer 900 x 1 600 comme ceci, et nous voulons faire correspondre la hauteur. La prochaine chose que nous devons faire est de modifier le texte ici et nous voulons faire correspondre la hauteur La prochaine chose que nous devons faire est de modifier le texte Sélectionnons-le simplement. Et si nous passons à notre vue de jeu, nous pouvons voir l'objet texte, mais il est très petit, nous pouvons donc en augmenter la taille. Donc, si nous sélectionnons le texte ici, nous pouvons voir qu'il a de la largeur et de la hauteur. Je vais donc le faire pour changer cette valeur, peut-être en ru 300 et pour la hauteur, je vais la faire 90. Et je vais le placer en haut à gauche de notre écran de canevas ici, désolé, en haut à gauche en haut à droite. Pour ce faire, nous pouvons simplement accéder à ces préréglages d'ancrage, et en maintenant le mot clé sur le mot-clé, nous modifions l'ancre et la position de l'objet Si nous relâchons l'alt, cela ne fera que changer l'ancre. Et comme vous pouvez le voir, l'objet reste au milieu ici, l'icône, et si j'appuie sur la touche Alt, cela indique que le modèle s' accroche au bord de cette ancre ici. Je vais choisir celui-ci et il affichera notre texte ici. Et ce sera le présentoir de billets. Je vais donc le renommer en Money Display. Et pour le présentoir de billets, je vais changer la couleur en orange. Par exemple, comme celui-ci. Et si nous voulons enregistrer cela, nous pouvons simplement appuyer sur le préréglage ici sur nouveau préréglage et nous avons cette couleur orange. Nous pouvons donc simplement sélectionner ceci. Et pour une interface utilisateur ultérieure, nous pouvons simplement sélectionner immédiatement cette couleur dans les préréglages, afin qu'elle ait les mêmes valeurs que notre taxe ici Et nous voulons changer le f que j'ai inclus ici, un visiteur f. Ainsi, chaque fois que vous importez le projet SA, il aura ce f ici. Utilisons-le donc, et je vais activer le meilleur ajustement. Je vais fixer la taille maximale à environ 80 et la taille minimale à environ 50. Désolé, nous devons changer celui-ci. Je vais changer la taille du téléphone à 60 et la taille minimale à 50. J'aurai donc compris entre 50 et 80. Et si nous le voyons dans la vue du jeu, nous pouvons voir que nous l'avons. Et nous pouvons simplement aligner le texte au milieu et également le justifier au milieu. Et je vais ajouter un offset. Je vais donc choisir ce mouvement pour l'outil rectangle, pour l'interface utilisateur ou le sprite et je vais l' éloigner légèrement de l'écran Nous avons donc une distance entre le texte et les bords. Ça ne va pas. Maintenant, je vais mettre cette valeur à zéro, zéro, 00. Ce sera donc notre argent. OK, alors maintenant nous l'avons fait. Nous allons créer un ou deux scripts. Mais le premier, ce sera notre gestionnaire de statistiques. Créons donc un script Cb, et ce sera un gestionnaire de statistiques. Et cette vidéo, qui met à jour le système, sera divisée en deux vidéos car il y a beaucoup de sujets à aborder. OK. Donc, tout d' abord, tout d'abord, le gestionnaire de statistiques, ce sera statique, et il persistera d'une scène à l'autre. Nous devons donc créer une méthode Singleton (modèle Singleton Et je vais créer une variable statique, et ce sera le type de gestionnaire de statistiques, qui est notre classe ici Et je vais lui donner le nom d'encens. Et je vais créer une méthode de réveil par le vide. Et dans ce vide, je veux vérifier si la variable d' instance est nulle. Ainsi, par exemple, s'il est nul, nous voulons que vous détruisiez celui-ci. Détruisez cet objet de jeu. Oh, désolée, elle n'a pas été détruite. Nous voulons l'attribuer. Désolée. Nous voulons attribuer l'instance à ce script ici. Donc, si aucun autre composant du gestionnaire de statistiques n'a revendiqué ce mot clé d' instance, nous voulons définir ce mot clé d'instance sur notre composant ici. Nous voulons le revendiquer, et nous voulons marquer cet objet pour qu'il ne le détruise pas. Cet objet de jeu ne sera donc pas détruit si nous changeons de scène. Et si ces nouvelles scènes contiennent un autre objet de jeu doté d'un gestionnaire de statistiques, cela ne sera pas vrai, et nous voulons exécuter l' autre bloc de code ici. Donc, si l'instance est déjà revendiquée comme étant dans l' état de L ici, nous voulons détruire cet objet de jeu immédiatement. Ce modèle garantira donc que l'objet du jeu contenant le composant du gestionnaire de statut sur la scène sera toujours un, toujours un seul dans la scène. n'y aura donc qu'une seule instance de gestionnaire de statistiques dans la scène. Ajoutons donc simplement un commentaire. C'est le modèle Singleton. L'initialisation. OK. Ensuite, nous devons créer quelques classes personnalisées, comme celle que nous avons créée, je crois, dans le gestionnaire de niveaux, ces métaux ici. Alors, faisons simplement les classes personnalisées. Tout d'abord, nous voulons créer un vide public et ce seront les informations statistiques. Et cette classe contiendra des informations de mise à niveau pour chaque statistique que nous avons enregistrée, et cela se composera du nom OK, oui, nous avons besoin d'un nom de chaîne, et nous avons également besoin d'un entier. Je pense que j'ai fait une erreur ici, cela ne devrait pas être un vide public, mais cela devrait être une classe publique, nous créons donc une classe personnalisée. Et ce sera notre niveau. Et ce sera un tableau de flottants. Ce sera le temps de mise à niveau que nous définirons. L'autre chose que nous devons faire est de créer une classe pour notre méga-bombe. Tout cela sera donc sérialisable. Et ce seront les mégadonnées. Et je vais le reproduire plusieurs fois. Et ce seront les données du bouclier et les données du laser. Nous devons maintenant vérifier nos méga-données. Allons-y donc avec Megabuscrip et il a du rayon et des dégâts Nous voulons modifier cette valeur ici chaque fois que nous la mettons à niveau. Créons donc une variable compatible, copiez-la. Oui, et nous pouvons simplement supprimer la valeur par défaut. Nous allons donc enregistrer et charger ces données. Et pour le laser, nous avons la durée du laser, et nous voulons probablement créer. Mais je pense que la durée du laser devrait être suffisante, donc je vais juste le copier ci-dessous. Et pour le bouclier, où se trouve le composant du bouclier ? Pour le bouclier que nous avons, c'est la durée du bouclier. Donc, copions-le simplement ici. Et mettez-le ici. Ouais. Nous avons maintenant ces données. L'autre chose dont nous avons besoin, c'est de la santé et de l'arme. Arme, ce sera notre objet scriptable. Pour les armes, la balle normale et la balle de missile utiliseront l'objet scriptable que nous avons créé auparavant Créons maintenant une entrée pour notre système de mise à jour. Ce sera essentiellement une liste d'un, je crois que nous avions un profil de tournage, c'est le standard Désolé. Blaster standard, liste de blasters standard ou oui, liste laser standard Et nous allons le déclarer. Le second sera notre missile. Il s'agit également d'un profil de tir, mais ce sera notre liste de mise à niveau des missiles. Et la troisième sera une liste flottante et voici notre liste d' amélioration de la santé. Je vais changer ça en blaster list, et ce sera une amélioration des missiles C'est beaucoup plus clair quand nous verrons le nom et ce sera le type float, trois autres, et ce sera une amélioration des missiles. C'est beaucoup plus clair quand nous verrons le nom et ce sera le type float, trois autres, ce sera la liste de Je pense que cela peut être la liste Megaba Mega UPG, abréviation de upgrade this thing ici, ce sera une liste de Sid sorry, Shield dad UPG list Shield Et la dernière liste serait notre laser et voici la liste de mise à niveau UP. Et nous devons créer quelques dictionnaires. Le dictionnaire est essentiellement une sorte de liste, mais avec une liste, lorsque nous voulons accéder à l'un des membres, nous devons y accéder par son numéro d'index. Avec le dictionnaire, nous accèderons à chaque membre par sa clé. Il a donc deux valeurs, essentiellement une clé et une valeur. Et cette clé peut être n'importe quoi, et la valeur peut également être n'importe quoi. Par exemple, je vais créer le dictionnaire. Et pour la clé ici, je vais taper une chaîne, et pour la valeur, ce seront les données métalliques que nous avons ici. Imaginons que nous appelions cette liste de succès et que nous saisissions un nouveau dictionnaire. Alors pourquoi j'utilise des chaînes ? Parce que je veux enregistrer le nom de la scène. Chaque fois que nous économiserons les métaux, nous utiliserons le nom de la scène comme clé. Ainsi, chaque fois que nous voulons charger les données sur les métaux, nous pouvons simplement les référencer en fonction de la scène actuelle sur laquelle nous nous trouvons. Et ce sera beaucoup plus clair lorsqu'il s'agira d' utiliser lorsque nous définirons , déclarerons ou réaliserons la réalisation ultérieurement. L'autre chose que nous devons faire est de créer un dictionnaire de type chaîne, et ce serait le type date/heure. Mais nous ne l'avons pas parce que nous n'avons pas défini l'utilisation du mot clé system ici Nous devons donc l'ajouter en utilisant le système, et maintenant nous pouvons utiliser la classe, et ce serait l'heure de notation des statistiques. Ou nous pouvons utiliser un meilleur nom. Oui, ça devrait être un chronomètre. Et chaque fois que nous effectuons des mises à niveau, nous voulons définir l'heure finale dans cette valeur journalière ici, et la chaîne sera le nom de l'article que nous améliorons. OK, déclarons simplement le nouveau dictionnaire. Ouais. 39. 39 Statistiques et mises à niveau partie 2: Continuons à travailler sur le script Status Manager. Et dans le script, j'ai supprimé la méthode de mise à jour car nous n' allons pas l'utiliser. J'ai également créé un nouvel objet de jeu vide appelé Game Manager dans la scène et attaché les scripts du gestionnaire d'état. Et comme vous pouvez le constater, nous avons quelques variables matricielles ou moins ici quelques variables matricielles ou moins dans l'inspecteur en fonction de ce que nous avons déclaré dans le script. Et j'ai également rempli les champs avec l'objet scriptable associé Par exemple, j'ai renseigné le profil du blaster avec le profil de tournage que j'ai créé ici dans le projet du premier niveau au niveau le plus élevé N'hésitez pas à définir votre propre profil, et si ce n'est pas le cas, veuillez suspendre la vidéo et faites-le maintenant. N'oubliez pas non plus de vous assurer que le profil devient plus fort ou meilleur à chaque niveau. J'ai également préparé les profils de l'arme missile. Une fois que nous avons préparé tous les profils, nous pouvons simplement commencer à remplir les champs du script du gestionnaire de statut ce faire, il est conseillé de verrouiller l'inspecteur en cliquant sur l'icône de verrouillage haut à droite de l'inspecteur. De cette façon, l'inspecteur ne perdra pas son attention sur le gestionnaire de statut. Pour la liste des améliorations de santé, étant donné que le type est une liste flottante, nous pouvons simplement remplir immédiatement chaque niveau de santé avec une valeur numérique. N'hésitez pas à personnaliser la valeur à votre guise. Et pour la liste des mises à niveau en mégabum, chaque entrée de niveau, nous avons deux valeurs, un rayon et Pour le premier, il serait probablement préférable de le définir avec les valeurs par défaut du mégabum qui sont sept et 25 J'ai mémorisé ces valeurs grâce à la scène de jeu. Pour le premier rayon, au lieu de sept, je vais utiliser une valeur plus petite. Je pense que quatre, ce serait bien. Un sept serait trop puissant, et il convient mieux aux joueurs de niveau supérieur. Donc, pour le rayon du niveau suivant, je vais le régler dans l' ordre avec les valeurs de cinq, six, sept, huit. En ce qui concerne les dégâts, je vais les augmenter de cinq, donc ils devraient être de 30, 35, 40, 45, et je vais réduire toutes les autres propriétés qui ont été définies Nous en avons donc quelques-unes beaucoup plus serrées Configurons maintenant les valeurs d'amélioration du bouclier. Je vais régler le premier à trois, puis à quatre, cinq, six et sept. À moins que nous n'ayons besoin d'attribuer des valeurs à la mise à niveau du laser. Et je vais le définir avec des valeurs similaires à la durée du bouclier, donc il devrait être de trois, quatre, cinq, six, sept. Et si les valeurs ne sont pas bien équilibrées, nous pouvons toujours les ajuster ultérieurement. Et ici, si nous examinons le script du gestionnaire d'état, les deux dernières variables du dictionnaire ne sont pas visibles dans l'inspecteur, car Unity ne peut actuellement pas afficher ce type de données. Mais nous pouvons toujours l'exploiter et l' enregistrer ultérieurement pour enregistrer la progression Maintenant, continuons à travailler sur le gestionnaire de statut. Ensuite, nous devons déclarer une nouvelle variable publique avec un type d'entier, sera utilisée comme compteur de vies ou d'essais, et je vais définir la valeur par défaut à cinq. Ensuite, nous devons également déclarer une nouvelle variable entière publique pour l'argent du jeu. Et nous devons créer une méthode publique pour ajouter ou modifier le montant d'argent dont dispose le joueur. Ci-dessous, je vais en définir un avec le champ d'application du type public et le type de retour de vide, et appelons-le ajouter de l'argent. Nous voulons passer un entier comme paramètre, et nous pouvons l'appeler valeur. Dans la méthode, nous voulons modifier la valeur de la variable monétaire en l' incrémentant avec la valeur du nom du paramètre Et nous pouvons attribuer une valeur négative si nous voulons soustraire l'argent Et ci-dessous, je vais ajouter une commande pour une tâche à deux tâches plus tard lorsque nous aurons implémenté l'interface utilisateur d'affichage de l'argent pour mettre à jour l' interface utilisateur de l'argent. Et nous devons également mettre à jour le script de ramassage de pièces. Et si nous ouvrons le script, nous pouvons voir que cela nous de prendre des notes de la leçon précédente. Maintenant que nous avons mis en place la méthode pour ajouter de l'argent. Mettons à jour ce script en accédant à l'instance point My method du gestionnaire de statut et en passant un comme argument. Et pour en revenir au script Status Manager, nous devons créer une nouvelle variable avec le type d'informations de mise à niveau des statistiques que nous avons déclarées ci-dessous. Mais avant cela, je vais ajouter un attribut d'en-tête afin que nous puissions mieux organiser l'inspecteur . Et je vais appeler les options de mise à niveau du groupe. Et ci-dessous, ajoutons un autre en-tête, et appelons-le simplement upgrade timer Data. Et créez la variable avec le type de liste d'informations de mise à niveau des statistiques. Appelons ça des statistiques. Comme d'habitude avec la liste, nous devons l'initialiser comme ça Maintenant, si nous revenons à Unity, fois les scripts compilés, nous pouvons mettre à jour l'inspecteur. Configurons les données du délai de mise à niveau car nous avons six objets qui peuvent être améliorés. Réglons également la taille des statistiques à six, et je vais également renommer la première en Blaster Le niveau sera le niveau actuel des blasters du joueur. Ensuite, pour ce qui est de la durée de mise à niveau, définissons la taille 25 en fonction des niveaux des mises à niveau, et nous pouvons définir le niveau le plus élevé comme étant la plus longue. Dans ce cas, je vais le mettre à dix, et les plus faibles devraient être plus rapides. Réglons-le donc sur huit, six, quatre, puis deux. Et nous voulons également définir le niveau de base 21. Le prochain serait le missile, et nous voulons également définir le niveau de base 21. Et fixons la durée de mise à niveau à 25, et nous pouvons simplement la définir de la même manière que les valeurs du blaster, qui sont deux, quatre, six, huit et dix OK. Passons au suivant, celui-ci est pour la santé. Alors appelons-le ainsi. Mais dans un second temps, puisque nous allons utiliser les mêmes valeurs pour le moment, fixons simplement la taille des statistiques ici en haut à deux , puis remettons-la à six. De cette façon, les nouvelles entrées copieront les valeurs des entrées relatives aux missiles, puis nous n'aurons qu'à renommer les noms Donc le prochain sera le, le suivant sera Mega Bom Et puis un bouclier, et le dernier serait un laser. Ces champs contiendront donc les valeurs Typer de mise à niveau pour chacun des éléments évolutifs Et ces valeurs seront utilisées ultérieurement par l' objet de mise à niveau. Je vais collecter tous les champs et enregistrer à la fois la scène et le projet, mesure de sécurité. Revenons maintenant au script du gestionnaire de statistiques, et ici nous devons créer quelques méthodes supplémentaires. La première serait une méthode pour obtenir les statistiques. Tapons donc simplement public et renvoyons un générique, généralement écrit avec P. Generic généralement écrit avec P. signifie qu'il s'agit d'un type paramétré Ainsi, en utilisant des génériques, cette méthode peut renvoyer différents types de données, de même manière que l'utilisation des composants get Et nous pouvons appeler la méthode get stats value. Nous aurons besoin de deux paramètres. Le premier sera un type de chaîne, appelons-le simplement stat name, et le second sera une liste de types génériques ou T, et appelons-le simplement liste de statistiques Ce sera la liste des statistiques qui seront recherchées. Une erreur s'est produite car nous devons ajouter une signature générique à la méthode de valeur des statistiques GT. Ajoutons-en un à l'aide d'un crochet incliné, puis tapons-le d'un crochet incliné, puis t. Cela devrait corriger l'erreur Cette méthode peut donc être utilisée de la même manière pour obtenir un composant. Et ici, si nous y jetons un coup d'œil, la méthode get component la méthode get component recherche un composant de corps rigide, mais la signature peut être n'importe quelle autre classe ou composant. La valeur Get stats sera utilisée exactement comme le composant get, et nous pouvons également insérer une liste de différents types en tant que paramètre de liste de statistiques. Comme nous y utilisons également des génériques, nous pouvons effectuer des recherches dans de nombreuses listes, telles que le profil du tournage, données Mega Bom ou une autre Dans la méthode, nous voulons d'abord créer une boucle à quatre boucles, et nous voulons parcourir la liste des statistiques ici. Et pour accéder à la longueur, puisqu'il s'agit d'une liste, nous pouvons utiliser la propriété co. Tapons donc simplement stats do co. Ensuite, nous voulons vérifier si le nom de l'index des membres des statistiques de I est égal à la chaîne que nous avons recherchée. Cela est présenté comme argument ici. S'il est égal, nous pouvons utiliser la valeur du niveau comme index du membre statls que nous voulons renvoyer à cette méthode Tapons return puis stat. La liste est transmise comme deuxième argument et utilisons le niveau d' état comme index. Mais nous devons le soustraire un par un. Qu' il s'agisse d'une collection, d'une liste ou d'un tableau, cela commence à zéro. Mais les valeurs des niveaux commencent à un. La méthode génère toujours une erreur car dans ce code, tous les résultats ne renvoient pas quelque chose. Nous devons donc nous assurer qu'il renvoie quelque chose, même si le nom des statistiques n' a pas été trouvé dans la liste des statistiques. Pour résoudre ce problème, nous pouvons placer un code en dehors des quatre boucles ici et renvoyer une valeur par défaut de t. Nous devons renvoyer une valeur par défaut car tous les types d'objets ou de données ne sont pas nullables, et parce qu'il s'agit d'un générique Ensuite, créons une autre méthode pour obtenir l' heure de mise à niveau d'un élément évolutif Mettons-le sur public, puis il devrait renvoyer une gamme de fluides. Et nous pouvons appeler cela «   obtenir du temps de mise à niveau ». Ajoutons un paramètre de chaîne. Il suffit de l'appeler S name. Ce sera le nom que nous rechercherons. Et puis ajoutez une boucle à quatre dans la méthode. Nous voulons parcourir la liste des statistiques afin de pouvoir saisir le nombre de points des statistiques ici. Et nous pouvons simplement copier ce qui précède ici parce que nous voulons faire exactement la même chose ici. Mais au lieu de renvoyer le membre de la liste des statistiques, nous voulons renvoyer le temps de mise à niveau des statistiques, afin de pouvoir simplement l'obtenir à partir de l'index des membres de la liste de statistiques, puis effectuer le temps de mise à niveau pour obtenir la valeur du temps de mise à niveau Et ci-dessous, si la boucle n'a pas trouvé le nom de la statistique égal au nom de la statistique, nous pouvons simplement renvoyer la valeur nulle et vérifier si la valeur est nulle ou non plus tard en utilisant cette méthode. Pour la méthode suivante, nous voulons renvoyer l'objet d'information de mise à niveau des statistiques, qui serait le membre de la liste des statuts. Tapons simplement les informations de mise à niveau publiques puis statistiques comme type de retour et appelons la méthode à stats. Comme pour l'autre méthode, nous aurons besoin d'une chaîne et appelons-la simplement stat name. Examinons ensuite la liste des statuts. Nous pouvons simplement copier à partir du code ci-dessus. Mais au lieu de renvoyer la valeur du temps de mise à niveau, nous pouvons simplement renvoyer l'index des membres de statut de I. Et ci-dessous, si aucun des noms ne correspond, renvoyer n. Sauvegardons le script et revenons à Unity. Dans Unity, allons le dossier des scripts et dans le dossier des scripts de données, créons un nouveau script C sharp, que nous pouvons appeler élément de mise à niveau. Ouvrons ensuite le script. Une fois qu'elle est ouverte, supprimons simplement la méthode de mise à jour. Nous devons maintenant déclarer quelques variables. Mais avant cela, importons l' noms du système ci-dessus en le tapant en utilisant system. Nous devons également importer l'espace de noms de l'interface utilisateur. Et ci-dessous, avant de déclarer les variables, je vais créer un attribut d'en-tête avec les objets du menu de mise à niveau de la chaîne de titre. Ensuite, je vais coller les variables. abord, nous avons besoin d'une chaîne de variables appelée nom d'état, et la seconde est une chaîne appelée nom d'élément. Il s'agira du nom du composant affiché dans l'interface utilisateur de mise à niveau. Et le nom des statistiques sera l'identifiant des statistiques que nous pouvons utiliser pour récupérer les statistiques dans le gestionnaire de statistiques. Et ci-dessous, nous avons besoin ce tableau d'entiers pour maintenir les prix du composant à chaque niveau. Et ce type de variable privée devrait correspondre aux informations de mise à niveau des statistiques, afin que nous puissions encaisser les informations de mise à niveau pour ce composant évolutif de cet objet Sauvegardons le script, et nous allons continuer dans la prochaine vidéo. 40. 40 Statistiques et mises à jour, partie 3: OK, nous devons donc créer quelques méthodes avec cet élément d'amélioration. Le premier serait par mise à niveau. Ensuite, nous devons également créer la vérification de l'état des notes. Et pour commencer, nous allons récupérer notre statistique, cette statistique d' amélioration des objets Par exemple, si nous voulons mettre Snam sur l'inspecteur plus tard, nous allons récupérer la statistique dans notre gestionnaire de statistiques Désolé, les responsables des États obtiennent des statistiques et nous allons renseigner le nom de l'étape. Nous allons donc lui donner ce nom. Et avec ce nom d'étape, nous pouvons vérifier le prix. Donc, par exemple, actuellement, nous sommes au niveau 1, je pense. Oui. Ainsi, lorsque nous achetons la mise à niveau, nous pouvons vérifier cela. Si notre argent Si notre argent actuel, par exemple cet argent est supérieur ou égal au prix que nous avons ici, le niveau des prix. Mais c'est l'indice de notre niveau. Donc, si nous avons assez d'argent, nous effectuons la mise à niveau. Et ici, sinon, nous devrions faire passer un message, pas assez d'argent. Et nous créerons une fenêtre de dialogue ou un panneau modèle pour afficher un oui ou un non ou un message chaque fois que nous en aurons besoin. Ainsi, lorsque nous effectuons la mise à niveau, nous devons soustraire l'argent, S manager, cette instance ajoute de l'argent, et cette fois, nous devons le soustraire par une valeur négative de notre niveau de prix Donc, en gros, nous ajoutons cette valeur négative ici. Cela soutirera donc notre argent. Ensuite, nous devons ajouter une minuterie. Ainsi, par exemple, nous pouvons récupérer le Tr, je crois, Str, et nous pouvons ajouter le nom de l'état, notre nom d'état actuel. Et la valeur de notre date et heure. Nous devons donc ajouter la date et l'heure maintenant, je pense. Oui, c'est exact. le moment, c'est une méthode, mais il faut l'ajouter. Désolé, sans les parents. Apparemment, il s'agit d'une propriété, je crois que c' est en quelques minutes et nous avons besoin de la valeur de notre mise à niveau de statistiques. Il suffit donc de récupérer la mise à niveau des statistiques depuis l'instance de set manager, et nous avons déjà préparé la méthode appelée get upgrade time et y avons mis le nom. Mais comme cela a renvoyé un tableau flottant, si vous vous souvenez ici, comme nous pouvons le voir ici, il renvoie le tableau flottant. Nous devons trouver quel index. Donc, pour obtenir quel index, nous utilisons simplement le niveau des statistiques. Parce que nous utilisons également le niveau pour notre niveau de prix, et nous utilisons également le niveau pour notre période de mise à niveau. Il utilisera toujours la même valeur pour nos prix et notre durée de mise à niveau. Une fois la mise à jour effectuée, nous devons démarrer la routine ici. Mais nous n'avons pas déclaré cette routine, donc tout va bien, et nous pouvons simplement ajouter un journal mettant à jour le nom des statistiques que nous avons ici. OK. Et si nous n' avons pas assez d'argent, nous pouvons simplement montrer que nous n'en avons pas assez. OK, sauvegardons ça. La prochaine chose que nous devons faire, probablement, nous devons d'abord créer la routine de base. Tapons le numérateur et appelons cette mise à niveau. Et pour cela, faites d'abord, nous voulons définir le lingot d' amélioration, c'est vrai Et chaque fois que nous le terminerons plus tard, nous voulons le remettre à Falls. Donc, ci-dessous, nous voulons créer un objet temporel. Et cela ne sera disponible que si nous utilisons la bibliothèque du système de collecte ici. Assurez-vous donc de le faire et de ne être disponible que si nous l'utilisons. Et je vais nommer le temps qu'il reste. Et ce sera le jour, selon notre gestionnaire de statistiques. Monsieur, mais nous allons récupérer nom de notre étape en utilisant notre temporisateur d'état, et nous voulons maintenant le soustraire avec notre date et heure Il nous reste ce laps de temps, et maintenant nous pouvons le calculer. Nous devons créer un moment ici. Si le temps restant est supérieur à zéro, et nous voulons continuer sur cette voie. Je vais mettre à jour le temps qu'il nous reste ici. Et une fois terminé, il sera imprimé, le débogage finira de mettre à jour notre nom de set ici Bien entendu, nous voulons effectuer la mise à niveau. Nous devons maintenant créer une fonction pour effectuer la mise à niveau. Mais pour le moment, nous avons une erreur ici. Nous devons y retourner au moins une fois, comme toujours. Pour le temps restant, nous devons vérifier le nombre total de secondes. Tant que la seconde totale est supérieure à zéro, et que nous voulons continuer comme ça, regardez ceci. Une fois que c'est terminé, nous allons passer à ce bloc de code ici. Nous devons maintenant créer une méthode qui augmentera nos statistiques. Nous allons donc augmenter notre niveau de statistiques. Nous allons maintenant appeler cette statistique accrue ici. Mais il y a une possibilité. Nous allons terminer ou nous allons accélérer le démarrage progressif pendant que la coroutine est en cours d'exécution. Nous voulons vérifier cela. Heureusement, nous avons créé ce boulon et ce bulon sert à marquer notre coroutine . Est-ce qu'il fonctionne ou non ? Nous pouvons donc vérifier cela en utilisant la commande « Si la mise à niveau est vraie », puis nous voulons arrêter toutes les corroutines actuellement en cours d'exécution dans cette classe d'objets de mise à niveau Et cela ne sera pas localisé mais uniquement sur cette instance, donc cela n'affectera pas l' autre coroutine d'instance qui s'exécute sur l'instance leper Lorsque nous arrêterons la mise à niveau ici, nous voulons également redéfinir cette mise à niveau sur false Maintenant, nous l'avons déjà fait ici. Sauvegardons cela et nous pouvons démarrer la coroutine ici. Commençons simplement la routine. Effectuez une mise à niveau. OK. Donc comme ça. Disons cela et nous devons encore développer ce script, bien sûr, mais voyons comment il fonctionne. Je vois que nous avons une erreur ici. Alors vérifions-le. Nous avons donc besoin plus de parents parce que nous avons deux ouvertures, comme vous pouvez le voir ici, nous avons trois ouvertures, nous devons donc les fermer trois fois, comme vous pouvez le voir ici. Maintenant, nous allons créer la sécurité et retourner à l'unité. OK. Nous allons créer le bouton de mise à niveau. Nous allons donc d'abord créer un objet de jeu vide, et ce sera la zone de menu. Et je vais placer l'ancre sur les bords ici et laisser des espaces 150 sur le côté est, et pour le sommet probablement 200 ou 250 sur 250. OK. Ce sera donc le panneau de la boutique. Et le panneau de boutique, nous avons un groupe ertallayout Donc, ce que fait réellement ce composant c'est organiser automatiquement notre objet enfant verticalement Ainsi, par exemple, si je crée une zone de boutons, disons qu'il s'agit de l'élément d'amélioration. Et je vais changer ça. 600240 devrait suffire. Et je crée, disons, une image, et je vais l'étendre jusqu'à la partie inférieure, la remplacer une valeur plus petite comme celle-ci et la mettre juste en dessous ici. Comme vous pouvez le voir, si je duplique cet article, il s'affichera automatiquement en dessous du premier, et si j'en mets plus, il remplira l' écran comme ceci. C'est ce que fait la mise en page verticale. Nous allons maintenant créer l'élément de menu ici. abord, nous devons créer une taxe et ce texte serait le nom de notre article. Alors mettons-le simplement ici. Mais d'abord, je veux créer une zone vide. Je vais créer un espace vide et je vais le mettre sur notre site ici. Comme ça, mais je vais régler la largeur à environ 125 ou peut-être plus, 250, et ce sera la zone des icônes. Et ce serait le nom donné ici à la, mais je pense que l'icône est grande, alors faisons en sorte qu'elle soit plus petite. 200 devraient suffire. Positionnons-nous sur 100 et faisons glisser cette image que nous avons créée en tant qu'enfant de cet objet de jeu et nous la remplissons ainsi à l'aide de cette touche. Mais je vais taper en bas, je crois, 50 pixels, comme ça. Et nous allons créer un bouton, un bouton. Et ce serait le bouton. Oh, c'est le bouton, désolé, je crois que j'ai cliqué sur le mauvais élément Donc, pour ce qui est de l'élément de porte, je veux créer une interface utilisateur C, et ce devrait être le bouton. Et ce serait le bouton. Pouvons-nous le mettre ci-dessous ici, et nous pouvons augmenter le montant de la taxe sous le bouton ici. En utilisant le meilleur ajustement, nous pouvons l'augmenter et simplement renommer les deux ici pour le moment Pour le texte, nous allons utiliser la police du visiteur ici, celle qui convient le mieux, et nous allons simplement augmenter la taille ici. Et placez-le en haut ou en haut à gauche en haut à gauche en haut à droite et changez la couleur en orange que nous avons déjà en tant que préfabriqué et nous pouvons augmenter la taille maximale C'est bon à 60 ans, par exemple, a, ce serait notre objet d'amélioration, et nous pouvons ajouter le script de l'objet d'amélioration à cet objet de jeu ici. Peut-être que le premier point que nous pouvons régler sur la santé et le point devrait également être la santé. Le texte du nom de l'objet serait notre objet de jeu ici, et le texte secondaire serait le texte du bouton garçon. Et pour le bouton by, ce serait le parent du texte ici. Donc, l'objet du bouton. Et cette barre de niveau serait le curseur pour montrer à quel niveau nous nous trouvons actuellement Et c'est le niveau des prix, je pense que nous devrions en ajouter à 52. Et comme nous avons déjà le premier niveau, nous avons déjà le premier niveau, nous pouvons donc simplement laisser le premier niveau 20, et nous pouvons changer le second, peut-être 200, puis le troisième, 250, le quatrième, 300 et le moins, 250. Mais bien sûr, nous pouvons changer cela et avec cette configuration, nous pouvons avoir des prix indépendants pour chaque article. OK. OK. Revenons maintenant à notre script. Et au début, une fois que nous aurons obtenu les statistiques ici, nous voulons que vous mettiez à jour notre taxe ici. Mettons donc simplement à jour le texte du nom de l'article et nous pouvons insérer le nom de l'article en tant que nom upm Et pour le texte d'achat, nous pouvons obtenir le prix. Voici la bonne chose que nous avons ici. Nous pouvons obtenir ce niveau de prix, le 1er niveau. Les prix se stabilisent ici. Et comme je pense qu'il s'agit d'un entier, nous devons le convertir en chaîne afin de pouvoir utiliser cette méthode string To string. Elle le convertira . Maintenant nous devons attribuer un écouteur à notre bouton by, afin que nous puissions accéder à l'écouteur by button en accédant à l'événement click ici et en ajoutant Et pour cet écouteur publicitaire, nous pouvons saisir une action. Il s'agit essentiellement d'une méthode L'action est une méthode sans paramètre, et nous pouvons simplement utiliser cette mise à niveau ici. OK, sauvegardez-le. Maintenant, si nous démarrons cela, le bouton d'achat l' exécutera automatiquement chaque fois que nous cliquerons dessus Faisons-le ici. Jouons à ça. Et ici, si nous allons voir notre game manager, nous n'avons pas d'argent. Donc, si nous cliquons dessus, cela nous indiquera que nous n' avons pas assez d'argent. Mais par exemple, si j' augmente cet argent à 500 dollars et que j'appuie ensuite sur le bouton suivant : «   Maintenant, cela améliore la santé et notre argent est réduit par le montant de cet Et vous pouvez voir ici, si je passe à notre élément de mise à niveau et que j' active le bogue ici, nous pouvons voir que nous sommes en train de procéder à une mise à niveau. Et j'ai oublié que nous devions vérifier l'état de santé. La première, je crois, dure 4 minutes. Il faudra donc 4 minutes pour terminer cette mise à niveau, qui est trop longue. Donc, pour tester cela, je veux arrêter cela. Et il y a une chose que nous pouvons faire. Nous pouvons modifier notre taxe ici. donc Copiez donc ceci par texte ici, et nous pouvons utiliser les données de chaîne. Je pense que c'est ce format de chaîne. Et ici, nous devons taper une chaîne de données, mais nous pouvons utiliser un format. Par exemple, nous pouvons utiliser ce 0,00 avec un crochet bouclé. Et nous pouvons ajouter un Caln complet l'autre étant un point, Colon 00 Et il s'agit en fait d'un formatage, qui indiquera la date et l'heure ou les minutes et secondes qu'il nous reste avant cette mise à niveau Et il suffit de taper ici le temps restant. Désolé. Nous pouvons obtenir les données restantes, la période, et cette période contient en fait beaucoup d'informations. Il contient le procès-verbal. Et aussi le temps restant pour le deuxième format, et ce seraient les secondes. Avec cet ensemble, chaque fois que nous mettons à jour quelque chose, nous pouvons le voir en cours sur notre bouton. Essayons maintenant de le faire. Je vais remettre les choses à la normale, inspecteur Essayons d'y rejouer et nous pourrons étendre notre gestionnaire de jeu ici et ajouter de l'argent. Et appuyez sur ce bouton, et il affichera la mise à niveau à gauche. Et puisque nous avons aidé à passer au niveau supérieur, il faut 4 minutes. Cela montre donc qu'il nous reste quatre minutes et qu' il est toujours en cours de mise à niveau. Et une fois que nous aurons fini de l'améliorer, cela augmentera notre niveau ici parce que nous appelons augmentation et augmentation augmente notre niveau ici. Nous pouvons donc simplement l'essayer comme ça. Je vais d'abord changer l' argent à 500 et nous pouvons régler le premier élément, par exemple, à une demi-seconde demi-heure de minutes 30 secondes. Essayons donc d'y jouer et appuyons à nouveau sur le bouton. Comme vous pouvez le constater, nous avons 30 secondes, et je vais lancer cette course, afin que nous puissions voir, une fois que ce sera fait, cela augmentera le niveau de notre État ici. Et une fois que nous aurons augmenté le niveau de l'État, il choisira largement nos deuxièmes entrées parmi celles qui sont bloquées. Nous aurons donc un montant détenu plus important. Trois, deux, un, zéro. Quand c'est fait, comme vous pouvez le voir ici, notre niveau augmente. Mais notre bouton d' achat ne revient pas aux prix que nous avons pour le niveau suivant, nous pouvons donc régler ce problème. Donc, pour résoudre ce problème chaque fois que nous terminons ou que nous augmentons les statistiques, nous devons réinitialiser le texte de notre bouton au niveau de prix suivant. Copions donc cette ligne ici, et nous pouvons simplement la mettre dans les statistiques augmentées. Pourquoi le mettons-nous ici ? Parce qu'ici nous augmentons notre niveau. Et puis, une fois que nous augmenterons, lorsque nous mettrons à jour le niveau de prix, il utilisera le nouveau niveau qui vient d'être amélioré. Nous allons donc fixer les nouveaux prix et cela sera répercuté sur la taxe d'achat ici. Donc, si nous voulons le tester à nouveau, nous pouvons simplement le ramener à une très petite valeur. Par exemple, ou si nous essayons de jouer à ceci, nous pouvons le voir. avons maintenant 200. Si nous passons à notre système de mise à niveau, le premier est de 200, mais le suivant devrait être de 250. Essayons donc de le faire. Au bout de cinq secondes, nous pouvons voir que cela va vous changer. Nous avons maintenant terminé la mise à niveau afin de passer à moins de 250 points en termes de pièces. Nous avons maintenant le niveau deux. Nous avons encore plus d'argent que notre prix ici, nous pouvons donc simplement l'améliorer à nouveau. Il y a une erreur. Un élément avec la même clé existe dans la zone supplémentaire. Une autre chose que nous devons faire chaque fois que nous terminons la mise à niveau, nous devons supprimer notre entrée de date et d' heure sur notre Satter. Chaque fois que nous effectuons une mise à niveau, elle en créera une nouvelle et elle ne peut pas avoir deux entrées avec le même nom d'état. Nous pouvons donc simplement copier ce Satter ici. Et une fois la mise à niveau terminée , nous pouvons simplement le supprimer. En utilisant la touche remove et need the string afin que nous puissions utiliser le nom défini. Essayons de le simuler à nouveau. Réglons ce paramètre à 0,2 pour le second. OK, rejouons-le. Je vais l'améliorer et il faut 5 secondes pour le mettre à niveau et une fois terminé, il devrait améliorer notre niveau. Oui, j'ai amélioré notre niveau et augmenté le prix également. Et si j'appuie à nouveau sur Play, comme vous pouvez le voir maintenant, cela prend 11 secondes. Et une fois cela terminé, cela améliorera à nouveau notre niveau. Maintenant, nous avons besoin de 300 pièces pour l'améliorer, et si nous appuyons dessus, cela nous indiquera que nous n' avons pas assez d'argent. Donc oui, c'est le système de mise à niveau de base, et nous devons encore développer davantage notre script. Nous devons ajouter une boîte de dialogue pour indiquer à l'utilisateur s'il souhaite effectuer une mise à niveau ou non, et nous devrions également ajouter une sorte d' accélération de la mise à niveau, afin que l' utilisateur puisse dépenser plus d'argent. Et accélérez le processus de mise à niveau en omettant cette étape. Et nous devrons également créer un système d'épargne. OK. 41. 41 Point de mise à niveau poursuivi: Poursuivons maintenant nos améliorations, et je pense que nous pouvons modifier le bouton bi pour qu'il soit plus conforme à notre design ici. Je vais passer à l'objet matraque, et pour l'image source, prenons la barre en U, le cadre de l'interface utilisateur Ici, nous pouvons choisir la couleur que nous avons enregistrée comme préférence pour le texte, nous pouvons changer le style de police pour celui du visiteur et changer la couleur pour qu'elle soit également la même orange que celle que nous avons ici Peut-être pouvons-nous modifier la taille de notre bouton pour agrandir légèrement et également augmenter la taille de notre texte ici. Comme ça, pour mieux le lire. Et maintenant, nous devons créer une sorte d'effet de curseur pour montrer à quel niveau se situent actuellement nos statistiques ici Sélectionnez donc l'élément de mise à niveau, et je vais créer une nouvelle interface utilisateur, qui serait un curseur Mais ici, nous allons changer un certain nombre de choses. En gros, je vais supprimer l'arrière-plan. Je vais supprimer la zone de glissement de la poignée, et nous allons simplement utiliser la zone de champ ici Et pour le slider, nous allons changer la valeur minimale, désolé, la valeur maximale à cinq puisque nous avons cinq niveaux Et comme vous pouvez le voir, si je le déplace, nous avons un bel effet de curseur Je vais donc augmenter cette taille ici. Je vais donc peut-être le mettre ici et le rendre assez long, et nous pourrons relever la barre ici. Et je vais créer une nouvelle image ci-dessous. Et d'abord, je vais changer la valeur de notre curseur à la valeur maximale, afin que nous puissions voir la position, et je vais mettre notre image à la même position que notre curseur Et je vais régler cette image que je pense que ce devrait être notre bar ici. Ouais. Les cinq barres de l'interface utilisateur. Comme vous pouvez le voir, nous avons une sorte de boîte à cinq cases, que nous allons utiliser comme masque. Ce serait notre masque coulissant. Pour le définir comme masque, nous devons ajouter un composant, le composant de masque, le composant de masque, et nous pouvons faire glisser notre curseur pour qu'il devienne l' enfant de notre masque ici Et nous pouvons également masquer notre objet de masse en décochant la case Afficher le graphique de masse ici Et si vous pouvez le voir ici, si je change la valeur, disons à un : Désolé, c'est deux, un. Nous en avons un et deux, trois, quatre et cinq. Mais vous pouvez voir ici que si je mets ce 21, nous n'avons pas la position exacte. Je vais donc remplacer notre illustration d' objet de remplissage ici par une image normale. Je pense que nous devrions avoir celui-ci. OK, Carly, nous l'avons, mais nous devons changer notre objet de masquage ici Alors, déplaçons ça un peu ici. Et maintenant, nous pouvons simplement redimensionner notre masque pour qu'il soit parfaitement découpé, et nous pouvons essayer de modifier notre valeur ici aussi. Ça a l'air bien. Trois semblent également acceptables nous pouvons changer l'échelle de notre masque coulissant depuis le côté droit, comme vous pouvez le voir pour couper la forme arrondie à l' extrémité ici et passer au curseur, et je vais régler ce paramètre à 25 OK. Ouais. Nous devons maintenant rendre le masquage plus petit que celui de notre objet enfant, afin de ne pas voir la forme arrondie sur les bords Et pour la zone de champ, je vais changer la couleur en orange ici, le présent que nous avons. Et maintenant, nous pouvons repositionner parent de masse de notre curseur, il s'aligne sur notre texte Et pour le curseur ici, nous pouvons d'abord le régler sur un Maintenant, si nous sélectionnons notre heure de mise à niveau, nous déclarons déjà notre barre de niveau d'objet et il s'agit d'une sorte de curseur, comme vous pouvez le voir dans notre script Nous l'avons déjà réglé. Je vais maintenant diriger l'objet curseur et m' assurer que vous dirigez l'objet enfant, le curseur de masse, mais que vous dirigez notre objet enfant ici, le curseur, et que vous le dirigez vers notre barre de niveau d'article Et sauvegardez la scène. Maintenant, si nous passons à notre script, nous pouvons simplement mettre à jour la valeur ici, et chaque fois que nous la définissons par texte, désolé, nous pouvons également définir la valeur de notre curseur ici au niveau de notre état Et nous pouvons simplement copier cette ligne ici, et chaque fois que nous augmentons, nous pouvons également mettre à jour notre barre de niveau des articles. Alors maintenant, si nous essayons de le mettre à niveau et que nous pouvons vérifier notre gestionnaire de jeu qu' il nous reste 500 dollars, et que nous changeons le chronomètre dans notre gestionnaire de jeu qu' il nous reste 500 dollars, et que nous changeons le chronomètre de notre système de santé, alors essayons. Dans cinq secondes, cela devrait être mis à jour. OK. Ouaip. Nous avons maintenant le deuxième niveau de notre santé, une santé plus forte. Et si nous le mettons à jour à nouveau, cela augmentera à nouveau notre niveau. OK, voilà. Et maintenant, nous n'avons pas assez d'argent pour effectuer la mise à niveau. Donc, si nous appuyons dessus, cela indiquera qu'il n'y a pas assez d'argent. OK. Et je pense que cela devrait être dû à nos options de mise à niveau. La prochaine chose que nous devons faire est en fait la fenêtre du modèle pour afficher une option chaque fois que nous voulons effectuer une mise à niveau ou non. Et si nous n'avons pas d'argent, nous devrions avoir un feedback dans notre vue du jeu ici en utilisant cette fenêtre du modèle ou la boîte de message. 42. 42 Systèmes de dialogue: Créons maintenant notre fenêtre de modèle. Ici, sous notre canevas, nous allons créer une nouvelle zone, créer une zone vide, et sous notre scène, je vais créer une fenêtre, peut-être pas trop grande, environ 400 en largeur ou 500 en largeur devraient suffire et environ 300 en hauteur. Ou agrandissez-le, 600400 et nous allons ajouter une image ici et en faire peut-être une couleur noire plus foncée, mais avec une légère transparence Réglé pour traduire à 75, nous aurons donc quelque chose comme ça Et pour l'autre chose que nous devons faire , c'est renommer sa fenêtre de dialogue beaucoup plus claire Désolée. Ce que nous devons faire, c'est d'abord le dupliquer, et ce sera notre fenêtre de dialogue ici, l'objet enfant et l'objet enfant devraient remplir la taille de notre parent. Pour la taille du parent, nous voulons supprimer le script d'image, et renommons simplement ce système de dialogue Ce sera celui qui contient le script de la fenêtre de dialogue, et nous devrons activer ou désactiver cet objet enfant. Une autre chose que nous devons faire est de créer un enfant fiscal sous l'objet de jeu de la fenêtre de dialogue. Je vais donc le créer et simplement taper un espace réservé Et je vais également l'adapter à la taille de notre objet de fenêtre, mais je vais changer quelques points. En bas, je vais le mettre à 100 et pour la taille supérieure, il faut 15, il reste 15, également 15 ou peut-être une valeur plus grande, 25. Et je vais changer cela visiteur, changer la couleur orange et définir le meilleur ajustement pour permettre le meilleur ajustement et définir le maximum de 5250 Et aussi, je vais changer l'alignement au milieu et aussi l' alignement vertical au milieu. Et ce sera notre fenêtre de message. Et une autre chose dont nous avons besoin pour créer un espace vide et ce sera notre porte-bouton. Je vais donc l'aligner sur la partie inférieure de notre fenêtre de dialogue ici. Je vais donc maintenir le bouton enfoncé pendant que nous parcourons nos préréglages d'ancrage ici et choisir celui-ci Il s'adaptera donc parfaitement à notre zone inférieure, et il a une hauteur de 100, il ne se chevauchera pas avec notre texte car notre texte a également un plafond de 100 sur la zone inférieure Cela remplira donc cette zone anti-zone ici, et nous pourrons ajouter un groupe de mise en page horizontal. Et le groupe de mise en page horizontal se comporte exactement de la même manière que le groupe de mise en page vertical Mais dans ce cas, il alignera ou disposera le groupe sur un axe horizontal. Ce serait donc notre groupe de boutons. Et pour notre groupe de boutons, je vais créer un nouveau bouton, ou je vais copier le bouton de notre mise à niveau ici Je vais donc appuyer sur la commande D depuis notre bouton par, et je vais créer cet enfant de notre groupe de boutons ici, afin qu'il le remplisse. Et ce sera le bouton A. Et nous allons modifier l'alignement de notre groupe d' horizontalités par rapport au centre Il sera donc placé par défaut au milieu et au centre. Et si nous dupliquons ce bouton, il occupera encore moins d'espace dans notre fenêtre de dialogue ici Nous allons donc remplacer le second par le bouton B. D'accord, nous avons maintenant cette fenêtre de dialogue configurée. Nous devons créer un script pour cela. Passons donc à notre dossier de scripts et à nos scripts de données Je vais créer un nouveau script CHO, et je vais appeler ce gestionnaire de dialogue. OK. Et je vais ouvrir ce gestionnaire de dialogue. Et la première chose à faire, c'est de changer, désolé, pas de changer. Nous devons ajouter une variable publique statique, et ce sera le type de gestionnaire de dialogue lui-même. Nous allons donc définir une instance statique du script. Il sera donc plus facile d' y accéder depuis un autre script. Et je vais supprimer notre méthode intégrée ici, et je vais utiliser la méthode faible, et je vais configurer l' instance sur le script ici. Cela fonctionnerait donc comme notre gestionnaire légal, comme vous pouvez le voir ici Et la différence entre le gestionnaire de niveaux, le gestionnaire de numérotation et entre et le gestionnaire de statistiques. Le directeur des États, ce sera Singleton et ça persistera entre les scènes Comme pour le gestionnaire de niveaux ou le gestionnaire de dialectes, il ne sera pas conservé entre les scènes Nous devons donc maintenant créer quelques éléments ici. abord, nous devons utiliser l'interface utilisateur du moteur Unity, je vais donc simplement l'ajouter. Et maintenant, nous avons besoin de quelques références à notre système d'interface utilisateur. Donc, la première chose à laquelle nous devons avoir accès est le message texte et le bouton texte ou taxe et pour le texte. Et nous avons également besoin d' une référence à notre bouton et à aucun bouton. Et ce sera le type de bouton. OK. Nous pouvons donc maintenant créer deux méthodes différentes. Et le premier sera un show dialogue. Et pour le dialogue de l'émission, nous aurons besoin de quelques variables. Donc, dans le premier cas, nous aurons besoin du paramètre du message. Nous avons également besoin d'une référence d'action. Donc, des actions d'unité. Mais si je tape unit action, nous ne l'avons pas car nous devons importer l'événement point du moteur Unity. Importons donc simplement cet événement du moteur informatique. Et une fois que nous l'aurons importé, nous aurons accès à l'action Unity, et ce sera l'action Oui. Et le second serait l'action Unity contre notre inaction. Et je vais définir cette valeur par défaut, afin que nous n'ayons pas à définir les actions à chaque fois que nous appelons ce dialogue, il sera réglé sur. Je vais donc créer une chaîne, désolée, pour la taxe et celle-ci sera définie par défaut sur yes. Donc, si nous créons un paramètre et que nous ajoutons un signe égal avec une valeur après les noms des paramètres, il lui attribuera une valeur par défaut. Donc, si nous appelons cette méthode sans spécifier ces paramètres, cela ne nous donnera pas d'erreur. Il utilisera plutôt cette valeur par défaut ici. OK. Ce que je vais faire, c'est la chaîne no tax, et elle sera définie par défaut sur non. Mais si vous le souhaitez, vous pouvez le remplacer en spécifiant une nouvelle chaîne dans ce paramètre lorsque vous appelez ce dialogue d'affichage OK, maintenant, une fois que nous déclaré, si vous avez déclaré tous les paramètres, je pense que je vais entrer ceci. Nous avons donc deux lignes de méthode ici, afin que nous puissions le voir clairement et que nous puissions clore cette définition de méthode. Et maintenant, nous allons vous montrer notre panel. Une autre chose à laquelle nous avons besoin d'une référence est le panneau d'objets du jeu lui-même. Et dans Awake, je vais désactiver le panneau. Je vais donc régler le panneau sur false set active. Et maintenant, nous devons attribuer le message à notre message texte. Donc d'abord, je vais mettre à jour notre message à Seth Okay. Oh, désolée, car nous utilisons le même nom ici. Cela montre donc une propriété que nous n'avons pas. Nous devrions utiliser celui-ci. Je vais donc simplement renommer ce message de dialogue. Et je pense que cela poserait également un problème. Mettons donc simplement le paramètre en majuscule ici. Oui, texto et non texto. Ouais. Maintenant, je vais accéder à l'objet de notre message de dialogue ici, le message texte, et je vais modifier le texte et le définir comme notre message que nous transmettons via la méthode ici. Et pour le texte, nous allons également le définir notre texte à partir du paramètre ici, et je vais copier cette ligne ici et la dupliquer, et ce sera notre texte, et nous pourrons l'obtenir à partir de notre texte à partir du paramètre. Et d'abord, nous allons attribuer actions ou méthodes du bouton que nous pouvons transmettre à partir d'un autre script. Et je vais vérifier si aucune action n'est nulle, puis je vais passer un bouton, désolé, cliquer. Un écouteur, juste par un bouton ici, celui-ci. Je pense que c'est celui-ci. Si vous consultez notre article de mise à niveau, nous attribuons une méthode à notre bouton par, et nous allons faire de même avec cela Mais dans ce cas, nous allons créer une méthode privée, et ce ne sera que pour désactiver notre panneau. Et à l'intérieur de celui-ci, nous allons accéder à notre panneau, activer et définir ces deux chutes. Et nous allons désactiver le panneau ici. Et bien sûr, nous voulons ajouter une action au bouton Non si l'action ne l'est pas. Non Ensuite, nous voulons OK, je pense que ce sera plus facile si nous le faisons. Donc, copions simplement ceci. Je vais l'ajouter ici et nous n'en avons pas besoin. Mais si ce n'est pas nul, nous voulons également ajouter cette action. Je vais donc ajouter l'écouteur et utiliser le paramètre no action que nous avons transmis depuis notre méthode ici, afin qu'il remplisse la méthode que nous avons placée dans cette action unitaire, aucune action ici Et l'autre chose que nous devons faire est d' accéder à notre bouton Oui. Désolé, bouton après clic, nous devons ajouter Listener à notre bouton en utilisant l'action ici Donc, ces deux paramètres, nous devons utiliser cette numérotation. Mais avec le bouton Non, nous n'avons pas à mettre une action nulle car si nous n'avons aucune action, cela n'ajoutera qu'un écouteur désactivé ici Et nous voulons nous assurer que nous avons effacé tous les écouteurs précédents avant d' assigner un nouvel écouteur Tapons donc simplement le nouveau bouton en cliquant, et utilisons la méthode de suppression de tous les auditeurs Et pour le bouton « non », nous ferions de même. Supprimez tous les écouteurs ici. Et nous devons créer une autre méthode, qui sert à afficher le message. Je vais donc le copier ici et le coller et ce sera un message d'affichage. Et pour ce message, nous n'avons pas besoin du paramètre, il suffit d' afficher le message. Nous allons donc définir le texte sur k ici, et nous allons supprimer l'écouteur ici Et pour l'ajout d'un écouteur, je vais simplement ajouter un panneau désactivé En gros, ce message d'affichage sert uniquement à afficher le message, et lorsque nous appuyons sur OK, le panneau se ferme, et nous devons masquer notre bouton non Nous pouvons donc y accéder en accédant au bouton non ici, objet du jeu, car ce composant du bouton sera sûrement attaché à certains objets du jeu. Nous pouvons donc accéder à son objet de jeu et activer ces deux chutes. Et ici, nous devons définir le bouton pour activer, car il se peut que nous affichions le message avant et qu'il soit réglé sur false. C'est caché. Et lorsque nous affichons ce dialogue, si nous ne le définissons pas sur true et que le bouton « Non » reste masqué, nous devons donc réinitialiser cette valeur ici, enfin, nous devons activer notre panneau. Tapez donc set active T pour notre panneau, et il en va de même pour notre message d'affichage. Nous devons activer Tro. Maintenant, nous en avons presque terminé avec notre gestionnaire de dialogue, et c'est une fonction plutôt intéressante, que nous allons réutiliser souvent, et vous pourrez également l'utiliser pour votre autre projet. Bien sûr. Maintenant, si je passe à notre système de mise à niveau, comme vous pouvez le voir ici, chaque fois que nous n' avons pas assez d'argent, nous pouvons simplement afficher le message en utilisant l'instance du gestionnaire de dialogue, et nous pouvons afficher le message. Et nous pouvons taper « vous n' avez pas assez, désolé, assez d'argent pour augmenter l'espace », puis vous pouvez ajouter le nom de votre État ici comme ceci. Et une autre chose que nous pouvons faire est qu'ici, fois la mise à niveau terminée, nous pouvons simplement utiliser ce message d'affichage. Oui, quelque chose comme ça ? Ouais. Et nous allons avoir besoin de beaucoup plus de ce gestionnaire de dialogue ici. Par exemple, pour la mise à niveau, nous pouvons demander si nous avons assez d'argent. Voulons-nous faire la mise à niveau, et cette fois, nous allons utiliser le gestionnaire de dialogue, par exemple show dialogue. Et pour le message, nous pouvons ajouter voulez-vous vraiment mettre à jour le nom de votre statistique ici, et voici la chaîne, et nous devons attribuer l'action. Et pour ce qui est des actions, nous avons besoin de tout cela pour les exécuter. Mais comme vous pouvez le voir , il s'agit d'une action. Nous pouvons donc créer une sorte de délégués. Pour ce faire, vous devez créer un ensemble de parenthèses, le signe égal et le signe de la flèche droite avec des crochets d'ouverture et de fermeture Nous pouvons donc mettre tous les codes ici, et cela agira comme une action unique. Donc, découpons-le et collons-le découpons-le et collons-le ici et je vais commenter ce journal ici. Maintenant, nous intégrons tous nos blocs de code de mise à niveau dans nos actions « oui » en utilisant ce délégué ici. Ce sont des expressions d'alma, et vous devez mettre le signe égal, les parents, ouvrir et fermer, puis la flèche droite, puis ouvrir les ensembles et fermer le crochet bouclé Et puis, comme d'habitude, à la fin de la ligne, vous devez fermer ceci car il s'agit toujours d'une ligne de ce dialogue d' émission ici. Nous l'étendons simplement pour mieux le lire , et nous pouvons l'enregistrer. OK. Passons maintenant à notre scène, revenons en arrière et nous devons configurer notre système de dialogue. Dans notre système de dialogue, sélectionnez l'objet parent, qui est le système Dig, et non la fenêtre de dialogue puis faites glisser notre gestionnaire de dialogue ici. Et maintenant, nous devons le remplir. Pour la variable de panneau, nous pouvons simplement faire glisser notre fenêtre de dialogue. Et pour ce qui est du message de dialogue, nous pouvons indiquer ici notre principale taxe. Et pour le texte S, nous devons ouvrir notre bouton, et celui-ci se trouvera sur le côté gauche et non sur le bouton droit. Je vais donc faire glisser le texte du bouton B vers le texte sans texte. Et pour le bouton S, nous pouvons faire glisser l'objet du bouton et le bouton B vers le bouton ici. OK. Sauvegardons la scène ici et essayons de l'exécuter. Maintenant, si je l'exécute, il sera masqué car nous cachons le panneau de la fenêtre d'accès à distance au démarrage ou au réveil. Et si j'appuie sur le bouton ici, ce sera comme avant la mise à niveau. Voulez-vous vraiment améliorer votre santé ? Et si vous sélectionnez Non, cela désactivera notre panneau de fenêtre d'accès à distance, tout comme celui que nous avons défini ici. Et si nous appuyons sur « et la mise à niveau sera effectuée, comme vous pouvez le voir ici. Mais nous avons un problème. Une fois que nous avons appuyé sur Oui, cela ne masque pas notre fenêtre, mais elle reste. Nous devons donc corriger cela. Il y a donc une chose que j'ai oubliée. Après avoir ajouté l'action à notre bouton Oui, nous devons également ajouter la fonction de panneau désactivée. Vous pouvez donc ajouter autant d'auditeurs. Et en gros, si vous le faites, cela remplira notre bouton sur l'événement de clic ici. Tout comme si vous assignez une fonction manuellement vous pouvez définir ici autant de fonctions que vous le souhaitez, et c'est ce qui est réellement fait lorsque nous ajoutons Listener Mais cela ne se voit pas sur l'inspecteur. Je vais donc supprimer tous les événements onclick ici. Enregistrez donc la scène ici et comme j'ai déjà ajouté le panneau sable, cela devrait résoudre le problème. Essayons à nouveau et si la mise à niveau demande une mise à niveau, si j'appuie, tout ira bien. Pourquoi l'ai-je enregistré ? Oh, désolée. Je n'ai pas sauvegardé notre gestionnaire de dialogue. J'ai donc enregistré ceci, et Unity compilera la mise à jour sur le script. Et une fois terminé, cela devrait résoudre le problème. Vous souhaitez effectuer une mise à niveau ? Oui, il masque notre panneau, et une fois terminé, il affichera un message. Et avec le message, il n'affichera qu'un seul bouton au milieu car nous utilisons ce groupe de mise en page horizontal. Terminez la mise à niveau, et si nous appuyons dessus, la demande sera à nouveau posée. Si j'appuie sur Non, il ne sera pas mis à jour. Donc oui, c'est à peu près le cas avec notre système de dialogue. Et dans la vidéo suivante, nous allons affiner notre interface utilisateur et également créer un système et un système de chargement sûrs. OK. 43. 43 Systèmes de sauvegarde: Dans cette vidéo, nous allons continuer à travailler sur le système de mise à niveau et nous allons également implémenter le système sécurisé. Avant de continuer, nous devons ajouter quelques éléments dans le script de l'élément de mise à niveau. Tout d'abord, nous devons commencer à implémenter la méthode de vérification de l' état de mise à niveau. Cette méthode sera utilisée pour vérifier la progression de la mise à niveau une fois que nous aurons chargé la progression sécurisée. abord, nous devons vérifier si une mise à niveau est en cours. En vérifiant le contenu du dictionnaire Satter à l'aide de la méthode contains key, nous pouvons vérifier si Sattimer possède une clé contenant cet élément en passant la variable stat name Si c'est le cas, cela signifie qu' une mise à niveau de cet objet est en cours. Dans la déclaration, nous devons également vérifier si l' heure précise est passée ou non. Je vais ajouter une autre instruction, vérifiera si la date et l'heure actuelles en utilisant la propriété now sont inférieures ou n'ont pas atteint l'heure de fin indiquée dans le chronomètre des statistiques du gestionnaire de statuts. Nous pouvons transmettre le nom de la statistique à l'aide d'un crochet pour obtenir le temps d'achèvement correct dans le dictionnaire. Si tel est le cas, nous voulons exécuter la routine de mise à niveau requise. Mais nous n'avons pas besoin d'exécuter la méthode par mise à niveau, car à ce stade, si une mise à niveau est en cours, cela signifie que nous l'avons déjà payée, et si la mise à niveau est terminée, le chronomètre est supprimé, comme indiqué ici. Si aucune mise à niveau n'est en cours ou si elle est déjà terminée, l'entrée du chronomètre ne sera pas trouvée. Je vais copier la ligne start coroutine do upgrade ici et la coller dans l'instruction Et sur LS, cela signifie que le temps est passé, mais que le chronomètre est toujours entré dans le chronomètre des statistiques. Ensuite, nous voulons exécuter la méthode des statistiques augmentées, et nous n' exécuterons cette méthode de vérification de l'état de mise à niveau que lorsque nous chargerons la progression sécurisée. D'accord. Et l'autre chose que nous devons implémenter est une méthode pour mettre à jour l'affichage de l'interface utilisateur. Nous pouvons l'appeler mettre à jour l'affichage des éléments. Et cette méthode sera appelée par le gestionnaire de statistiques lors du chargement de la progression sécurisée. Donc, nous devons d'abord obtenir les données statistiques du gestionnaire de statistiques faire de la méthode des statistiques de l'instance et transmettre le nom de la statistique. La prochaine chose que nous devons faire est de mettre à jour la valeur du curseur de la barre de niveau de l'objet pour qu'elle soit égale au niveau de statistique actuel Ensuite, nous devons vérifier si le niveau des statistiques est égal à la longueur du prix. Si c'est le cas, cela signifie que l'objet a déjà atteint son statut ou son niveau maximum. Nous pouvons copier la ligne d' attribution par taxe ci-dessous et la coller dans la méthode d'affichage des articles de mise à jour L'un à l'extérieur de l'instruction if et l'autre à l'intérieur. Ensuite, nous devons changer celui à l'intérieur du bloc au maximum, et si nous atteignons le niveau maximum, nous voulons renvoyer la méthode. De cette façon, la méthode se terminera à ce stade et n' exécutera pas cette ligne ci-dessous. Comme cette méthode sera appelée lorsque le joueur chargera la progression, nous devrons également vérifier la progression de la mise à niveau en effectuant la vérification de l'état de la mise à niveau. Salut, c'est Romy du futur, et il y aura quelques bugs dans le futur. Réparons-le. Dans le script de l'élément de mise à niveau, nous devons exécuter la méthode d'affichage de l' élément de mise dans la méthode de démarrage. Ainsi, lorsque le menu s'initialise, ensemble de l'élément sera mis à jour affichage de l' ensemble de l'élément sera mis à jour au démarrage en fonction de la dernière progression Parce que la vérification de l'état de mise à niveau est appelée dans la méthode d'affichage des éléments de mise à jour. Cela permettra à l'objet de poursuivre automatiquement sa mise à niveau s' il reste du temps pour chacun des objets. Ce sera tout pour le système de mise à niveau. Commençons maintenant à travailler sur le système sécurisé. Créez un nouveau script dans le dossier des scripts de données et renommez-le pour enregistrer le système. Ouvrons le script. Dans le script, comme nous allons utiliser le formateur binaire, nous devons importer l'espace de noms binaires Mais d'abord, supprimons simplement la méthode de démarrage et de mise à jour. Nous pouvons également supprimer l'héritage du comportement mono. Comme je vais rendre cette classe statique en ajoutant un mot-clé statique après le modificateur de portée publique. De cette façon, nous n'avons pas besoin d' attacher le script à un objet, mais nous pouvons accéder à la méthode qu'il contient simplement en accédant à la classe, car une classe statique est partagée entre les projets et ne peut avoir aucune instance. Maintenant, juste en dessous de la ligne d'utilisation du moteur Unity. Ajoutons en utilisant des formateurs de sérialisation de l'heure du système , puis du binaire à points Il s'agit d'une masse lors de l'utilisation d'une classe de formatage binaire. Nous devrons également ajouter un point système O pour écrire le binaire résultant de la progression sécurisée dans un fichier ou pour le charger Maintenant, définissons la première méthode, qui serait un coffre-fort public statique, et nous devons ajouter une signature à la méthode avec t, qui est un mot-clé pour le type generate. Ensuite, nous voulons passer ce type T comme paramètre et l' appeler safe data. En utilisant generate, nous pouvons transmettre la classe que nous avons définie pour les données sécurisées. abord, nous devons déclarer une variable temporaire le type serait un formateur binaire Appelons-le BF. Ensuite, nous devons l'initialiser. Ensuite, un autre type de variable temporaire de flux de fichiers, le formateur binaire, sera disponible si nous utilisons cet espace de noms, et le flux de fichiers sera également disponible si nous utilisons un système avec cet espace de noms IO Pour le flux de fichiers, appelons-le file, et nous devons l'initialiser avec un paramètre Le premier serait le chemin et le nom du fichier. Nous pouvons également utiliser un chemin de données persistant à partir de la classe d'application. Cela permettra de s'assurer que le fichier est en sécurité dans le dossier persistant de l'application, tel que le dossier d'installation ou autre, mais pas dans le dossier de cache, car le dossier de cache n'est généralement pas persistant. Ensuite, nous voulons combiner le nom du fichier dans une chaîne de format. Nous pouvons simplement ajouter le signe plus , puis le nom du fichier de chaîne. Mais nous devons ajouter une barre oblique avant le nom du fichier, et disons simplement que le fichier est une partie sûre Mais le nom et l'extension du fichier peuvent être n'importe quoi d'autre. Pour le deuxième argument, accédons au mode fichier et sélectionnons créer. Cela indiquera essentiellement au flux de fichiers de créer un nouveau fichier avec le chemin et le nom du fichier à partir du premier argument. Ensuite, nous voulons sérialiser les données de sauvegarde dans le binaire et les enregistrer dans le flux de fichiers À l'aide de l'objet formateur binaire, nous pouvons appeler la méthode sérialisée, puis transmettre l'objet de flux fichiers appelé file pour le premier argument, et pour le second argument la variable de sauvegarde des données du paramètre de méthode Cela convertira l'objet de données de sauvegarde en binaire, puis l' enregistrera dans un fichier. Ensuite, nous devons fermer le flux de fichiers en appelant la méthode fermée, et enfin nous pouvons ajouter un journal de débogage ici Pour la méthode de chargement, nous devons également déclarer une méthode statique publique. Mais cette fois, il renverra un type de T ou des génériques qui peuvent être convertis dans la classe enregistrée par la méthode sécurisée Nous pouvons appeler cette méthode load, mais nous devons ajouter une signature avec ce crochet incliné, et nous n'avons pas besoin de paramètre pour cette méthode Parce que cette méthode devrait renvoyer quelque chose, nous avons maintenant cette erreur car il n' y a pas encore de code de retour dedans. Tout d'abord, nous devons vérifier si le fichier de sauvegarde existe. Nous pouvons le faire en utilisant l' instruction, puis vérifier le fichier en utilisant la méthode exist à partir de la classe de fichier, et nous devons transmettre le fichier et son chemin dans un format de chaîne. Nous pouvons le copier directement à partir du premier argument du flux de fichiers dans la méthode sécurisée. Et je vais également ajouter une déclaration L. À l'intérieur, je vais ajouter une erreur de journal de débogage avec le message S file not found Et pour charger les données, dans l'instruction if, nous devons créer une variable de formatage binaire temporaire Appelons-le BF et initialisons-le. Ensuite, nous devons également créer un nouveau flux de fichiers et nous pouvons simplement le copier à partir de la méthode sécurisée, coller ci-dessous. Mais au lieu d'utiliser le mode fichier create M sur le deuxième argument, changez-le en mode fichier ouvert. De cette façon, il indiquera d' ouvrir le fichier sécurisé dans le premier argument. Je voulais également envoyer un message de réussite du chargement ci-dessous. Après le débogage, nous devons désérialiser et reconvertir les données chargées dans leur classe ou leur type Pour cela, créons une nouvelle variable temporaire de type t et appelons-la load. Ensuite, nous pouvons désérialiser le fichier chargé en utilisant la méthode de l'objet formateur binaire appelé désérialiser, puis passer le fichier dans la Comme la méthode sérialisée renvoie un objet, elle ne sait pas quelle était la classe d'objet auparavant Et le type de variable est genericx. Nous devons convertir l' objet Deralze en un genericx y ajoutant un ensemble de parenthèses et le Après cela, nous devons fermer le fichier comme nous l'avons fait dans la méthode sécurisée. Retournez ensuite l'objet chargé. Mais comme nous renvoyons uniquement quelque chose à l'intérieur de l'instruction If, il est toujours probable que nous ne renverrons rien. Nous devons ajouter une valeur de retour par défaut de t en dehors de l'instruction If. Si aucun fichier sûr n'est trouvé, la méthode renvoie une valeur par défaut. Habituellement, il sera nul, mais cela dépend du type de classe. C'est la fin de la classe de système sécurisé, et je vais simplement supprimer ces deux codes d'espaces de noms car nous n'en avons pas besoin Et pour modifier le gestionnaire d'état pour enregistrer et charger les statistiques, nous devons créer une autre classe personnalisée que nous pouvons créer ci-dessous. Ajoutons d'abord un attribut sérialisable à la classe et nous pouvons l' appeler save data Dans la classe, nous avons besoin de quelques variables et nous devons associer à certaines variables du gestionnaire de statuts, telles que les vies, l'argent et la liste des types d' informations de mise à niveau du statut , car nous devons enregistrer le statut des améliorations, ainsi la liste des succès et le chronomètre du statut. Copions simplement tous les champs, puis collons-les dans les données sécurisées. Mais nous allons supprimer les variables inutiles. Supprimons également cet en-tête car cette classe n'agirait que comme une donnée sécurisée et ne sera pas affichée dans l'inspecteur. Pour la variable lives, nous pouvons supprimer la valeur par défaut Ensuite, nous devons créer deux nouvelles méthodes dans le gestionnaire de statistiques pour la sauvegarde et le chargement. Créons une nouvelle méthode publique appelée Safe Progress. Et la progression du chargement. Dans la méthode de progression sécurisée, nous devons créer une nouvelle instance des données sécurisées Créons-la, puis nous devons copier tous les champs nécessaires du gestionnaire de statistiques vers les données sécurisées nouvellement créées. Tout d'abord, sauvons des vies en saisissant l' objet de données sécurisé, puis tapant des vies pour accéder au champ et en le configurant pour qu'il donne la valeur à deux vies. Alors pour l'argent, faisons de même. Économisez de l'argent sur les données et définissez leur valeur par rapport à leur valeur monétaire. Ensuite, sauvegardons les médailles ou les succès. Nous voulons enregistrer tous les champs du gestionnaire de statistiques portant le même nom dans l'instance de sauvegarde des données. Finissons-en avec ça. Une fois que nous avons déjà copié tous les champs ou variables nécessaires dans l'objet de données sécurisé. Ensuite, nous voulons l'enregistrer sur le disque en utilisant la méthode sécurisée du système que nous avons créée auparavant et transmettre l'objet de données sécurisé. Cette méthode créera un objet sécurisé contenant toutes les données nécessaires à la sécurité. Une fois que toutes les données ont été copiées, nous passons l'objet dans la méthode sécurisée et cela l'enregistrera dans un fichier appelé safe. Pour le chargement, nous allons créer l'inverse exact de la méthode sécurisée. abord, créons un objet de type safe data, et appelons-le load data Nous pouvons le charger immédiatement en accédant à la méthode de chargement depuis le système sécurisé et en transmettant les données de sauvegarde comme signature, de la même manière que la méthode get component. Cela chargera l'objet à partir des données de sauvegarde, puis le convertira selon le type indiqué dans la signature. Dans ce cas, il s' agira des données de sauvegarde. Nous pouvons maintenant récupérer les valeurs des faibles données et les charger dans les variables du gestionnaire de statistiques. Les vies peuvent tirer des valeurs des vies, et il en va de même pour les autres variables. Ensuite, après avoir chargé la progression, nous devons mettre à jour tous les éléments de l'interface utilisateur du menu. Créons une nouvelle méthode. Nous pouvons l'appeler mettre à jour l'affichage des éléments. Dans la méthode, nous voulons créer un tableau d'éléments de mise à niveau. Ensuite, nous pouvons simplement utiliser la méthode appelée fine objects of type et transmettre la classe d' élément de mise à niveau comme signature. Cette méthode permet de rechercher dans la scène des objets de jeu auxquels la classe est attachée. Ensuite, nous voulons parcourir la collection d'objets en utilisant for loop. Sur chaque élément, nous voulons exécuter la méthode d' affichage de l'élément de mise à jour. chaque objet, nous publierons des informations mises à jour en fonction la progression du chargement et nous vérifierons si une mise à niveau est en cours. Revenons maintenant à Unity et essayons-le. Pour tester cela, nous devons créer un bouton pour enregistrer et charger la progression. Créons un champ vide et positionnons-le sur le bouton à l'aide du préréglage d'ancrage Renommons l'objet en bouton Mais et créons deux nouveaux boutons en tant qu'objet enfant Le premier bouton sera destiné à la sauvegarde et le second au chargement. Repositionnons les deux boutons. Réglez l'exposition du premier bouton à 120 négatif et celle du second à 120 positif. Nous devons maintenant configurer les boutons pour exécuter la méthode de progression sécurisée et de progression du chargement à partir du gestionnaire d'état attaché à l'objet du gestionnaire de jeu. Mais comme le gestionnaire de jeu ne contient qu'une seule tonne, cela peut entraîner un problème référence manquante lorsque vous revenez dans la scène du menu. Créons un script de bogue pour ces boutons, et ouvrons-le. Dans ce script de débogage, nous pouvons supprimer à la fois les méthodes de démarrage et de mise à jour, et créer une nouvelle méthode publique appelée safe load Et les deux méthodes doivent être publiques car nous allons les appeler à partir des boutons. Dans la méthode sécurisée, appelons la méthode de progression sécurisée à partir de la référence Singleton du gestionnaire de statistiques Dans la méthode de chargement, appelons la méthode de progression du chargement. Revenons maintenant à Unity, attachons le script de débogage au champ de jeu du bouton de débogage, puis renommons les objets Le premier devrait être le bouton de sécurité. Et le second devrait être le bouton de chargement. Sur le bouton sécurisé, transformons l'objet du jeu du bouton de débogage en un événement de clic dans l'inspecteur, et appelons la méthode sécurisée depuis le script Buck Et nous voulons faire de même avec le bouton de chargement. Mais appelons plutôt le bouton de chargement depuis le script Buck. bouton sécurisé doit donc exécuter la méthode sécurisée et le bouton de chargement doit exécuter la méthode de chargement. Maintenant, essayons-le. Mais à y réfléchir, il y a certaines choses que nous devons modifier pour rendre la tâche plus pratique. Sélectionnons le gestionnaire de jeu et, dans l'inspecteur, changeons la durée d'amélioration des statistiques de santé des éléments 1 et 2 en 0,3 et 0,4. C'est un peu plus long. Maintenant, testons cela. Comme vous pouvez le constater, nous avons 500 crédits d'argent. Si j'essaie de procéder à la mise à niveau, le minuteur de mise à niveau est en cours d'exécution, et enregistrons-le. Si la console affiche un succès en toute sécurité, cela signifie que nous avons enregistré la progression avec succès. Maintenant, arrêtons ça et rejouons-le rapidement. Essayons de le charger. Mais il semble qu'il y ait un problème avec le code car la progression ne se poursuit pas. Jetons un coup d'œil au problème. Le problème est assez simple en fait. la classe du gestionnaire de statistiques intégrée à la méthode de progression du chargement, nous n'appelons jamais la méthode d'affichage des éléments de mise à jour. Le chargement a été correctement chargé, mais l'interface utilisateur n'a pas été mise à jour. Appelons-le ici. Après tout, la progression sécurisée a été chargée. Et avant de tester, assurons-nous que le temps de mise à niveau soit un peu plus long, à 0.6 et 0.7, et jouons-y. Maintenant, améliorons-le à nouveau et nous avons 30 secondes. Je vais le sauvegarder, arrêter le jeu. Et exécutez-le à nouveau , puis appuyez sur Charger. Vous pouvez maintenant voir qu'après le chargement, le chronomètre continue et attendons un peu que la mise à niveau soit terminée. Maintenant, c'est terminé et la santé a été améliorée. Maintenant, sauvegardons-le à nouveau, arrêtons le jeu, rejouons-y et chargeons-le. Vous pouvez maintenant voir que le niveau de santé est amélioré et que le texte du prix a également été modifié pour refléter le niveau suivant du prix de la santé. Ensuite, essayons de le mettre à jour à nouveau, et maintenant le temps de mise à niveau est d'environ 40 secondes. Je vais enregistrer ça et arrêter ça. Attendons maintenant un peu que la mise à niveau soit terminée. Je vais ouvrir mon horloge. OK, maintenant 40 secondes se sont écoulées. Testons cela à nouveau. Appuyons. Vous pouvez maintenant voir que l'interface utilisateur est mise à jour automatiquement. C'est essentiellement ainsi que le système de sécurité et de chargement fonctionnera dans ce jeu. Mais il y a autre chose que nous pouvons faire. Nous pouvons ajouter une notification. Et nous affichons déjà la notification dans la routine de mise à niveau prévue suffit de couper la ligne et de la coller Il suffit de couper la ligne et de la coller dans la méthode des statistiques augmentées. De cette façon, la notification sera toujours affichée si nous terminons la mise à niveau ou si la progression chargée et que les statistiques sont mises à niveau lors du chargement. La notification ne sera cependant pas affichée si la mise à niveau a été effectuée, car le chronomètre sera déjà supprimé et tout le code ne s'exécutera même pas. Nous allons donc le tester à nouveau lors de la mise à niveau , puis l'enregistrer à nouveau. Je vais attendre un peu que le temps de mise à niveau soit écoulé. Si nous réessayons après avoir chargé la progression, nous pouvons voir la notification apparaître. Ceci conclut les leçons de sécurité et de chargement. Avec ce script de système sécurisé, nous pouvons enregistrer n'importe quel type de classe tant qu'il ne s'agit que de champs stérilisables. D'accord. 44. Chargeur de scène 44: OK, nous allons maintenant créer un système de progression du chargement des scènes. Ainsi, chaque fois que nous changeons de scène, nous pouvons voir la progression du chargement en cours. Et tout d'abord, je vais créer un nouveau dossier dans notre dossier prefabs, et ce seront nos managers Et en tant que responsable du site, je vais demander à notre gestionnaire de jeu d'être également un préfex pour le système de dialogue. Je veux également le définir comme un préfex, nous en avons une copie, et chaque fois que nous faisons des bêtises, nous pouvons simplement le rediriger depuis nos préférences D'accord, nous devons maintenant créer un nouveau canevas pour cela. Créons donc simplement un nouveau canevas. Désolée. Je vais le supprimer ici. Nous pouvons simplement créer rapidement une interface utilisateur et choisir Canvas. Nous avons donc maintenant ce nouveau canevas ici. Et je vais copier ce paramètre ici, donc je vais copier le composant ici, et je vais le coller sur notre nouveau canevas. Il a donc la même valeur. Et pour l'ordre de tri, je vais m'assurer que notre nouveau canevas reste devant l'autre, et celui-ci devrait être le chargeur de scène OK. Maintenant, je vais créer un nouveau chargeur de posins d'images, et je vais l'adapter à la taille de notre écran en maintenant le bouton enfoncé dans le processus d'ancrage et en utilisant celui-ci, pour qu'il le ferme complètement Et je vais ajouter pour définir la couleur sur le noir, mais je vais lui donner une légère transparence. Ensuite, je vais appeler ce panneau de chargement. Et je vais créer un nouveau texte. Et pour le texte ici, je vais régler sa taille à environ 500, changer la police en fonction de la police de notre visiteur ici régler la chaîne du texte à charger et régler pour qu'elle s'adapte le mieux , et également définir la couleur dans cette plage ici. Et définissez la hauteur, peut-être autour de 80 et fixez également la taille maximale à 100, beaucoup plus grande . Je vais l'aligner au centre et déplacer ce texte légèrement vers le haut, peut-être autour de 50 sur l'axe y. Et je vais également créer une barre pour le chargement ici. Créons donc simplement une nouvelle image et nous pouvons simplement définir cette longueur autour de cette valeur ici. Nous avons donc Yeah. Je vais arrondir cette valeur à 300 et définir la hauteur 25. Je vais créer une nouvelle image et ce sera le cadre de progression. Et celle-ci serait la barre de progression. Pour le cadre de progression, je vais utiliser ce cadre d'interface utilisateur ici et agrandir comme vous pouvez le voir ici et m'assurer qu'il est centré comme ça, et que nous pouvons nous déplacer vers le bas ici et changer sa couleur pour prendre le même orange que celui que nous avons ici. Pour la barre de progression, je vais m' assurer qu'elle se trouve au milieu comme ça. Et pour que le cadre de progression s'assure également qu'il trouve au milieu et le déplace à nouveau. Désolée. Maintenez la touche Shift enfoncée. Ouais. Déplacez-le vers le bas, et je vais également configurer le texte de chargement pour qu'il se trouve au milieu de notre cadre. Et pour la barre de progression, je vais placer son ancre sur le côté gauche. Alors, comment afficher ce cercle bleu, il suffit d'appuyer sur Shift et d'appuyer dessus et je vais placer cette ancre à cette position ici. Ouais. Si nous la redimensionnons sur l'axe x comme vous pouvez le voir, nous pouvons définir la valeur de notre barre en utilisant l'échelle x de son échelle ici. Nous avons maintenant un bel écran de chargement. Nous devons créer un nouveau script pour passer d'une scène à l'autre. Créons simplement un script CSR s Loader et ouvrons un script. Et nous voulons en faire un Singleton, tout comme notre gestionnaire de statut Nous devons donc créer une référence statique publique à cette classe ici, S loader, et je vais nommer cette instance. Comme pour le Singleton habituel, nous allons créer une nouvelle méthode d'éveil et nous voulons nous assurer que cet objet persiste dans la scène Je vais donc aller dans notre gestionnaire de statistiques ici, et suivre la méthode. Je vais copier cette diapositive ici. Et cela fonctionnera immédiatement car nous utilisons le même nom de variable. Je vais supprimer la méthode start et la méthode ablate Sauvegardez ceci. Créons quelques références. Tout d'abord, nous devons créer une barre de progression de transformation publique. Je vais ajouter en utilisant Unity. Désolée. Non, nous avons créé la barre de progression ici. Nous devons maintenant ajouter une référence à notre bibliothèque de gestionnaire de scènes à partir de Unity, alors saisissez-la en utilisant le moteur Unity pour la gestion de scène. Et maintenant, nous devons créer quelques méthodes. Tout d'abord, je vais créer un panneau de désactivation F. Et nous avons besoin d'une référence à ce panneau, je vais donc ajouter un panneau d'objets de jeu public. Et chaque fois que nous désactivons le panneau, nous voulons le masquer. Réglons l'actif sur false au réveil, nous voulons masquer le panneau immédiatement. Et maintenant, nous voulons créer une méthode pour mettre à jour notre barre. Et cette méthode demandera une valeur. Et nous pouvons créer un vecteur privé trois, appelons-le échelle à barres, et ce serait un vecteur trois sur un par défaut. Et nous allons modifier sa valeur x dans notre barre de mise à jour ici. Ici, nous pouvons définir l'échelle de la barre x à la valeur que nous transmettons à partir de notre paramètre ici. Ensuite, nous pouvons mettre à jour l'échelle locale de notre barre de progression et attribuer cette échelle de barre comme échelle de notre barre de progression ici. OK. Ensuite, nous devons créer une routine de base pour charger la progression de la scène. Tapons donc simplement load scene. Nous devons donc passer une chaîne pour le nom de la scène, et nous devons créer une opération Sing. C'est-à-dire, appelons cela le chargement asynchrone, et ce serait un nouvel objet pour suivre la progression de notre chargement Nous allons utiliser le chargement des gestionnaires de scènes, pas l'utilisation du chargement, mais le chargement Et pour le s de la scène cible, nous allons utiliser la scène ici. Avec l' opération asynchrone ici, nous pouvons vérifier si c'est fait ou non en vérifiant la propriété, le chargement est Il a une propriété terminée. Je veux m'assurer que ce n'est pas fait, c' est pourquoi j'ajoute ce point d'exclamation, ce caractère d' exclamation ici Panneau d'exclamation devant notre chargement. Chaque fois que ce n'est pas fait, nous voulons mettre à jour notre barre de mise à jour. Nous pouvons mettre à jour la barre ici et transmettre la progression de la valeur de chargement, cette progression. Il s'agit d'un flottant qui reviendra à partir de 021 Mais avant de l'utiliser, nous voulons fixer cette valeur, afin de pouvoir simplement taper f clamp. Nous voulons fixer la valeur de notre progression à 021. Comme le maximum est probablement de 0,9, nous voulons nous assurer que lorsque nous atteindrons 0,9, nous aurons une barre maximale. Il fixera donc la valeur maximale à un. Nous voulons utiliser le CLM atteint et l'autre méthode 01, et nous voulons le diviser par notre 0,9 car le nombre maximum de progression sera de 0,9 Ainsi, lorsque nous diviserons avec ce nombre, nous aurons la valeur un plus tard. La prochaine chose que nous devons faire est de générer du rendement, non. Chaque fois que ce n'est pas fait, nous resterons dans cette boucle ici, et une fois que ce sera fait, nous devrons désactiver notre panneau. OK. Et nous avons besoin d'une méthode publique pour déclencher cette scène de chargement, créons simplement un nouveau vide public. Chargez une scène ou nous pouvons simplement créer une nouvelle scène de changement, et nous devons également transmettre un nom de scène sous forme de chaîne. OK. Et dans cette méthode, nous allons démarrer la routine de chargement de la scène C, et nous allons passer le paramètre du nom de scène ici. Oui, comme ça. Nous pouvons donc maintenant le mettre dans notre chargeur de scène ici. Il y a donc un problème ici. OK. C'est réparé. Sélectionnez le chargeur de scène ici et nous pouvons faire glisser le chargeur de scène. Et pour le panneau, je vais faire glisser ce panneau de chargement ici. Et pour la barre de progression, je vais choisir cette barre de progression ici. OK, maintenant je vais enregistrer le chargeur de scènes en tant que préface dans notre gestionnaire. OK, alors sauvegardez ça. Et si nous jouons à ce jeu, ils devraient masquer le panneau immédiatement, comme vous pouvez le voir. Et maintenant, dans la vidéo suivante, nous devons créer le menu, le menu du niveau, ainsi que l' indicateur des médailles si nous avons déjà débloqué les succès de ce niveau 45. Menu de niveau 45 partie 1: D'accord. Nous allons donc maintenant créer le menu pour notre sélection de niveaux. Et je vais d'abord cacher notre chargeur de péchés. Et aussi, je vais masquer le système dialectal ainsi que le panneau de la boutique Mais avant de masquer le panneau de boutique, je souhaite copier la transformation de notre panneau de boutique ici. Copiez donc le composant ici. Et créons le nouveau vide sous notre canevas ici. Je vais le placer sous le panneau de la boutique ici, et ce sera notre sélecteur de niveau ou notre panneau Panel sectoriel de niveau, je pense que c'est le meilleur nom. Et je vais coller les valeurs des composants dans cette transformation ici, nous avons la même valeur que notre panneau de boutique ici. Nous devons masquer le panneau de la boutique. Maintenant, commençons par ajouter un groupe de mise en page verticale et nous devons créer un objet enfant, et ce serait notre niveau. Appelons-le menu de niveau. Et pour la taille, changeons sa taille en 600. Et pour la hauteur, je vais la régler à 200. Nous indiquons donc simplement de suivre le groupe vertical ici. Maintenant, nous pouvons créer deux ou trois choses. abord, je vais créer un bouton et je vais le placer sur le côté droit de notre panneau en le maintenant enfoncé et en appuyant sur celui-ci ici. Nous avons donc un gros bouton qui occupe taille de notre menu de gauche ici sur le côté droit, et je vais régler sa largeur à 200 et régler l' exposition à -100 Et nous allons configurer le bouton ici. Tout d'abord, je vais maximiser le texte ici. D'accord. Et je vais lui donner une chaîne de 01, afin qu'il indique le premier niveau et change son téléphone en fonction du visiteur, et aussi la taille maximale, l'agrandissant d'environ 120, et je vais changer sa couleur orange que nous avons enregistrée auparavant. Et pour le bouton, je vais remplacer l'image source située sous le composant image par notre cadre d' interface utilisateur et définir sa couleur également sur l'orange. Si notre jeu est nul, nous avons ce bouton, et pour jouer à notre niveau, nous devons cliquer sur ce bouton, et je vais renommer cet objet en bouton de jeu Ensuite, nous devons créer un autre espace vide, et nous voulons l'adapter à la disposition de notre menu de gauche, mais je vais réduire le côté droit directement vers le côté droit. Il s'enclenche donc sur notre bouton ici. Et ce sera la liste des réussites. Et pour augmenter les succès, je vais ajouter un autre groupe de mise en page verticale, et je vais ajouter, non pas l' objet de jeu vide, mais un objet fiscal. Supprimez donc ce champ vide et ajoutez une nouvelle taxe. Nous sommes désolés. Nous pouvons simplement ajouter la taxe ici et la faire glisser en haut à gauche de notre ancre ici en fonction des paramètres du groupe de mise en page verticale Et augmentons le montant de la taxe ici. D'accord. Et le régler à une hauteur d'environ 70 ou 60 devrait suffire. Désolé, 60 et activez le meilleur ajustement pour que le texte puisse être redimensionné, configurez le téléphone sur visiteur et changez la couleur en orange que nous avons ici Je vais aligner l'alignement au milieu et également aligner l'alignement vertical au milieu. Notre texte se trouve bien au milieu ici, et réglez ce texte sur 100 my k, le second serait un sauvetage à 100 %. Et le troisième devrait rester intact. Ce serait la liste des succès ici. Et pour ce succès, nous devons régler sa couleur sur la même couleur, mais avec un Alpha beaucoup plus faible, mais avec un Alpha beaucoup plus faible, peut-être autour de 75 Nous pouvons donc voir que nous n'avons pas débloqué ce succès Et maintenant, créons un script. Donc, dans le dossier Data script, je vais créer un nouveau script C, appeler ce menu de gauche et ouvrir le script. OK, maintenant, puisque nous allons gérer notre interface utilisateur, nous devons importer l'espace de noms de l'interface utilisateur Faisons-le simplement en utilisant l'interface utilisateur du moteur Unity, et nous devons créer quelques variables. Le premier que nous devons créer est le bouton, et ce serait le bouton de lecture. Et nous avons également besoin d'une référence à notre scène, qui est en chaîne. Appelons-le simplement syn target, puis nous devons créer quelques champs de texte Le premier serait notre texte de destruction puis notre texte de secours, et le dernier serait le texte intact Et je vais également créer une couleur pour notre texte ici. Appelons-le cette couleur désactivée et cette couleur activée. D'accord. Et au début, nous allons récupérer nos métaux. Nous devons donc maintenant créer une variable privée sur les types de métaux et le metal de scène. Appelons cette scène metal. Et au début, nous voulons obtenir cette scène métallique en nous basant sur le nom de notre objet ici. Désolé, le nom de la cible de la scène. Remplissons le set metal avec le gestionnaire de statistiques, par exemple. Et la liste des succès ici, et nous pouvons la récupérer en fonction notre chaîne du nom de notre cible de scène ici. Et nous pouvons nous assurer de ne le saisir que lorsque la liste des succès contient la clé de notre scène ici. Donc, comme ça, et c'est pour nous assurer que notre ascenseur de succès contient la clé de notre scène ici, et si elle est contenue, alors nous voulons la récupérer. Nous devons également créer une méthode publique pour le menu de mise à jour ici. Je vais retirer nos assiettes. Nous n'allons pas nous en servir. Nous devons également créer une méthode locale pour accéder au niveau. D'accord. Et nous allons l'ajouter à notre écouteur de boutons Tapons donc simplement le bouton de lecture, cliquez sur Ajouter un écouteur, et nous allons ajouter cette méthode Il suffit donc de taper sur deux niveaux. Et cela passe à deux niveaux, nous accèderons à notre objet chargeur de scène, et il accèdera, je pense , à la méthode de changement de scène. Et cette méthode demande une chaîne, afin que nous puissions simplement transmettre notre cible de scène ici. Et si nous dépassons notre cible de scène, elle chargera la scène. Mais avant de terminer le chargement, il indiquera la progression. D'accord. Et pour mettre à jour le menu, nous voulons définir notre couleur en fonction de notre résultat ici. Faisons-le simplement. Nous devons vérifier si notre médaille du péché n'est pas vide. Nous nous assurons de le faire, et s'il n'est pas vide, nous devons mettre à jour notre couleur fiscale. Sur la base de notre résultat , de notre réussite. Nous pouvons donc simplement utiliser le lingot ici, tuer ce qu'on appelle un opérateur ternaire, et nous pouvons ajouter un bon ou condition devant notre valeur ultérieurement Et après la condition, on peut ajouter un point d'interrogation. La première partie sera de savoir si le résultat de cette condition est vrai, alors nous voulons définir la couleur activée. Activez la couleur pour la couleur, notre texte k. Et si nous n'y sommes pas parvenus ou si la quille est fausse, nous voulons rétablir la couleur désactivée C'est quelque chose de beaucoup plus court que si nous le créons en utilisant si nous pouvons le faire comme ça, mais c'est beaucoup plus court. Donc, si c'est vrai, nous voulons utiliser la couleur d'activation, nous voulons utiliser la couleur désactivée. Mais c'est beaucoup trop long, et c'est beaucoup plus simple pour ce genre de déclaration. Je vais donc utiliser celui-ci. Supprimons simplement ceci. Mais il s'agit en fait de même, et nous pouvons copier cette ligne ici, coller deux fois, et pour la taxe de sauvetage je vais récupérer notre bulon de sauvetage sur notre scène métallique, et pour le texte intact, je vais récupérer notre lingot intact Et nous l'obtiendrons chaque fois que nous aurons terminé notre scène, niveau. Et si le métal du siège est nul, nous voulons attribuer à tout ce texte ici notre couleur désactivée. Supprimons donc simplement toutes ces entrées ici. Il suffit de laisser la couleur désactivée. J'enregistre le script ici. Et comme nous devons le mettre à jour, chaque fois que nous chargeons le jeu, nous devons rechercher tous les objets contenant ce composant sur la scène et exécuter le menu de mise à jour. Passons simplement à notre gestionnaire de statistiques ici. Et ici, nous avons l'affichage de l'élément de mise à jour ici et je vais mettre le menu des niveaux. Je vais créer un tableau de menus de niveaux, et ce sera le menu de niveau. Je vais également trouver un objet de type menu. Mais il doit s'agir de plusieurs objets de type. Nous récupérons donc tous les objets contenant ce composant dans notre scène. Et je vais également regarder l' objet de nos menus de niveau sur notre scène ici, et nous pouvons le faire, nous aimons que les éléments soient mis à jour et affichés. Et nous pouvons accéder à sa méthode de mise à jour du menu sur chacun de nos menus de niveau ici. Sauvegardons donc cela dans notre menu de niveaux Si ce n'est pas nouveau que nous le mettons à jour, nous utiliserons toutes les couleurs désactivées pour tous nos succès ici. D'accord. Maintenant, dans l'objet de jeu du menu niveaux situé en dessous du panneau de sélection des niveaux, nous allons configurer notre script. Passons donc à notre menu de niveaux et à notre manuscrit de niveaux. Et pour la cible de la scène, nous avons une scène de gameplay ici, et nous voulons que vous la testiez. Tapons donc simplement le nom de la scène ici. Et pour le bouton de lecture, il suffit de le diriger. Et pour le texto, je vais ouvrir le bail du HFP. La première serait la taxe k. La deuxième devrait être la taxe de sauvetage, et la troisième devrait être le texte intact Et pour la couleur désactivée, choisissons simplement la même plage, mais la valeur alpha de 75 Elle est donc transparente. Pour la couleur activée, nous voulons choisir l'alpha totalement opaque pour cette orange ici. Sauvegardons notre scène. Et pour le menu des niveaux, accédons simplement à notre dossier de préférences sous l'interface utilisateur et dirigeons ce menu de niveau en tant que sécurité des préférences. Et aussi pour le pétale de la boutique, nous voulons diriger l'élément de grade sous forme de préfixe nous voulons diriger l'élément de grade dirigeons ce menu de niveau en tant que sécurité des préférences. Et aussi pour le pétale de la boutique, nous voulons diriger l'élément de grade sous forme de préfixe ici également ici D'accord. Alors maintenant, essayons et jouons. Maintenant, si j'appuie sur Play ici. OK, il y a une erreur. Laissez-moi vérifier ici. D'accord. Désolée Une erreur s'est produite car nous avons désactivé notre chargeur de scène ici. Activons donc simplement ce chargeur de scènes et activons également notre système de dialogue. Et essayons de le replacer une fois de plus. Le jeu est en cours de chargement. D'accord, le chargement est réussi, mais d'une manière ou d'une autre, notre panneau ne s' affiche pas ici. Jetons donc un coup d'œil à notre script de chargement de scène. OK, je pense avoir trouvé le problème ici. Nous désactivons notre panneau, mais nous ne l'activons jamais. Donc, en gros, chaque fois que nous chargeons notre scène ici avant de commencer le chargement, nous devons activer notre panneau ici. OK, alors essayons encore une fois. Comme vous pouvez le voir, nous avons un système de chargement, et maintenant il se charge parfaitement dans notre jeu. D'accord. Il y a donc un problème d'éclairage Si nous passons d' une autre scène auparavant, alors réglons ce problème, passons à notre scène de jeu. En gros, ce que nous devons faire c'est accéder à notre éclairage, aller dans le menu de la fenêtre et sous les paramètres d'éclairage. Nous devons désactiver la génération automatique ici, et nous devons générer de l' éclairage une fois. Choisissons donc l' éclairage une seule fois. Et une fois la sélection terminée, il aura le sous-dossier contenant sous-dossier portant le même nom que notre scène que nous devons sélectionner et enregistrer Donc, si nous revenons à notre menu ici et que nous jouons cette scène, puis si nous essayons de revenir à notre scène, elle aura le bon éclairage. D'accord. Donc oui. Et dans la prochaine vidéo, nous allons continuer à travailler sur ce bouton ici. D'accord. 46. Menu de niveau 46 partie 2: Dans cette vidéo, nous allons continuer à travailler sur le menu des niveaux, et maintenant nous allons étendre le script du gestionnaire de niveaux à la scène de jeu. Ouvrons donc la scène de jeu. Concentrons-nous sur l' environnement en sélectionnant l'environnement et en appuyant sur le bouton F. Pour l'instant, nous n'avons encore aucun objet Canvas dans la scène. Créons-en un nouveau en accédant au menu de l'interface utilisateur , puis en cliquant sur Canvas. OK. Et pour la valeur de l'échelle Canvas, définissons-la sur l'échelle avec la taille de l'écran et définissons la résolution de référence sur 901 600 Ensuite, nous voulons créer un objet de jeu vide en tant qu'enfant du Canvas, et ce sera le panneau NS de niveau. Réglez sa taille sur 600 x 500. Créons ensuite une image en tant qu'enfant du panneau. Je vais l'appeler arrière-plan et le redimensionner en utilisant le préréglage d'ancrage le plus en bas à droite. N'oubliez pas de maintenir le bouton enfoncé. Réglons la couleur sur le noir, mais avec une valeur légèrement transparente de 120 sur l'alpha. Jetons un coup d'œil à la vue du portail. Nous avons maintenant ce panneau en étain foncé. Ensuite, nous devons créer un bouton pour revenir à la scène du menu à la fin du niveau. Réglez la position sur la partie inférieure du panneau. Et ajustez la taille à 200 x 75. Pour l'image, choisissons le cadre de l'interface utilisateur et définissons sa couleur selon les préréglages orange que nous avons enregistrés auparavant Ensuite, sélectionnez l'objet texte enfant, changez le téléphone en visiteur et tapez exit pour le texte. Je vais également activer option de meilleur ajustement et changer la couleur pour le préréglage orange, et je vais également augmenter la taille maximale du texte à 60. Ensuite, créons un objet de jeu vide en tant qu'enfant de l'objet d' arrière-plan. Ce sera la mise en page de l'interface utilisateur. Je vais l' étirer pour l'adapter au parent. Mais je vais ajouter un espace pour la marge inférieure, régler le nombre à environ 85 et définir toutes les autres marges, c' est-à-dire les marges gauche, droite et supérieure, à 15. Renommons l'objet de jeu vide succès, puis ajoutons un composant de groupe de mise en page verticale Ensuite, nous voulons ajouter un texte en tant qu' objet secondaire de la réalisation et changer le téléphone en visiteur. Je vais renommer cet objet fiscal keel et ce sera le succès de l'ennemi K. Changez la couleur du texte en orange prédéfini et réglez le texte 100 % ennemi k. Activez l'option la mieux adaptée et redimensionnez-le horizontalement pour qu'il s'adapte au panneau parent Pour la hauteur, je vais l'arrondir à 80, puis régler l' alignement au milieu et au centre. Nous pouvons également augmenter la taille maximale du texte à 60 afin que le texte soit plus lisible, et dupliquons le texte deux fois. Je vais renommer le second pour sauver et régler le texte sur 100 % rescue Pour le troisième, renommons l'objet intact » et configurons le texte pour qu'il reste Ensuite, nous devons assombrir le texte. Sélectionnons tous les textes de réussite et modifions la couleur en définissant la valeur Alpha 275. Ensuite, nous devons créer un script pour enregistrer le succès à la fin du niveau. Créons-en un nouveau dans le dossier des scripts et du gameplay, renommons-le script de jeu, puis ouvrons-le Tout d'abord, nous devons importer l'espace de nom de l'interface utilisateur. Ajoutons-le dans la partie supérieure. Créons ensuite quelques variables fiscales. Parce que nous allons modifier la taxe sur les réalisations, appelons-la taxe éliminatoire, taxe de sauvetage ou impôt non touché Nous devons également déclarer une variable de bouton et la renommer en bouton de sortie Nous pouvons supprimer la méthode de mise à jour en toute sécurité, et je vais remplacer la méthode de démarrage par une méthode activée. Ensuite, créons une méthode de routine. Nous devons définir le type de retour sur enumerator, et nous pouvons l'appeler show achievement Nous devons également créer une variable privée avec un type de poids de 4 secondes pour ajouter du retard dans la routine ultérieurement. Appelons-le simplement interval et initialisons-le avec une valeur de 0,5 seconde. À l'intérieur de la coroutine, retardons d' abord la coroutine en utilisant la valeur interne Et nous travaillerons davantage sur la coroutine plus tard. Ensuite, créons une nouvelle méthode appelée menu B. Et ici, nous voulons charger ou revenir à la scène du menu en utilisant la méthode de changement de scène à partir de l'objet Scene Loader. Dans la méthode désactivée, attribuons les deux nouvelles méthodes principales B à l'écouteur du bouton de sortie en accédant à la propriété unclick, puis en passant la méthode en argument à la méthode add listener accédant à la propriété unclick, puis en passant la méthode en argument à la méthode add listener Nous devons d' abord désactiver le bouton de sortie en réglant la valeur interactive sur false, et nous allons activer le bouton lorsque le résultat du succès aura été affiché Travaillons maintenant sur la coroutine. dessous du délai, nous voulons modifier la couleur fiscale en commençant par la taxe sur la quille, mais nous devons d'abord créer deux types de couleurs de variables publiques Le premier pour définir la couleur désactivée et le second pour la couleur activée. Pour la couleur fiscale clé à l'intérieur de la coroutine, nous voulons attribuer la couleur du texte en fonction de la qualité du métal. À l'aide de l'opérateur ternaire, nous pouvons vérifier le k à partir de l'objet métallique de l' instance du gestionnaire de niveaux Si c'est vrai, définissez la couleur sur la couleur activée, sinon, définissez-la sur la couleur désactivée. Nous pouvons dupliquer la ligne et la coller deux fois, une pour la taxe de sauvetage et la dernière pour le texte intact. N'oubliez pas de modifier également le succès pour sauver et intact pour chacun des textes correspondants Ajoutons également un délai entre les modifications de la couleur du texte. Nous pouvons copier la courbe d'intervalle entre le rendement et la coller entre les deux. De cette façon, le texte du succès sera révélé un par un avec un intervalle d'une demi-seconde. Après avoir révélé toutes les réussites, ajoutons un autre délai, et après le délai, nous voulons régler le bouton de sortie interactif sur true De cette façon, nous activerons le bouton de sortie. Nous devons exécuter cette routine de base dans la méthode non activée. Ajoutons simplement une commande start co routine et passons le nom de la coroutine dans l'argument Sauvegardons le script, puis retournons à Unity. Maintenant, attachons le script de jeu l'objet de jeu de gauche, et définissons le champ avec la bonne valeur ou entrée. N'oubliez pas d'attribuer l'objet du bouton au champ du bouton de sortie. Pour la couleur désactivée, définissons-la sur la couleur orange du préréglage, mais définissons son Alpha sur 75. Pour la couleur activée, nous pouvons simplement choisir le préréglage de couleur orange sans aucune modification nécessaire. Maintenant, sauvegardons la scène, et je vais désactiver l'objet du jeu de niveau, et nous devrons l' activer à la fin du niveau. Sélectionnons l'objet du jeu du gestionnaire de niveaux, et nous pouvons faire glisser le même objet de niveau dans le champ des événements du jeu sélectionner la méthode active dans le composant de l'objet du jeu et définir sa valeur sur true. Cela activera l'objet du jeu de niveau lorsque nous vaincrons le bus. Ensuite, nous devons ajouter une nouvelle méthode dans le script du gestionnaire de statistiques Créons une nouvelle méthode publique appelée metals. Nous devons également ajouter deux paramètres. Le premier sera un type de chaîne que nous pouvons appeler nom de niveau. Le second sera un type de métal, appelons-le simplement métal. Dans le cadre de la méthode, nous allons ajouter une entrée au dictionnaire de la liste des succès avec la clé du nom du niveau, et pour la valeur, ce sera l'objet métallique. De cette façon, nous pourrons récupérer la liste des succès en fonction du nom du niveau. Et nous devons exécuter cette méthode à partir du script du gestionnaire de niveaux. Dans la routine de base, fois le calcul du succès terminé, ajoutons un appel à la méthode Ed Metals depuis le gestionnaire de statut Singleton Mais comme nous devons transmettre le nom C ou le nom du niveau, importons l'espace de noms de gestion de scène et créons également un nouveau type de chaîne de variable privée, que nous pouvons appeler nom de niveau Dans on Awake, récupérons nom de la scène et enregistrons-le dans la variable du nom du niveau. En utilisant la méthode get active scene depuis la classe Scene Manager , puis en obtenant les propriétés du nom. Cela renverra le nom de la scène active actuelle. Une fois que nous avons encaissé le nom de la scène active, nous pouvons transmettre cette variable à la méthode des métaux. Pour le deuxième paramètre, nous voulons transmettre l'objet métallique qui contient le résultat de la session de niveau en cours. De cette façon, le succès sera enregistré par le script du gestionnaire de statut dans un dictionnaire avec une clé spécifique, qui sera le nom du niveau. Nous pouvons ensuite utiliser ces données pour afficher le résultat sur le manuscrit du niveau, comme indiqué ici. Salut, c'est Romy du futur, et je tiens à vous informer d'un bug qui se produira dans le futur. Dans la méthode Metals du script du gestionnaire de statistiques, si la liste des succès contient déjà une entrée portant le même nom de niveau, cette méthode provoquera une erreur. Nous devons vérifier si la liste des succès contient déjà une entrée avec le nom du niveau transmis par la méthode. Mais avant cela, créons une nouvelle variable temporaire avec le type de métal, que nous pouvons appeler new metal, et nous devons également l' initialiser Ensuite, nous voulons vérifier si la liste des succès contient déjà une certaine clé en utilisant la méthode de la clé de contenu, nous pouvons transmettre le nom du niveau, et je vais ajouter une instruction L et coller le code de succès dans ce bloc L. À l'intérieur du vrai bloc, nous voulons remplir les nouvelles valeurs de réussite des objets métalliques avec le métal transmis par la méthode. Pour la première réalisation, configurons la réalisation k en utilisant un opérateur ternaire Nous pouvons vérifier si la valeur k du métal est vraie. Ce qui est reçu du gestionnaire de niveaux, alors nous voulons définir la valeur sur true. Sinon, nous voulons obtenir la valeur précédente de la liste des succès en passant la clé et en obtenant la valeur de destruction. Cela permet d'éviter qu'une valeur fausse remplace une valeur vraie Sinon, si le joueur a réussi à obtenir la médaille kill lors de la session précédente, mais qu'il a ensuite rejoué le même niveau sans y parvenir, la médaille ratée remplacera la médaille précédente qui était un Bien entendu, nous ne voulons pas contrarier le joueur. Copions la ligne deux fois et changeons chacune pour la médaille de sauvetage et la médaille intacte Une fois la configuration de la nouvelle médaille terminée, nous voulons définir la liste des succès avec le nom du niveau comme clé du nouvel objet de médaille. Revenons à l'unité et essayons-la. Mais avant cela, nous devons ajouter le gestionnaire de statut Singleton à la scène Passons au dossier des préférences et , dans le dossier du gestionnaire, dirigeons le gestionnaire de jeu dans la scène Nous devons également ajouter le chargeur de scène dans la scène. Nous devons également mettre à jour le menu des niveaux. En gros, nous devons copier cette ligne de déclaration ici, et nous devons la coller dans la méthode du menu de mise à jour. Chaque fois que le menu est mis à jour, il essaie également de mettre à jour l'affichage de sa liste de succès. Et voici encore une fois Romy qui vient du futur qui essaie d' éviter un bug Dans la méthode de démarrage du manuscrit de niveau, nous pouvons commenter cette instruction if, et nous devons exécuter la méthode du menu de mise à jour pour nous assurer que chaque fois que le menu commence, toutes les entrées de niveau mettent à jour leur liste de succès dès le début Nous pouvons effectivement supprimer l' instruction sur la méthode de démarrage car nous l'avons vérifiée dans la méthode du menu de mise à jour. Mais pour l'instant, par mesure de sécurité, je vais utiliser Vector Unity en commun. Nous allons maintenant tester les modifications. Je vais passer rapidement au gameplay. Maintenant, éliminons le bus. Et il est vaincu. Mais je n'ai réussi qu'à tuer l'ennemi. C'est bon. Il suffit de cliquer sur le bouton de sortie. Maintenant, dans la scène du menu, nous pouvons voir que nous avons débloqué l'objectif de tuer 100 % d' ennemis au niveau 01 Si nous voulons créer un nouveau niveau, nous pouvons soit créer une nouvelle scène, soit dupliquer la scène de jeu précédente et modifier l'environnement, les types et la position des ennemis, ainsi que la disposition des niveaux. Ensuite, nous pouvons dupliquer l'objet du jeu du menu de niveau dans la scène du menu et définir la valeur cible de la scène comme étant le nom du nouveau nom de scène de niveau. Nous en avons maintenant terminé avec le menu des niveaux. 47. 47 Transition de l’interface utilisateur: OK. Nous allons donc maintenant effectuer la dernière finition de l'interface utilisateur. En gros, nous avons maintenant ce panneau de boutique et également le panneau latéral gauche. Nous devons trouver un moyen pour l'utilisateur passe d'un panneau à l'autre. Commençons donc. Nous devons créer deux nouveaux scripts. Je vais d' abord créer un nouveau dossier dans notre dossier de scripts. Il est donc bien organisé, et je vais appeler ce dossier des scripts d'interface utilisateur Et ce sera l'écran de l'interface utilisateur. Le premier serait l'écran de l'interface utilisateur, et le second serait le gestionnaire de l'interface utilisateur. Nous allons donc d'abord travailler sur le manager. Alors ouvrons-le simplement. Et ce que nous voulons faire, c'est créer un coupon de variable. Et la première sera celle de nos variables d'écran d'interface utilisateur, et ce serait un type de tableau, donc je vais simplement créer un nouveau privé. Et comme nous avons déjà créé le script, nous pouvons accéder à la classe UI screen, et ce serait un tableau, et ce serait notre tableau d'écrans. OK, rendons-le public. J'ai décidé de le rendre public, afin que nous puissions le voir chez l'inspecteur. La prochaine chose que nous devons faire est de créer une nouvelle variable privée et ce sera le type d'écran d'interface utilisateur. Mais il s'agira de notre écran activé actuel et de notre écran précédent. La première chose à faire est de saisir l'écran de notre interface utilisateur dans l'objet enfant. responsable informatique siégera à l'objet parent de notre panel de photos et également à notre panel sectoriel de niveau. Tapez simplement le tableau d'écran, puis je vais utiliser la méthode appelée get components in children, qui est au pluriel, et cela renverra tous les composants de type que nous avons définis ici dans l'objet de jeu ou dans l'un de ses enfants Et pour le type, nous allons récupérer la classe d'écran UI, et comme d'habitude, il s'agit d'une méthode, nous devons la fermer avec le parent pour voir. Et nous pouvons simplement taper ici. Et cela signifie que cela inclura l'objet de jeu inactif pour enfants. Il saisira également l'objet enfant inactif. Disons ceci. La prochaine chose que nous devons faire, c'est créer une méthode d'initialisation la méthode d'initialisation, nous aurons besoin d'un paramètre entier, qui sera l'interface utilisateur par défaut Cela va passer en revue notre objet de tableau d'écrans. Nous allons en saisir la longueur. Nous voulons nous assurer que si i est égal à notre interface utilisateur par défaut définie ici. Nous voulons que vous apparaissiez à l'écran, et nous voulons également configurer notre écran actuel sur cet index de tableau d'écrans du. Et je suis égal à notre valeur par défaut que nous avons définie ici. Nous voulons désactiver l'écran. Désolé, pour activer l' écran, et celui-ci, nous voulons le désactiver. Activez la désactivation de l'écran, nous serons traités par classe d'écran ici Nous allons créer cela dans un instant. Sauvegardez ceci. Maintenant, commencez, je veux initialiser notre premier tableau d'écrans, souvenez-vous Zéro. Puisqu'avec un tableau ou moins, cela part de zéro. Je vais donc initialiser et activer la première interface utilisateur saisie par cette méthode get component ici Supprimons la méthode de mise à jour. La prochaine chose que nous devons faire est de créer une nouvelle méthode publique. La méthode sera accessible par le bouton. Nous allons donc simplement changer d'écran, cet écran de changement. Et pour le paramètre, nous allons passer une nouvelle classe de crème glacée ici Tapons donc simplement icecream. Et ce sera ce nouvel écran. Et nous allons vérifier que si notre nouvel écran n'est pas vide, il n'est pas nul, alors nous voulons exécuter le code ici, et nous voulons vérifier notre écran actuel. Si notre écran actuel n'est pas nul, ou si nous pouvons simplement le taper ainsi beaucoup plus facilement. Ensuite, nous voulons régler notre écran précédent sur notre écran actuel, puis nous voulons masquer notre écran précédent. Mais comme nous n'avons pas défini la méthode, je vais créer un commentaire ici, désactiver l'écran précédent. Ensuite, nous allons régler l'écran actuel sur notre nouvel écran. Ensuite, nous voulons afficher notre écran actuel. Et puisque les écrans actuels ont déjà été modifiés et qu'ils sont déjà insérés avec le nouvel écran ici, nous allons afficher le nouvel écran. OK. Nous pouvons créer une nouvelle méthode, mais je ne pense pas que nous en ayons besoin pour le moment, testons-la. Désolé, testez-le. Continuons. Et passons à notre glace U. Pour la glace U, nous allons créer une sorte d' effet fatale Nous allons donc créer une nouvelle variable flottante, sera la vitesse de l'application ainsi que la vitesse de hauteur. Et la valeur par défaut sera probablement de 0,5 pour chacun des flottants ici. Tapons simplement ça. Ensuite, nous allons créer une référence à notre groupe Canvas. En gros, un vaste groupe est un composant qui regroupera notre canvasse et nous pouvons contrôler l' alpha de tous les éléments de l'interface utilisateur via ce groupe nous pouvons contrôler l' alpha de tous les éléments de Canvasse La transparence changera en même temps, même si cette interface utilisateur se compose de nombreux objets enfants, et tapons simplement ce groupe Canvas. Nous allons supprimer cette méthode intégrée, et nous allons utiliser la méthode void wake dans le wake Nous voulons que vous récupériez notre groupe de canevas. Nous aurons donc ce groupe de canevas prêt avant l'exécution de toute méthode de démarrage. Tapons simplement Canvas qui regroupe le type ici. Et nous devons fermer cela avec un ensemble de parenthèses. Et la prochaine chose que nous devons faire est de créer un nouveau vide public, et ce serait la méthode d' initialisation que nous devons initialiser via le gestionnaire Et je vais ajouter une exposition de lingots ici. Et nous allons modifier les propriétés de notre groupe Canvas à l'intérieur de l'unité. Donc, en gros, je vais d' abord modifier le groupe Canvas Alpha. Et pour l'Alpha, nous allons utiliser un opérateur ternaire, et nous allons nous assurer que le show est vrai, puis nous voulons définir son Alpha 21 Mais si c'est faux, alors nous voulons définir 20. Donc, je montre que c'est vrai, puis je règle l'Alpha 21. Mais si c'est faux, ce sera cette valeur ici. La prochaine chose que nous devons définir est notre groupe de canevas soit interactif Et nous allons arrêter l'intimidateur et tout de suite, car si nous définissons ce paramètre sur faux, il ne sera pas réactable, car l' interactable car l' interactable Et la dernière chose à faire est, je pense que par blocs, nous allons également configurer cette émission. OK. Maintenant que nous l'avons dans notre gestionnaire d'interface utilisateur, nous pouvons activer l'initialisation et désactiver l' écran. Comment faites-vous cela ? Nous pouvons simplement taper l'index du tableau d' écran de, de, puis nous pouvons taper. Pour le premier, nous voulons l'activer. Nous devons donc transmettre la vraie valeur dans la méthode d'initialisation. Mais comme l'autre index du tableau d' écrans n' est pas le même que celui de notre interface utilisateur par défaut que nous avons l'intention d'activer ici, nous pouvons définir ces deux index sur faux. Tapons simplement screen, x of i, puis dedans, puis définissons cette valeur sur false. OK. Revenons à notre message d'interface utilisateur. La prochaine chose que nous devons faire est de créer l'animation. Nous devons d'abord créer une coroutine pour créer une sorte d' animation pour la valeur Alpha Renommons simplement cet Alpha modifié. Le premier paramètre que nous devons insérer est la valeur Alpha. La cible Alpha et aussi la vitesse. La prochaine chose que nous devons faire, c'est mettre un rappel d'action Pour ce rappel, nous devons utiliser événements du moteur unitaire et la classe d'action unitaire sera disponible une fois que nous l'aurons importée Tapons simplement ces actions d'unité, et appelons ce rappel. Nous pouvons transmettre n'importe quelle méthode et nous pouvons exécuter cette méthode une fois que nous avons fini d'animer ou modifier l'Alpha en valeur cible Alpha ici Donc, tapons-le ici alors que notre groupe Canvas Alpha n' est pas le même que notre cible Alpha, alors nous voulons continuer à animer sa valeur jusqu'à ce qu'elle ait la même valeur ici Nous allons modifier son groupe de canvass alpha à l'aide d'une méthode mathématique la valeur flottante de départ sera notre alpha, notre alpha actuel, et la cible sera notre cible alpha ici que nous avons définie ici Pour sa rapidité, nous allons utiliser la vitesse, mais nous allons la multiplier à la fois. Si nous réglons la vitesse 21, cette animation devrait s'exécuter pendant 1 seconde. Et nous voulons saisir si la valeur est très faible ou très proche de notre cible alpha. Vérifions-le simplement en utilisant l'instruction suivante si l'alpha est supérieur à la cible alpha -0,1, le groupe Canvas Alpha est inférieur notre cible alpha ajoutée de 0,1 En gros, ce que nous essayons de faire, c'est de définir notre groupe Canvas Alpha sur notre cible Alpha. Donc, en gros, si notre alpha est supérieur à ce que disons si la cible alpha est un, alors -0,1 serait 0,9 Si notre Alpha est supérieur à 0,9, nous voulons le définir immédiatement sur un. Et si notre conaharget est égal à zéro et additionné de 0,1, et si nous jumelons ou changeons notre Alpha 20 à une valeur supérieure, alors si l' Alpha est inférieur à 0,1, nous voulons définir ce Nous voulons effectuer un snap lorsque la valeur est très proche, nous voulons la définir, nous allons donc quitter cette boucle ici. Ensuite, nous devons taper return null. Et puisque nous l'avons récupéré, nous voulons l'invoquer. Nous pouvons donc vérifier cela si Callback n'est pas nul, alors nous voulons l'invoquer Mais nous voulons définir la valeur par défaut entre zéro et u afin ne pas avoir à attribuer méthode à chaque fois que nous utilisons cette méthode Alpha modifiée. Nous avons maintenant cette routine alpha modifiée. Nous pouvons créer la méthode show et la méthode height. Je vais donc créer une nouvelle émission publique sur le vide. Et pour le show, nous allons définir toutes ces valeurs ici. Nous voulons définir l'Alpha 20 de départ, et nous voulons définir l'interactible et le bloc qui vous permettra de passer à travers Ensuite, nous voulons exécuter T. Puisque nous partons de zéro, nous voulons définir en utilisant l'Alpha modifié. Le premier paramètre, qui est l'Alpha g, nous voulons le définir comme 21. Et pour la vitesse de flottaison, nous voulons utiliser la vitesse d'apparition. Nous pourrons donc modifier cela sur notre inspecteur ultérieurement. Et pour le rappel, nous ne voulons utiliser aucun rappel pour l'émission ici Mais pour la méthode de la hauteur, nous voulons utiliser la méthode co-routine. Je vais juste copier cette ligne ici. Mais je veux définir la valeur cible Alpha 20, et je veux changer cette vitesse d'apparition en notre vitesse de hauteur, et nous voulons exécuter une méthode. Mais ce n'est pas une méthode. Nous voulons créer une expression déléguée ou Lambda. Et c'est comme ça. Donc, en gros, deux ensembles de parenthèses, le signe égal, puis la flèche droite, puis les crochets, et nous voulons mettre le code entre ces crochets. Ici, je vais le saisir pour des raisons de lisibilité. Et c'est en gros comme si je ne savais pas lequel, mais vérifions ce gestionnaire de tests. Oh, désolée, la mise à niveau. Je pense que c'est l'élément d'amélioration. Oui, comme ça, ce que nous avons créé auparavant pour le dialogue de l'émission. Le dialogue d'affichage nécessite des actions, et pour les actions, nous plaçons les délégués ici, comme vous pouvez le voir, et nous exécutons un ensemble de codes dans cette expression Lambda Revenons donc à notre crème glacée et je veux exécuter la méthode d'initialisation Je veux réutiliser notre fonction précédente, et je vais la configurer pour Beish modifie notre Alpha 20, puis nous voulons mettre toute la valeur à zéro, puis nous voulons désactiver l'intertable dans le bloc k. Ainsi, notre écran caché ne bloque pas nos interactions avec l'autre écran qui se trouve peut-être sur la couche ci-dessous et sur notre couche cachée ici Donc oui, sauvegardons ça. Et une fois que nous l'avons déjà, nous ne pouvons que le cacher et le montrer. Nous activons donc déjà l'écran et le désactivons dans la méthode. Mais ici, nous devons désactiver l'écran précédent. Il suffit donc de taper l'écran précédent, puis nous allons utiliser la hauteur. Parce que lorsque nous changeons d'écran, nous voulons changer d'écran progressivement Nous utilisons donc la hauteur. Cette méthode de hauteur exécutera notre routine de base, modifiera l'alpha, et définira l'Alpha 20. Et pour afficher notre écran, nous voulons taper l'écran actuel et nous allons utiliser la méthode show. Maintenant que ces deux scripts sont terminés, nous nous assurons qu'ils sont sûrs, et revenons à notre unité. Voici donc des couplets que nous devons d'abord configurer. abord, nous devons créer un nouvel objet anti-jeu sous notre canevas. Et ce serait le gestionnaire d'écran. Et je vais configurer cela pour qu'il s'étende à notre scène ici, et je vais faire de notre boutique et de notre sélecteur de niveau les enfants du gestionnaire d' écran Et pour une boutique et aussi pour le secteur des niveaux, je vais ajouter un écran d' interface utilisateur. Et nous devons créer un groupe Canvass. Donc, si ce n'est pas le cas, ajoutez simplement un nouveau composant de groupe Canvas. Et je l'ai déjà fait auparavant. Donc voilà, il n'y a rien à changer à l' intérieur du composant Canvasro par rapport à notre écran d'interface utilisateur Et aussi parce que nous pouvons simplement le faire glisser. Mais je ne pense pas que nous ayons besoin de traîner ça. J'ai oublié parce que dans notre glace U, nous sommes en train de manger une veillée, alors nous pouvons simplement la passer en mode privé Nous ne sommes donc pas confondus avec cela. Désolé, j'ai juste oublié de le mettre en mode privé. Une fois que nous l'avons défini comme privé, la valeur ici ne devrait pas encore être affichée. OK. Nous avons maintenant UICreen dans le gestionnaire d'écran ci-dessous Nous devons placer le gestionnaire d'interface utilisateur gestionnaire d'écran ici lors de l'exécution, il récupérera immédiatement notre objet enfant, tous les objets enfants contenant le composant Ucreen Maintenant, cachons notre chargeur d'écran ici. Je vais créer un nouveau bouton pour passer de l' gauche à l'écran de notre boutique. Créons un nouveau bouton, je ne suis pas sûr . Et pour ce bouton, je vais le mettre ici. Et pour l'ancre, je vais passer à une position par ici, je vais la placer en haut à gauche. Je vais redimensionner le bouton. Il est donc beaucoup plus grand. Ensuite, je vais définir que ce serait notre sélection de gauche. Peut-être cet espace pour que la convention reste la même tout au long de la dénomination des objets du jeu de scène. Remplaçons son illustration par notre cadre ici, encadrons et changeons sa couleur selon la gamme habituelle que nous avons utilisée à maintes reprises. Pour le texte, je vais définir la police pour notre visiteur et définir la meilleure adaptation à activer Ce sera notre niveau et je changerai également sa couleur dans la gamme habituelle ici. Vérifiez si nous allons sur l' écran de jeu, nous pouvons le voir ici. Créons un nouveau bouton et déplaçons-le sur le côté, et ce sera le bouton de notre panneau de boutique. Et pour l' objet texte, il suffit de modifier sa légende pour acheter comme ceci. Nous avons maintenant ces deux boutons ici. Sur chaque bouton, nous pouvons simplement ajouter un événement au clic, faire glisser notre gestionnaire d'écran et exécuter la fonction U A dans le gestionnaire et exécuter la fonction U A dans le ou la méthode de l'interface utilisateur, qui est le changement d'écran, et pour la sélection du niveau, nous voulons faire glisser le panneau de sélection de niveau en tant que paramètre d'écran d'interface utilisateur dont nous avons besoin pour vous fournir ici De même, pour le panneau de la boutique, nous voulons créer un nouvel événement au clic, et diriger le gestionnaire d'écran, et nous voulons exécuter la méthode dans la classe du gestionnaire d'interface utilisateur, changer d'écran et, cette fois, nous voulons diriger le panneau de la boutique. Et je veux m'assurer que notre panneau de sélection se trouve en haut. Cela remplira donc le désolé, le premier membre de notre écran. Donc, sauvegardons simplement l'écran ici. Et maintenant essayons ceci, voyons si cela fonctionne ou non. Alors maintenant, oui, comme vous pouvez le voir ici, nous avons affiché le panneau de gauche ici, mais si j'appuie sur Shop, il devrait passer à l'autre panneau de boutique. OK. Il semble y avoir un problème ici. Désolée. Le panneau de la boutique doit d'abord être activé, car nous parcourons l'interface utilisateur en boucle ici et nous voulons exécuter le script Le script. Enregistrez à nouveau l'écran. Je pense que la valeur de vitesse est trop lente, alors sélectionnons ces deux panneaux ici et changeons chacune des valeurs pour enregistrer l'écran et enregistrer à nouveau la scène. Essayons encore une fois. OK. Ouais. Maintenant, si j' appuie sur Changer pour accéder à notre boutique et si nous appuyons sur le niveau, le niveau revient à nouveau à notre niveau. Comme vous pouvez le voir ici. Et vous pouvez avoir autant d'écrans que vous le souhaitez et simplement mettre un écran et le responsable de la sélection se chargera du reste. En gros, vous devez créer un bouton, juste pour montrer quel panneau vous souhaitez afficher pour ce bouton. Oui, je pense que cela met fin à la configuration de notre interface utilisateur. Une chose que nous pouvons faire est de regretter qu'il y ait un problème ici, comme vous pouvez le constater. Si l'animation est en cours d'exécution, cela posera un problème ici. Nous devons donc nous assurer que cela ne se produise pas. Nous pouvons créer une sorte d' événement auquel nous pouvons nous abonner sur notre écran d'interface utilisateur. Créons simplement un événement public et ce sera une action d'action. Oh, nous devons utiliser l'espace système, donc je vais utiliser le système ici et taper action. Disons que c'est le changement, et ce sera un délégué ici. En gros, ou nous pouvons simplement changer et ici, nous pouvons exécuter ce changement effectué chaque fois que nous avons terminé la modification. Exécutons simplement les modifications effectuées ici comme ceci. Et pour le gestionnaire de l'interface utilisateur, nous pouvons créer une sorte de lingot privé, et disons simplement que cela change, et la valeur par défaut sera, bien sûr, fausse, mais nous devons créer une méthode qui définira cette true switch done switching, disons « changement terminé », et pour ce changement effectué, nous voulons définir le changement sur false Nous voulons nous assurer de vouloir vérifier si cela change ici, puis nous voulons y retourner. Nous ne voulons pas le gérer. Mais si ce n'est pas le cas, nous voulons définir le changement sur true ici. Parce que si le changement est faux, cela sera ignoré et nous passerons à ce code ici, puis nous voulons définir sur ro, puis nous voulons également nous abonner à la commutation De ici. Mais pour le changement effectué, nous pouvons nous abonner dès le départ ici. Au début, nous ne pouvons pas le faire car nous devons nous abonner à notre écran actuel au nouvel événement d'écran ici, car chacun des écrans comportera cet événement. Nous devons donc nous assurer à quel événement nous nous abonnons à sc ou à quelle classe Ainsi, chaque fois que nous définissons cela, nous voulons nous abonner depuis notre nouvel écran. Tapons donc simplement un nouvel écran. changement est terminé, alors nous voulons ajouter notre changement de méthode ici. Désolé, il n'y a pas de parenthèses ici. OK. Nous voulons effacer Sorry. Vous souhaitez effacer tout événement enregistré, je pense que nous allons vérifier cela. OK. Nous voulons d'abord supprimer l'enregistrement, s'il y en a un, puis créer un nouvel enregistrement à effacer. Nous allons juste tester cela. Je pense que nous devrons nous assurer que cela fonctionne correctement plus tard, mais essayons , nous pouvons accéder à notre gestionnaire d'écran ici et activer le bogue ici afin que nous puissions voir si sa notre gestionnaire d'écran ici et activer le bogue ici afin que nous puissions valeur change ici. Essayons juste de l' exécuter à nouveau. heure actuelle, c'est faux et chaque fois que nous pressons quand c'est terminé, cela redevient faux. Comme vous pouvez le voir ici. Et si nous appuyons dessus, oui, nous avons un problème ici parce que nous appuyons sur le même bouton. Nous devons donc nous assurer que cela ne se produise pas. Ici, si cela ne change pas, si nous sommes en train de changer, nous voulons revenir ou nous assurer que notre écran actuel est le même que notre nouvel écran. Chaque fois que l'une de ces affirmations est vraie, nous voulons la renvoyer. Nous ne voulons pas exécuter le code. Essayons encore une fois. Je suis toujours en train de compiler. C'est faux, changez-le et changez-le jusqu' à ce qu'il soit en transition et qu'il redevienne faux. Et si j'appuie à nouveau sur Shop, rien ne se passera. Mais si on passe au niveau supérieur, c'est vrai puis faux à nouveau. Nous sommes en train de changer, nous ne voulons pas créer une sorte de ce genre, comme ça, nous ne voulons pas, comme vous pouvez le voir ici, pendant la transition, rien ne se passe Mais si la transition est terminée, nous pouvons passer à l'autre écran Oui, cela devrait être dû à notre interface utilisateur, mais nous pouvons créer un bel effet d'écran si nous le voulons. Faisons-le simplement. Accédez d' abord à notre appareil photo, l'appareil photo principal, et je vais le remettre à la normale, et utilisons une couleur unie et une couleur noire. Donc, comme vous pouvez le voir ici, c'est très sympa, mais nous pouvons ajouter notre objet de jeu en arrière-plan. Alors faisons-le. Accédez à notre caméra ici. Et mettons notre modèle d'avion en arrière-plan. Et notre modèle de jeu devrait être notre simple A, je pense. Oui, c'est exact. Passons simplement à notre scène ici. Et voici notre objet de jeu. Mais nous voulons nous assurer qu'il s'agit d'une position proche de notre caméra et la faire pivoter de 90 degrés. Quelque chose comme ça. Mais nous pouvons ajuster la position ici. OK. Oui, peut-être quelque chose comme ça. Désolé, je vais modifier la valeur autour de la valeur. Enregistrez la scène, et si nous la jouons, nous devrions voir que nous pouvons changer scène et nous avons ce joli arrière-plan ici. Oui, mais vous pouvez concevoir selon le design que vous voulez et nous modifions déjà le script pendant la transition, nous ne pouvons pas interrompre la transition. OK. 48. 48 Finir l’interface utilisateur: Dans cette vidéo, nous allons créer un script pour gérer et mettre à jour l'affichage de l'argent dans le menu. Dans les scripts, le dossier des scripts de l' interface utilisateur. Créons un nouveau script C sharp, que nous pouvons appeler Update Money. Et puis ouvrons-le. Comme nous allons accéder au composant texte de l'interface utilisateur, importons l'espace de nom de l'interface utilisateur ici. Ensuite, je veux que vous créiez une référence statique pour cette classe, afin que nous puissions y accéder facilement à partir d'un autre script. Déclarons donc un champ statique public avec le type de mise à jour monétaire, et nous pouvons simplement l' appeler instance. Je vais changer la méthode de démarrage en une méthode d'éveil, et je vais initialiser la référence statique à l'intérieur de cette méthode Tapons donc le nom de référence statique et attribuons-lui ce mot clé. Ensuite, créons une nouvelle méthode publique appelée Display Money, et nous voulons passer un entier comme paramètre. Appelons-le valeur. Et je vais créer un champ public avec un type de taxe appelé affichage monétaire, afin que nous puissions accéder à l'interface utilisateur fiscale qui affichera le montant en argent. Et dans le cadre de la méthode display money, nous voulons modifier la propriété fiscale égale à une chaîne de caractères $1 avec espace et la concaténer avec l' argument value converti en chaîne à l' aide de la méthode à deux Nous voulons également ajouter une méthode de démarrage afin de pouvoir mettre à jour l'argent sur sentart en exécutant la méthode display money et en transmettant la valeur monétaire depuis le point d'instance du gestionnaire de statistiques Nous devons également mettre à jour l'argent chaque fois que nous ajoutons de l'argent depuis le script du gestionnaire de statut Appelons donc la méthode depuis l'intérieur de la méthode add many. Et en utilisant la référence statique, nous pouvons accéder immédiatement au script update Many , puis taper point instance, puis appeler la méthode display My et transmettre la valeur monétaire mise à jour dans l'argument methods. Nous devons donc maintenant mettre les choses en place dans l'unité. Développons le Canvas. Et sur l'objet du jeu d'affichage de l'argent, joignons-y le script de mise à jour de l'argent et attribuons la composante fiscale au champ d'affichage de l'argent. Maintenant, sauvegardons la scène et testons-la. Maintenant, comme vous pouvez le voir, notre argent est affiché ici, et nous pouvons essayer d' acheter une mise à niveau. Vous voyez, l'argent sera également mis à jour. Nous devons également désactiver le bouton d'achat lorsque la mise à jour est en cours. Sinon, l'utilisateur peut appuyer à nouveau dessus, et cela provoquera une erreur. Ouvrons donc le script de l'élément de mise à niveau. Et dans le cadre de la méthode de mise à niveau par mise à niveau, nous voulons vérifier si la mise à niveau de l'objet est en cours ou non. Et si c'est le cas, nous voulons afficher un message en utilisant l'instance point du gestionnaire de dialogue , appeler la méthode show message et transmettre un message qui sera le nom de la statistique et le concaténer avec une chaîne en cours de mise à le nom de la statistique et le concaténer avec une chaîne en cours Ensuite, nous pouvons renvoyer la méthode pour empêcher l'exécution du code ci-dessous. Revenons donc à Unity, testons cela. Maintenant, si j'essaie d'acheter une mise à niveau et que j'appuie sur Oui et que j'essaie d'acheter à nouveau, le message indiquant que l'article est en cours d'amélioration s'affichera pendant message indiquant que l'article est en cours d'amélioration s'affichera que la mise à niveau est en cours. Salut, c'est Romy du futur, aide à prévenir un bug avant qu'il ne se produise À l'heure actuelle, il y a un problème où l'affichage de l'argent n'est pas mis à jour lorsque nous chargeons les programmes. Donc, si nous lançons le jeu et achetons une mise à niveau, vous verrez que l' argent sera mis à jour. Essayons de le sauvegarder et d'arrêter le jeu. Ensuite, nous pouvons réessayer de lancer le jeu. Maintenant, si nous essayons de le charger, l'argent restera à 500 dollars. Alors réglons ce problème. Passons donc au manuscrit de mise à jour, et ne vous inquiétez pas de la méthode de base d'affichage pour le moment. Sous la méthode d'affichage de l'argent, créons une nouvelle méthode publique avec un type d'annulation appelé update money display Et dans le cadre de cette méthode, nous voulons simplement mettre à jour l'affichage de l'argent en utilisant la méthode de l'affichage de l'argent et transmettre l'argent actuel depuis le gestionnaire de statistiques. Maintenant que nous avons défini cette méthode, nous voulons l'appeler depuis le script de l'élément de mise à niveau. À l'intérieur de la méthode d'affichage des éléments de mise à jour, pour être exact, puisque cette méthode est appelée chaque fois que l'utilisateur charge la progression. Accédons à la référence statique de mise à jour de l'argent et exécutons la méthode d'affichage de l'argent de mise à jour. Restons là et retournons à l'unité. Maintenant, si nous essayons de lancer le jeu puis d'acheter une mise à niveau, puis de l'enregistrer. Terminons le jeu et rejouons-y. Maintenant, si nous chargeons la progression, vous verrez que l' argent sera mis à jour. Ceci conclut la leçon de finition de l'interface utilisateur. 49. 49 Son: Nous allons maintenant créer le système audio et terminer la configuration audio de l' autre objet que nous devons ajouter. Ouvrons donc notre scène de jeu. Il est actuellement en cours d'ouverture. OK. Et je vais d'abord désactiver notre chargeur S ici. Et maintenant, nous devons définir quelques éléments pour avoir d'abord un son. OK, nous allons donc créer un nouveau script pour l'audio. Créons donc simplement un nouveau dossier et appelons ce script audio. Je vais créer un nouveau script appelé random audio. Ouvrons le script. Et maintenant, nous devons créer un tableau audio. Créons simplement un nouveau type de clip audio public. C'est ici que nous allons stocker nos différents types d'audio. Appelons cela des clips audio. Nous devons créer des types de sources audio variables, qu'il s'agisse de notre audio ou de cet audio. Nous allons nous assurer que ce composant nécessitera un type de source audio. Chaque fois que nous l' ajouterons à un nouvel objet de jeu, la source audio sera automatiquement ajoutée au démarrage de cet objet , nous voulons le récupérer. Tapez cet audio et utilisez la bonne méthode du composant de jeu passez la classe ici et fermez la méthode ici. Enregistrez ceci et nous n'utiliserons pas la méthode de mise à jour. Mais nous allons créer un taureau en forme de bulon en activant ou en jouant sur une veillée Désolé, ce n'est pas une méthode. Nous voulons que cela soit une réalité grâce au vol. Nous allons d' abord créer une méthode publique pour lire l' audio, lire l'audio. Et nous voulons également créer un float qui devrait être flottant, mais je vais définir ce ton de manière aléatoire ou aléatoire. Ouais Et ce serait que je vais créer un attribut pour cette variable publique, et ce serait un type de plage. La valeur minimale serait de 0,8. Le maximum serait de 1,2 et pour le flux, je vais taper f à la fin, et Yeah. Comme ça. Vous devriez le faire et je vais fixer sa valeur par le 421. Donc, le ton parfait, le ton normal, et ce sera une déviation. OK. C'est en quelque sorte faux. Réglez simplement le pitch humain à 0,80 0,8, et le pitch maximum de 1,1 devrait suffire, je pense que 0,9 devrait suffire, mais nous pouvons le modifier dans l'inspecteur, bien sûr, peu importe la valeur que nous avons définie ici Ce sera la valeur par défaut Chaque fois que nous jouerons l'audio, nous voulons régler sa hauteur sur cette valeur ici. Nous allons accéder au pitch de cet audio ici. Pitch, et nous allons insérer une plage aléatoire. Pour la valeur minimale, nous allons utiliser la hauteur principale, et pour la valeur maximale, nous allons utiliser la hauteur maximale. Nous aurons une valeur aléatoire entre les deux valeurs ici, c'est 0,9 et 1,1. Chaque fois que nous diffusons le son, il aura une tonalité différente pour différencier le son. Cela ne semble pas vraiment monotone. La prochaine chose que nous devons faire est de jouer au hasard. Ici, nous pouvons mettre un entier si nous voulons votre identifiant audio ou votre identifiant audio. Jouons simplement cet audio en utilisant cet audio. Et nous pouvons accéder à la méthode play one shot, récupérer l'éclipse audio de notre matrice audiolips et insérer l'identifiant audio Ouais Comme ça. Cette méthode sera utilisée chaque fois que nous voulons jouer l'audio. Et nous pouvons le définir sur Enable. Il devrait en être un au départ. Nous allons donc récupérer ce composant avant exécution, car lors de l' activation, il est généralement exécuté avant le démarrage. Nous devons activer cette initialisation. Nous pouvons simplement écouter le son. Nous voulons nous assurer que si nous sommes éveillés, nous voulons écouter le son. Mais nous voulons utiliser un entier aléatoire. Nous pouvons utiliser la plage aléatoire pour la plage aléatoire, plage aléatoire plage aléatoire. La valeur minimale sera zéro, le premier indice et la valeur maximale seront longueur des points de nos clips audio. Cela permettra donc de vérifier le nombre de clips audio que nous avons placés dans le tableau de clips audio, afin de garantir que tous les membres d'Audiocyp aient la chance d'être écoutés par affichage audio ici Donc, sauvegardons ceci, et je pense que cela devrait suffire. Revenons à l'unité. Nous allons confier certaines choses au préfet, par exemple, nous voulons placer le son d'explosion sous notre explosion. Nous avons donc ici la source audio déjà ajoutée et nous pouvons ajouter le composant audio play random ici, ainsi que pour les clips audio. Nous pouvons simplement verrouiller cet inspecteur ici, afin qu'il ne soit pas modifié, puis accéder à notre dossier audio et nous pouvons mettre le son ici jusqu'à l'explosion 4, afin qu'il ait un son différent. La prochaine chose que nous devons faire c'est de placer nos armes sur balles Nous voulons mettre du son, donc je vais déverrouiller cet inspecteur ici et ajouter le son aléatoire et il ajoutera automatiquement la source audio ici. Et nous voulons le verrouiller accéder à notre fichier audio et placer les trois plans dans nos clips audio ici Nous pouvons simplement copier cette valeur, copier ce composant ici, déverrouiller et sélectionner la balle ennemie, et nous pouvons simplement coller ce composant, et il aura la même valeur. Et pour un missile, nous voulons faire de même. Faisons simplement le collage comme ici. Mais nous voulons fixer la taille à un. Et si nous accédons à notre ADO, nous avons ce fichier audio du missile. Nous n'en avons qu'un, donc nous pouvons simplement l'utiliser. Je vais copier ce composant ici, revenir à notre arme, le missile du joueur, et je vais le coller en tant que composant. OK. Ouais Enregistrez la scène et essayons. OK. Maintenant, nous avons le son et nous pouvons le voir ici. C'est très sympa. Nous avons du son maintenant. Maintenant, nous le pouvons. OK. Donc, vous pouvez le voir, nous avons cette œuvre. Et il y a autre chose que je voudrais choisir. Désolé, pour créer le son de la boîte. Arrêtons donc cela d'abord, et passons à notre activateur de bot Et chaque fois que nous activons le deuxième touret, je veux émettre un certain son Donc, lorsque nous aurons fini de détruire le premier Trett, nous voulons émettre un son, et je vais placer la source audio Ici, comme nous n' utilisons qu'un seul son, nous n'avons pas besoin d'utiliser la fonction play random audio. Je vais juste l'utiliser et le configurer pour qu'il joue en mode faible. Comme ils sont désactivés au démarrage, chaque fois qu'ils sont activés, le son est automatiquement diffusé. Nous allons accéder à notre objet et nous allons utiliser celui-ci. Je crois qu'il y en a un. Désolée, je devrais utiliser ce son pour jouer chaque fois que le boss active la deuxième arme. Suivez cette machine, je crois que je l'ai oublié. Désolé, des machines mécaniques. Accédez au deuxième objet du jeu. Machinerie, mécanicien, puis pour le premier, je ne suis pas sûr. Devrions-nous. Il a déjà été activé, nous n'en avons donc pas besoin. Et chaque fois, cela créera une explosion. OK. Donc oui. Ajustons simplement la position de notre bus pour qu'il ne soit pas trop loin. Assurez-vous que nous le déplaçons. Je clique sur ce bouton d'aide pour passer à cinquante 60 b. Oui, je pense que oui ou 55 devraient faire Si nous activons le navire-bus ici, voyons la trace de son mouvement. Nous devons déplacer les notes ici. Donc, pour les premières notes, nous allons déplacer la première vers cette position ici, et la seconde vers cette position. Nous n'avons donc pas à attendre si longtemps jusqu'à ce que le bus arrive et d'accord, je crois que j'ai déplacé le premier sur le y x, je vais le régler sur 20. Ouais Alors maintenant, nous pouvons simplement appliquer cela. Désolée. Nous devons mettre fin à cette situation et l'appliquer OK, alors conservons à nouveau le siège. Et essayons encore une fois. Nous devons maintenant ajuster la durée de vie de l'objet du vaisseau lorsqu'il est détruit. Détruit trop tôt, on peut voir que l'objet est en train de disparaître au milieu des années 90. Nous allons donc ajouter. Nous attendons maintenant le bus. Sauvetage humain. Voici notre patron. Tu dois le détruire. OK. Lorsque vous le détruisez, il émet un son permettant aux Ms dont nous avons besoin d'ajuster la trajectoire pour que OK. OK. Donc oui. Donc, cette fois, je suis restée à l'écart avec succès, vous pouvez le voir. OK. Donc oui. C'est donc le son. Et je pense que nous l'avons déjà activé, nous utilisons déjà tout le son que nous avons ici. Donc oui. 50. 50 Commande tactile: OK. Nous allons donc maintenant créer un comportement et non un comportement, un code pour gérer le mouvement tactile, afin de pouvoir déplacer le joueur tout en utilisant l'écran tactile. Ouvrons donc simplement notre script de mouvement du joueur. Et ici, le script de déplacement du joueur est ouvert. Le script de déplacement du joueur est ouvert, et c'est assez facile à faire. Nous devons créer une condition entre la position la plus élevée et créer une nouvelle directive de préprocesseur En gros, en utilisant la directive du préprocesseur, nous pouvons taper un signe pointu, puis taper et nous pouvons ajouter une condition dans l'éditeur de soulignement de l'unité En gros, si nous lançons dans l'éditeur, nous voulons utiliser cette position maximale, et nous appuyons sur Entrée, et ici, nous tapons L L L et nous pouvons taper Unity undercot Android Et pour voir la liste de nos directives de préprocesseur, nous pouvons simplement accéder à l'unité du site Web ou vous pouvez taper la directive nous pouvons simplement accéder à l'unité du site Web ou vous pouvez taper préprocesseur Unity Et ici, il vous montrera la liste des plateformes que nous pouvons définir. Et ici, nous voulons exécuter le code lorsque nous exécutons l'application directement depuis l'éditeur. Et si vous souhaitez définir des ensembles de code qui s'exécuteront sur la plate-forme Android, vous pouvez l'utiliser, ainsi que pour l'autre plate-forme. Vous pouvez consulter l'ensemble de la liste disponible ici. Alors oui, revenez ici. Mais si je tape ceci, cela désactivera le code. Nous devons donc créer une sorte de segment, et nous devons créer un code. Mais je vais d'abord le créer ici afin que nous puissions utiliser l'intelecence ou la saisie automatique Dans le cas contraire, il n' apparaîtra pas complet ici. Je veux donc m' assurer que ce que j'ai tapé ici est correct Et nous allons utiliser l' opérateur ternaire et nous voulons vérifier la saisie et nous voulons toucher Désolé, pour compter les touches Nous voulons vérifier combien de contacts touchent actuellement l'écran, et s'il est supérieur à zéro. Cela signifie qu'il y a au moins une touche sur l'écran, alors je veux obtenir la position de la première touche. Nous pouvons donc simplement utiliser, non pas le signe deux-points, mais un point d'interrogation. Et comme vous pouvez le voir ici, c'est la partie vraie, et c'est la partie fausse. Donc, pour le vrai, nous devons attribuer notre position tactile, toucher, et je veux obtenir le premier contact Je vais donc taper zéro comme index et nous pouvons le saisir dans sa position comme ceci. Comme le touch pos est affiché sur l' écran comme la position la plus importante, nous pouvons saisir la position immédiatement. Et si cela tombe, alors nous ne voulons rien changer, nous pouvons donc simplement toucher la position de cette manière. Désolée. Comme la position tactile est un vecteur, nous devons convertir ce type de vecteur touch po. Tapez simplement le vecteur et nous supprimerons toute erreur. Je vais juste copier cette ligne ici. Coupez-le et je vais le coller à l'intérieur de l'appareil. Maintenant, si nous le faisons, éditeur, vous pouvez le tester. Mais sur l'appareil, si vous le construisez, vous pourrez le déplacer à l' aide du système tactile. Maintenant, si nous revenons à Unity, nous allons créer un contrôleur pour le système Power Apps. Faisons-le simplement. 51. 51 Menu Power Up: Dans cette vidéo, nous allons implémenter le menu tactile pour les applications Power et implémenter les fonctionnalités Bullet Time. Maintenant, désactivons abord l'objet bouclier d'abord l'objet bouclier et nous pouvons dupliquer le canevas de santé Déplaçons le canevas de santé dupliqué légèrement à l' avant du navire, et supprimons simplement l'objet de jeu d' arrière-plan de la barre de santé, et nous allons créer un nouveau bouton ici Et nous pouvons renommer cet objet de jeu en Powerp Canvas. Et nous devons créer quelques boutons. Créons donc d'abord un bouton en tant qu'objet enfant. Et renommons ce bouton en bouton de protection. Et je vais redimensionner la largeur et la hauteur à 50 x 50, et repositionnons simplement le bouton Et pour ce bouton, je vais remplacer l'image source de l'image la barre circulaire ici. Et changeons également la couleur en bleu. Mais je vais utiliser la couleur bleue que j'ai déjà ici dans les préréglages. Mais vous pouvez choisir la couleur de votre choix. Et réglons simplement l'Alpha à 190. Et changeons également le téléphone du texte de l' objet enfant ici en ysitor et nous pouvons changer le texte en S pour bouclier. Et activons également l'option la mieux adaptée. Et changeons la couleur pour qu'elle soit du même bleu que celui de l'objet circulaire. Et maintenant, nous pouvons simplement dupliquer ce bouton et le repositionner. Il se trouve donc au milieu. Je vais également le faire légèrement avancer. Et renommons l' objet du jeu en bouton laser. Et changeons également la couleur, et j'ai déjà préparé un préréglage ci-dessous. Je vais donc choisir celle-ci, mais vous pouvez choisir n'importe quelle autre couleur que vous voulez. Et changeons l'étiquette de texte de l'objet de jeu pour enfants ici en L et changeons la couleur de la même couleur sur la barre circulaire, et dupliquons un autre bouton. Et celui-ci serait le méga-bouton. Et repositionnons ce bouton méga bom autour de cette position, ce devrait être Et changez sa couleur en vert et j'ai déjà préparé un préréglage pour cela. Et pour l'objet texte enfant, changeons le texte et changeons également la couleur pour la même couleur verte que la barre circulaire. Et sauvegardons la scène. Maintenant que nous avons configuré le power canvas, passons au dossier des scripts et au sous-dossier weapons, créons un nouveau script Chesap et renommons-le pour alimenter Et puis ouvrons également le script. Et d'abord, nous devons importer l'espace de noms de l'interface utilisateur. Je vais donc taper en utilisant l'interface utilisateur à points du moteur Unity ci-dessus, car nous devons accéder au bouton et à l'objet texte depuis l'espace de noms de l'interface utilisateur, et déclarons quelques variables Et le premier serait l'étendue du public et le type de bouton. Et je vais déclarer trois variables. Le premier serait le bouton de protection, puis le bouton laser. Et le dernier serait le bouton Mega Boom. Créons également une variable de texte publique pour le bouclier, le texte laser et le texte en mégabum Et nous devons également faire référence au script Shield, au script laser et au MegabmScript Créons donc simplement une variable publique avec ces types ici. Et le premier serait le script Shield, et je vais l'appeler Shield. Et le suivant serait le script laser. Et nous pouvons simplement l'appeler laser. Et le dernier sera le MegabomScript, et nous pouvons simplement l'appeler megabom et nous pouvons simplement Nous devons également déclarer un nombre entier pour stocker le montant de chaque application d'alimentation. Déclarons donc ici un entier public. Et le premier serait un montant de bouclier. Je vais le déclarer avec une valeur de trois, et pour la quantité laser, je vais également le déclarer à trois. Et pour le méga montant, je vais définir la valeur par défaut un, et enregistrer le script. Ensuite, nous devons créer une méthode, et cette méthode activera le bullet time. Nous allons donc modifier l'échelle de temps dans cette méthode. Et nous devons implémenter un paramètre pour cette méthode ici avec un type de bulon et nous pouvons simplement l'appeler lente Et en utilisant ce paramètre, nous pouvons définir si nous allons activer le bullet time ou le désactiver. Nous voulons vérifier si la valeur de l' argument est vraie, c' est-à-dire la variable slow, puis nous voulons activer le bullet time ou réduire l'échelle de temps en accédant à la classe de temps et ses propriétés d'échelle de temps, et nous pouvons la définir sur une valeur de 0,25, ce qui ralentira le jeu, et ce sera quatre fois plus lent que la vitesse normale Et pour la condition Ls, c' est-à-dire lorsque nous désactivons le bullet time, nous voulons remettre la valeur de l' échelle de temps à un Et nous voulons également activer ou désactiver le bouton Power Apps en fonction du mode bullet time présenté ici. Ainsi, chaque fois que nous sommes en mode lent, nous voulons l'activer. Nous pouvons utiliser les valeurs bully et slow pour activer ou désactiver chacun des boutons Alors faisons-le ici. Et nous pouvons simplement taper le bouton Shield, accéder à l'objet du jeu et exécuter la méthode active définie. Et au lieu d'utiliser une valeur vraie ou fausse fixe, nous pouvons simplement transmettre la valeur lente dans cet argument actif défini. Ainsi, chaque fois que nous entrons dans le bullet time, le bouton s' affiche automatiquement. Mais si nous sommes à une vitesse normale, cela désactivera automatiquement le bouton. Et il suffit de le copier-coller et nous pouvons remplacer chacun des boutons par un bouton laser. Et le bouton Mega Bum. Et ici, nous voulons exécuter le bullet time en fonction l' état du bouton de la souris pour le tester sur éditeur ou sur l' état tactile de l'appareil. Utilisons donc simplement une directive de préprocesseur. Nous pouvons simplement le taper avec un signe pointu, puis le mot clé I, et nous voulons vérifier si, sous l'éditeur Unity, nous utilisons le mot clé unit underscore editor, puis nous allons compiler un ensemble de code dans cette partie Mais nous pouvons ajouter une condition Ls en utilisant un mot clé LF pointu. Et pour la directive, nous pouvons utiliser Unity Underscore Android, ce qui compilera le code contenu dans cette directive de préprocesseur lors de sa création sur l' Et nous devons fermer la directive du préprocesseur en utilisant le signe pointu et le mot NF q. Et si nous sommes dans l'éditeur, nous voulons exécuter ce bullet time, et pour la valeur bul an, nous pouvons simplement passer en utilisant le bouton input point get Mouse. Et pour l'index, nous pouvons simplement en utiliser un, et celui-ci se déclenchera chaque fois que cliquez avec le bouton droit de la souris et chaque fois qu'il est maintenu, il définira la valeur dans chaque image pendant que le bouton de la souris est maintenu enfoncé Et pour la date, tapons d' abord ici dans l' éditeur Unity car avec cette directive de préprocesseur, l'intelligence est désactivée, et nous pouvons la copier plus tard Et pour le rendez-vous, c'est assez facile, en fait. Nous pouvons simplement vérifier le nombre de touches saisies. Et chaque fois que le nombre de contacts est nul, nous voulons activer le bullet time. Nous pouvons donc simplement transmettre l'entrée selon laquelle le nombre de touches est égal à zéro comme argument principal de la méthode Ainsi, lorsque cela sera défini sur l'appareil plus tard, chaque fois que nous relâcherons la touche , le bullet time sera automatiquement activé, tout comme dans Sky Force. Maintenant, découpons simplement ce code ici, puis collons-le dans la directive du préprocesseur Unity Android, et réorganisons le code Ensuite, nous devons créer trois méthodes, pour activer le laser bouclier et le méga-bom Alors d'abord, créons simplement la méthode enable shield. Et en gros, nous voulons d'abord vérifier si la valeur du montant du bouclier est nulle, puis nous voulons renvoyer cette méthode. Nous voulons arrêter d'exécuter le bouclier d'activation, ce qui signifie que nous n'avons plus de bouclier. Et si nous avons toujours la quantité de bouclier, nous devrions activer le bouclier, mais nous l' activerons plus tard. Et ci-dessous, diminuons d' abord le montant du bouclier chaque fois que nous utilisons le bouclier. Ensuite, nous voulons également modifier le composant fiscal du bouclier, modifier les propriétés fiscales et définir sa valeur sur la lettre S, et nous voulons faire une concatination avec la dernière valeur du montant du bouclier Nous pouvons donc voir combien de boucliers il nous reste dans ce niveau. Et nous voulons également copier cette ligne ici où nous modifierons le texte du bouclier, et nous allons simplement le coller au début. Cette valeur sera donc mise à jour au début du niveau. Et ci-dessous, nous voulons vérifier à nouveau, si après la modification du montant du bouclier, la valeur du montant du bouclier est nulle, alors nous voulons désactiver le bouton. Nous pouvons donc simplement accéder à l'objet bouclier , puis définir la valeur interactive sur Nous avons maintenant défini la méthode de bouclier activée. Nous pouvons simplement copier l'ensemble de la méthode, puis la coller deux fois. Nous pouvons modifier la seconde pour activer le laser. Nous voulons remplacer tous les objets par la seule variable laser. Nous voulons donc changer cela en quantité laser, et nous voulons également soustraire la quantité laser chaque fois que le laser est utilisé Et nous voulons également modifier le texte du laser. Et pour ce dernier, nous pouvons simplement changer ces deux L, et nous concatinons avec la quantité laser À moins que nous ne voulions comparer la quantité du laser. Et s'il est égal à zéro, nous voulons régler le bouton laser pour qu'il interagisse en cas de chute Modifions simplement le commentaire ici. Et la dernière méthode est pour le mégabom. Donc, changeons simplement cela pour activer mégabom, nous devons faire la même chose que le laser, changer la variable en mégabu, et nous pouvons simplement le copier-coller ici, là et aussi en bas Et pour le texte, nous devons le changer en megabu et changer la lettre Et pareil pour le bouton, nous devons remplacer par le bouton Megabu Nous avons maintenant créé l' ensemble de la méthode. Nous devons également actualiser le texte au démarrage pour le laser et le mégabm Copions donc simplement la ligne. Ensuite, nous devons également attribuer la méthode Dose au bouton, afin que nous puissions simplement accéder au bouton shield puis accéder à l' événement n click , puis ajouter un écouteur et nous pouvons simplement passer la méthode dans l'argument Et cela garantira que le bouton du bouclier déclenchera la méthode d'activation du bouclier. Il en va de même pour le bouton laser. Nous pouvons simplement accéder à l'événement de clic, puis ajouter l'écouteur pour la méthode laser d'activation Et le dernier serait le méga bouton Bom. Nous pouvons simplement accéder à l' événement nclick, puis ajouter Listener , puis y transmettre la méthode enable mega Bom Et sauvegardons le script, et je vais supprimer deux espaces de noms ci-dessus parce que nous ne les utilisons pas. Nous devons maintenant vérifier si les trois scripts shield, laser et mega bom disposent tous laser et mega bom disposent d'une méthode publique pour invoquer le power up Ouvrons donc chacun des scripts, et je vais d'abord passer au script laser. Et comme vous pouvez le voir, nous avons cette routine de base, mais nous devons créer une méthode publique déclencher cette routine de base, afin que cette routine de base puisse être déclenchée à partir d'un autre script. Je vais donc en créer un nouveau. Déclarons-le simplement public avec un type de retour vide, et nous pouvons l'appeler shoot laser. Et à l'intérieur de ce laser de tir, nous pouvons simplement passer le fichier laser de routine de base de départ. Je vais donc copier celui de la mise à jour. Mais nous devons nous assurer que chaque fois que nous démarrons la coroutine, le laser ne se déclenche pas actuellement Ajoutons donc simplement une vérification en tapant si et si le laser lancé est faux, alors nous voulons exécuter la coroutine Et pour ce qui est du méga-boom, nous avons déjà une méthode publique, nous n'avons donc pas besoin d'en déclarer une. Et nous devons également examiner le script du bouclier. Et comme vous pouvez le constater, nous avons déjà une méthode publique appelée shield up, nous pouvons donc l'utiliser tout de suite. Et revenons au manuscrit Power Up. Et chaque fois que nous voulons activer le bouclier, nous pouvons simplement appeler l'objet bouclier , puis accéder à la méthode shield up. Et pour le laser, nous pouvons simplement accéder à l'objet laser, puis exécuter la méthode de tir au laser. Et pour la méga-bombe, accédons simplement à l'objet de la méga-bombe. Et nous pouvons utiliser la méthode de déploiement de bombes. Et sauvegardons le script. Nous en avons maintenant terminé avec le script. Revenons à l'unité. Et attachons simplement le script du menu d'alimentation à l'objet de jeu Power up Canvas. Maintenant, nous devons configurer ce script ici. Et nous pouvons simplement diriger le bouton de protection dans la fente du bouton de protection. en va de même pour le bouton laser situé dans la fente du bouton laser. Et pour le bouton Megabum, nous pouvons simplement le diriger vers l'emplacement du bouton Megabum en va de même pour le texte, nous devons attribuer à chacun du texte le créneau fiscal approprié sur le script. Alors faisons-le. Et pour chacun de ces scripts, nous pouvons diriger l'objet du jeu Shield vers emplacement du script Shield objet du jeu laser vers l'emplacement du script laser, et l'objet Megabam vers l'emplacement du script Megabm Je vais réactiver le bouclier et sauver la scène. Et maintenant, testons cela. Et ici, comme vous pouvez le voir, le menu n'est pas visible. OK. Mais si je maintenais le clic droit, vous verrez que les boutons sont activés, et il est assez difficile de cliquer dessus ici. Mais si je déplace la souris assez rapidement sur le bouton, l'un des boutons et je clique dessus très rapidement. Par exemple, je clique sur cette bombe ici. Vous voyez que nous avons déclenché le mégabom. Et comme vous pouvez le voir maintenant, il ne nous reste plus de mégabom. Il est donc indiqué zéro sur le bouton de texte, et je peux également déclencher le laser comme vous pouvez le voir ici. Et cela diminue également la valeur du laser, et je peux également activer le bouclier. Et je peux à nouveau tirer au laser. Donc encore une fois. Essayons maintenant de tirer à nouveau avec le laser. Et une fois que c'est zéro, les boutons désactivés et nous ne pouvons plus cliquer dessus. Nous ne pouvons donc plus déclencher les power apps. Cela sera beaucoup plus facile dans le cadre du contrôle mobile. Plus vite. OK, alors arrêtons le jeu. Bonjour. C'est Rome du futur, et il y a quelques bugs que je dois corriger à propos de la puissance d'un menu et du script shield. Donc, tout d'abord, dans le menu Power a , en gros, chaque fois que nous activons le bullet time, le mouvement lié au pas de temps physique est découpé et nous devons corriger ce problème pour modifier la valeur temporelle fixe du delta, car la valeur temporelle fixe des données est une valeur fixe, dépend du pas de temps physique Nous devons donc multiplier ces valeurs par l'échelle de temps indiquée ici. Pour résoudre ce problème, nous devons créer une nouvelle variable flottante privée, et ce serait les étapes physiques par défaut, et nous allons enregistrer les étapes physiques par défaut au démarrage Dans la méthode de démarrage, nous voulons attribuer cette valeur d'étape physique par défaut à l'heure Delta fixée dans le temps Ensuite, chaque fois que nous activons le bullet time ci-dessous, nous voulons remplacer le temps Delta fixe par l'étape physique par défaut et le multiplier par l'échelle de temps. Ici, nous pouvons simplement taper fix Delta T, puis nous pouvons utiliser l'étape physique par défaut , puis la multiplier par l'échelle de temps que nous avons modifiée ici auparavant. Et ici, nous voulons également remettre le temps Delta fixe à l'étape physique par défaut. Tapons donc simplement le temps delta fixe dans le temps, puis nous pouvons simplement réattribuer la valeur du pas physique par défaut ici. Et avec cette ligne ici, cela garantira que toutes les animations liées à la physique ou mise à jour corrigée seront jouées de manière fluide, même si nous sommes au ralenti. Et l'autre point que nous devons corriger est celui du script shield ici. Et en gros, chaque fois que nous déclenchons le bouclier ici, nous voulons vérifier si la collision est activée ou non. Donc, si l'appel n'est pas activé, nous voulons exécuter la routine shield co engagée. Sinon, si l' appel est activé, cela signifie que nous exécutons actuellement la routine co, alors nous voulons ignorer ce code ici. Nous devrons également corriger la commande tactile avec le bullet time car pour le moment, avec ce code, nous ne pouvons pas du tout déclencher le menu. Chaque fois que nous essayons de le toucher, le menu est immédiatement désactivé. Supprimons donc cette ligne et insérons-la dans la directive du préprocesseur de l'éditeur Unity afin que l' intelligence soit activée, et nous devons importer le moteur Unity dans l' du système van Et en gros, il s'agit d'un espace de noms permettant d'utiliser toutes les méthodes et tous les objets liés au système de ventilation pour l'interaction avec l'interface utilisateur Et ici, dans le cadre de la deuxième méthode à puces, nous devons ajouter une condition après que le nombre de points touchés soit égal à zéro. Et pour la deuxième condition, nous voulons vérifier chaque fois que nous touchons l'écran, mais c'est au-dessus de l'interface utilisateur. Nous pouvons donc utiliser la classe du système d' événements et nous pouvons utiliser les propriétés actuelles. Donc, tapez Event System point current, nous pouvons accéder au pointeur sur la méthode de l'objet du jeu. Et cette méthode est comme pour une identification par doigt. Et comme nous n'utilisons qu' une seule touche pour contrôler le jeu, nous pouvons utiliser en toute sécurité le premier index de l'identifiant. Nous pouvons donc simplement passer un zéro dans la méthode. Ensuite, nous devons couper le code ici, puis le coller à nouveau dans la directive du préprocesseur Unit Android, afin qu'il soit compilé chaque fois que nous le compilerons sur l'appareil Donc oui, sauvegardons simplement le script, et voici les corrections qui doivent être apportées dans cette vidéo. OK, maintenant nous avons implémenté les applications Power, ainsi que le Bullet Time. Terminez les leçons et nous pourrons passer à la vidéo suivante. 52. 52 Appliquer les statistiques: Nous avons donc créé ce menu ici. Nous devons mettre à jour notre effet de bouclier, ainsi que l'effet mégabm, le rayon et les dégâts, ainsi que le laser, conformément à notre gestionnaire de jeu, comme je pense que cela devrait être le cas, et le laser, conformément à notre gestionnaire de jeu, comme je pense que cela devrait être le cas, non à la liste des améliorations, à la valeur du mégabmrad ici, valeur du mégabmrad ici, et aussi en fonction de la liste des améliorations du bouclier et de la liste des améliorations Alors faisons-le. Et passez d'abord à notre script Shield. Nous pouvons maintenant modifier la valeur depuis le début. Nous pouvons connaître la durée du bouclier au début et nous pouvons l'obtenir dans notre gestionnaire de statistiques. Tapons la durée de la perte ici, et nous voulons renseigner la valeur depuis notre gestionnaire de statistiques, et nous pouvons obtenir une instance, nous devons y accéder en référence statique. Nous pouvons maintenant obtenir la valeur des statistiques. Pour le nom des statistiques, ce sera le hangar. Laissez-nous vérifier cela. OK. OK. Chaque fois que nous voulons obtenir le nom des statistiques et pour le nom des statistiques, ce sera D. D'accord. Bouclier. S devrait être le bouclier et une fois que nous aurons utilisé le nom des statistiques, nous voulons accéder à la liste des améliorations du bouclier, celle-ci ici. Allons juste prendre ça. Donc, pour le nom, il devrait être shield. Comme nous pouvons le voir ici, le nom est shield, ce qui permettra d'obtenir le niveau actuel que nous avons ici. Le premier paramètre ici, et le second, nous voulons obtenir la valeur de notre liste, et le type de liste. Mais comme la liste se trouve en dessous des statistiques, nous devons donc la saisir comme ça. OK. Ouais. Alors maintenant, nous avons ceci. Attends une seconde. OK. Oui, nous avons obtenu les données du bouclier et nous pouvons obtenir sa durée de protection comme ceci. Donc oui, parce que notre excellent shield out renvoie les données du bouclier. Mais dans nos données de bouclier, nous avons cette durée de protection des flux publics. Nous voulons donc obtenir cette valeur. Nous voulons obtenir. Nous voulons que la durée du bouclier la même que celle dans laquelle nous nous trouvons actuellement. Ainsi, par exemple, si nous sommes actuellement au niveau 1, nous allons accéder à celui-ci. Désolé, le premier, 01. Donc, voici le Shield Two, copions-le. OK. Et pour le script de Mega Bum, je vais faire de même au début. Mais nous devons le faire deux fois. OK. Nous voulons définir la première valeur comme étant le rayon et la seconde comme étant le rayon endommagé. Nous voulons donc mettre à jour cette valeur deux valeurs ici. Et ce sera la méga-bombe. Il faut vérifier le nom, majuscule B. Ce serait donc la méga-bom, et c'est aussi la méga-bom. Désolée. Et sous la direction du responsable du statut de l'État, je vais prendre notre mégaom liste approuvée, copiez-la, cette liste ici Et pour le mégabm, je vais modifier cette liste que nous voulons récupérer Et la valeur doit être notre rayon pour le rayon. Et pour ce qui est des dégâts, nous voulons obtenir les mêmes dégâts. Ainsi, chaque fois que nous commencerons le gate play, il récupérera notre valeur actuelle à partir de notre niveau actuel dans le gestionnaire de statistiques. Et je vais enregistrer le script Seal ici, ainsi que le script megabm Et le dernier devrait être notre laser et démarrer, je suis désolée. Je vais copier notre ligne ici à partir de notre script Megabu. Oui, ça. Et ce serait la durée de notre laser. Et pour le nom du satellite, ce devrait être laser L et je vais trouver le nom de notre liste de grades laser ici et le mettre ici. Nous voulons donc rechercher la vallée à partir de la liste de scrat et, dans la liste des grades laser, nous devrions avoir le champ de durée du laser ou les variables flottantes Nous voulons donc obtenir ce courant et nous l' avons défini comme durée et sécurité de notre laser. Maintenant, si nous revenons à l'unité, et que je veux faire passer le bouclier au niveau 5, le dernier niveau que nous avons, si j'appuie sur Jouer ici, puis sur la droite Nous devrions avoir un vaisseau pour vérifier cela. Nous pouvons sélectionner l'objet de notre jeu de bouclier et nous pouvons voir que la durée de notre bouclier est de sept. Il devrait y en avoir dix en fait. Regardons simplement notre gestionnaire de statistiques, où se trouve le directeur de l'État, désolé, il n' y en a pas dix. C'est le moment de la mise à niveau, mais notre niveau 5 devrait être de sept ici. Comme vous pouvez le constater, il s'agit de la valeur que nous récupérons dans le gestionnaire de statistiques pour être insérée dans valeur de durée de notre bouclier ici. Oui, comme tu peux le voir. Si j'arrête ça, le game manager en réinitialise trois, je vais le remettre à un Supposons, par exemple, que nous modifiions la mégabomombe, ce moment, la méga-bom dans laquelle nous nous trouvons actuellement au niveau 1, mais si nous élargissons la liste des améliorations des mégabes en ce moment, la méga-bom dans laquelle nous nous trouvons actuellement au niveau 1, mais si nous élargissons la liste des améliorations des mégabes ici, nous pouvons constater qu' au premier niveau, il y a quatre et 25 pour chaque rayon et chaque valeur de dégâts Supposons que je veuille accéder à quatre bombes sur cinq, d' un rayon huit et d'un rayon de 45 pour les dégâts. Donc, si je mets ce chiffre à cinq et que je fais un appel, vous verrez ici que notre bouclier, notre mégabo, a un rayon de huit et des dégâts de 45 C'est donc cohérent avec notre environnement ici. Donc, bien sûr, le mégaboom obtiendra la dernière valeur dont nous disposons Ainsi, par exemple, si nous avons amélioré notre niveau depuis le menu de jeu, il obtiendra la valeur de niveau correspondante conformément à cette liste ici. Maintenant que nous avons créé avec succès le système de mise à niveau pour les applications électriques, nous l'avons également fait pour créer la valeur correcte pour notre santé, notre mise à niveau de missiles et notre blesserpgrad Donc, accédons simplement à notre prise de vue automatique, je pense, par exemple. Est-ce une prise de vue automatique ? Non. Laissez-moi vérifier. Le joueur dispose d'un point de tir d'un Autosoot pour la balle et d'un tir automatique pour le missile OK, ce que nous pouvons faire, c'est possible puisque nous utilisons le même script, pour le tireur de missiles et notre tireur de blaster Nous pouvons donc créer un autre script pour modifier ses données de départ. Donc, les données de démarrage des armes. Je vais créer un nouveau script appelé Weapon start data. Et nous allons également ouvrir notre script de tournage automatique. Et ici, nous voulons créer une fonction publique pour modifier notre profil de tournage. Tapons donc simplement le profil public void switch. Et pour changer de profil, nous voulons introduire un nouveau profil ici. Nouveau profil. Et dans le cadre de cette méthode, nous voulons passer à la mise à jour de notre profil de tournage en utilisant le nouveau profil que nous transmettons à cette méthode ici. Et assurez-vous que cette méthode est désolée, c'est une méthode publique. Et pour les données relatives aux tirs d'armes, nous allons supprimer la méthode de mise à jour ici, et nous n'avons qu'à accéder à une seule variable, et nous devons créditer et ce sera le composant Autosotosot Et au début, nous devons également en créer une autre , malheureusement, la chaîne. Nous devons créer une variable de chaîne et l'appeler comme je pense que ce serait le nom de l'arme. OK. Et nous pouvons commencer, nous pouvons simplement accéder au composant de prise de vue automatique, changer de profil pour le nouveau profil, nous pouvons l'obtenir depuis notre instance de gestionnaire de statistiques qui obtient la valeur des statistiques. Et pour cette valeur de statistiques, je veux passer, sans le nom de l'étape de l' arme, et pour la liste, nous voulons récupérer notre liste de joueurs ou de blaser Mais nous avons l'ère des missiles. Nous avons donc deux listes différentes auxquelles nous devons accéder. Nous devons donc créer une condition ici. OK. Comme cela se trouve dans notre gestionnaire de statistiques, nous devons copier ce mot clé ici et le coller. Je vais entrer cette ligne ici pour que nous puissions voir comme ça. OK. Nous pouvons maintenant changer de profil, mais nous pouvons créer une déclaration. Si le nom de notre arme est Blaster, je pense, alors c'est ce que nous voulons faire Nous voulons que vous fassiez cette ligne ici. OK. Mais si le nom de notre statistique d'armement est missile, alors nous voulons faire autre chose. Nous voulons copier cette ligne ici. Et pour la liste, ce devrait être la liste des missiles. Et vérifions si le nom de l'État de notre arme est correct ou non. Passons donc à notre gestionnaire de jeu. Et ici, nous avons Bester et un missile, oui, ça devrait être le bon Nous devons maintenant nous assurer que les armes démarrent les données, puisque c'est nous qui changeons de profil, mais cela se fait au démarrage. Et en gros, notre intervalle et notre taux sont configurés lors de l'activation. Nous changeons donc de profil ici, mais le démarrage est exécuté après les activations. Nous n'avons donc jamais la possibilité de mettre à jour la nouvelle valeur de notre poids par seconde. Coupons simplement ces deux lignes ici et créons une méthode locale et nous allons exécuter la valeur d'intervalle définie. Cette fois, nous allons coller ce code ici et nous assurer qu'il s' agit méthode publique et que nous pouvons exécuter cette valeur d'intervalle d'activation comme ceci, même temps, nous pouvons également modifier notre Désolé, je pense que nous devons également copier cette ligne. Il suffit de le copier et de le coller ici. Puisque nous accédons à notre profil de tournage et chaque fois que nous le modifierons, nous voulons réexécuter cette méthode ici. Organisons-le et sauvegardons-le. Dans le cadre du démarrage de l'arme chaque fois que nous configurons notre profil de commutateur, chaque fois que nous avons fini d'exécuter ce profil de commutation, exécutons simplement la méthode de notre société Autosot Tapez simplement le toseton et exécutez l'ensemble dans notre valeur. Ouais. De cette façon, nous voulons nous assurer que si nous avons un bénisseur de niveau 3 ou de niveau 4, alors chaque fois que nous le lançons nous le lançons, chaque fois que nous le lançons, chaque fois que nous le lançons, chaque fois que nous le lançons, chaque fois que nous le lançons, chaque fois que nous le Puisque nous changeons de profil au démarrage et que nous appliquons cette valeur lors de l' activation, et que nous appliquons cette valeur lors l'activation est exécutée avant le démarrage. Modifions également notre système de santé au début, saisissons-en la valeur. Il suffit donc de définir notre aide actuelle. Désolée. Nous devons définir cette activation. Fixons simplement notre santé maximale le gestionnaire de statistiques, par exemple. Instance, et nous allons obtenir la valeur de la statistique. Et la valeur de la chaîne doit être saine. Et pour la liste, copions simplement le nom, la liste des améliorations de santé ici. Revenons-en au système de santé, et j'oublie toujours que nous devons y accéder auprès du responsable de l'État. Et allons-y. Puisque les améliorations de santé ne sont qu'un flotteur, nous n'avons pas besoin de mettre de terrain. Nous n'avons pas besoin d'accéder au terrain et il n'y en a pas, bien sûr, puisqu'il s'agit d'un flotteur. Ce n'est pas une classe personnalisée, nous pouvons donc simplement la saisir et elle renverra une valeur flottante et atteindra notre santé maximale. Ensuite, nous l' attribuerons à notre état de santé actuel. Sauvegardons ça. Nous devons maintenant définir les données de démarrage de notre arme ici. Revenons à l'objet du jeu pour les joueurs, et je vais joindre les données de démarrage de cette arme. À notre époque. Et le premier serait un blaster, et le second serait notre missile, et je vais diriger le tir automatique du missile vers notre composant ici Et pour le premier, je vais réaliser ce shooting automatique ici. OK. Gardons-le et essayons de changer le niveau de notre blaster et de notre missile Essayez le niveau 3, et il devrait choisir notre arbre de niveaux et aussi le niveau 3 du missile de jeu. Jouons à ça. J'espère que je ne serai pas détruit au départ. Mais si je choisis le joueur, le missile est mis à jour au profil de niveau 3, et le blister est également mis à jour au profil de niveau 3 Le système de santé. Je le vois, miel. Il y a une erreur. Oui, je pense que nous avons une erreur, et je devrais d'abord arrêter ça. Nous devons nous assurer que notre système de santé, s'il ne s'agit pas d'un ennemi, mettons-le simplement ici et copions cette ligne, coupons cette ligne ici, mettons-la dans la déclaration. En gros, nous voulons que vous définissiez ce maximum de points vie si ce n'est pas l'ennemi, s'il s'agit d'un joueur. Sauvegardons ceci et je veux que tu réessayes. Vous voyez, il n'y a aucune erreur. Et pour le joueur, nous avons un point de vie de dix, et essayons de changer la valeur ici. Donc, pour ce qui est de l'aide, le premier a dix ans et le dernier, 18 ans. Essayons donc de modifier notre aide pour le dernier niveau, qui est le niveau 5, et de placer la sortie. Et faites un dépôt et si nous sélectionnons notre joueur, nous pouvons voir que sa santé maximale est de 18 ici. Ouais. Nous avons maintenant créé une valeur de référence à partir de notre gestionnaire de statistiques pour tous les objets évolutifs présents ici, qu'il s' agisse du blaster, du missile la santé ou des applications d'alimentation Je vais rétablir cette valeur par défaut. Fourniture de presse. Nous modifions les modifications apportées à cette vidéo et ensuite, nous pouvons passer à la vidéo suivante. 53. 53 Système de notation: OK. Créons maintenant notre système de score, et c'est assez simple, en fait. Nous pouvons simplement accéder à notre canevas ici et je vais activer cette vue TD ici et me concentrer sur notre canevas en appuyant sur le bouton du clavier F. Et nous pouvons simplement ajouter une nouvelle taxe dans notre Canvas ici. Accédez donc à l'interface utilisateur et choisissez Tax. Allons l'agrandir. Je vais en faire environ 400 ou peut-être plus, 550 pour la hauteur, je vais en faire 75. Je vais placer cela dans les meilleurs moments de notre jeu ici, et nous devrions avoir notre score ici. Je vais taper un zéro. Personnage, beaucoup zéro caractère, et je vais choisir le meilleur ajustement et augmenter la taille maximale, la taille maximale, disons 90. Je vais régler l'alignement au milieu et aussi l' alignement vertical au milieu. Je vais changer la police d'écriture du visiteur et choisir notre orange. Mais la gamme est assez difficile à lire, nous allons donc utiliser une couleur différente, peut-être un gris foncé ici. Vous pouvez choisir n'importe quelle couleur foncée si vous le souhaitez. Renommons cet objet Cortex. OK. Nous pouvons maintenant modifier notre script de gestionnaire de niveaux, ouvrons donc ce gestionnaire de niveaux. La première chose que nous voulons faire est d' ajouter de la valeur ajoutée à Ak ici, et nommons simplement cette valeur de score. Nous allons créer un entier de score dont nous avons besoin d' une référence pour attribuer un score au texte de notre partition puisque nous avons déjà le script de mise à jour, nous pouvons simplement le mettre là. Je vais ouvrir notre dossier de mise à jour ici et nous pourrons ajouter une autre variable appelée affichage du score. OK. Et nous pouvons créer une nouvelle méthode et nous pouvons copier cette méthode et simplement appeler ce score d'affichage, et nous n'en avons pas besoin. Supprimons simplement ceci et nous voulons ajouter un formatage par défaut, peut-être 80, donc c'est 40 et un autre 48080 devrait l'être Enregistrez ceci et ce sera notre score d'affichage. Je vais changer l'objet cible que nous allons modifier ici. Maintenant, nous l'avons. Nous pouvons simplement ajouter le script au texte de notre partition, c'est bon. Ce sera une référence statique. Et comme nous ne l' avons pas fait, nous pouvons vérifier cela, nous pouvons rechercher par type et taper le montant de la mise à jour, et nous n'avons aucun objet, attachons ce composant à. Donc, ça devrait aller si nous le mettons sous le texte de notre partition, et il y a en fait une erreur dans le script. Tapons simplement. Oui. Comme vous pouvez le voir ici, puisque nous avons ajouté un argument à notre a Mykal, nous devons ajouter un score Créons simplement un nouvel entier public entier, et ce sera le score minimum, et nous devons ajouter un autre score maximum. Réglons simplement ce 225 par défaut, le minimum et le maximum seraient 50. Désormais, chaque fois que nous ajoutons MQ, nous pouvons également ajouter un score en utilisant la plage aléatoire et en saisissant le score minimum ainsi que le score maximum pour la valeur maximale Nous aurons une valeur de score aléatoire. L'avantage, c' est que nous pouvons retrouver notre unité et attribuer un score différent à deux ennemis différents. Ici, nous allons diriger notre script fiscal vers l'affichage fiscal ici, et nous n'avons rien à mettre sous le présentoir d'argent puisqu' aucun composant n' appellera cet affichage d'argent dans notre niveau de jeu Nous pouvons donc simplement le laisser vide et le sauvegarder. La prochaine chose que nous devons faire est de monter jusqu'à notre navire-bus ici, et pour le système de santé, nous pouvons donner un montant plus important pour le bus, par exemple, 25025 pour le minimum et pour le maximum, pour la tourelle, nous pouvons également créer quelque chose Comme ça. Pour le deuxième missile, nous pouvons le modifier comme suit. Oui. En gros, lorsque nous tuons notre ennemi, l'ennemi normal, nous obtenons un petit score, mais si nous battons notre buste, nous obtiendrons un score plus élevé. Sauvegardons simplement la scène ici. Alors maintenant, essayons ceci. Il y a une erreur. Oui. Les mises à jour effectuées depuis le début indiquent l'argent. Mais nous n'avons pas l'affichage de l'argent, nous devons donc nous assurer que si l'affichage de l'argent n'est pas nul , nous voulons le mettre à jour. Il en va de même pour notre affichage des scores. Assurez-vous simplement que nous créons une sorte de vérification des erreurs. Si ce n'est pas le cas, nous voulons le mettre à jour et si c'est le cas, nous ne voulons rien faire. Sauvegardons cela, revenons à Unity et essayons d'y rejouer. Dernier. Le score ne fonctionne donc pas. Nous devons vérifier ce qui ne va pas. Vérifions-le simplement ici. Désolé. Donc, en gros, nous passons la chaîne de valeur ici. Oui, nous transmettons la valeur et celle que nous devons corriger concerne notre système de santé. Nous devons ajouter notre score, désolé. Donc, oh, nous ajoutons la valeur du score aléatoire à notre destruction atomique, nous devons donc accéder à notre gestionnaire de niveaux ici. Chaque fois que nous tuons, nous devons d'abord augmenter notre score. Il suffit de l'ajouter par incrément de la valeur de notre score. Après l'avoir incrémenté , nous pouvons utiliser la mise à jour de la référence My instance et utiliser la méthode du score d'affichage et nous pouvons transmettre notre score actuel de cette manière Disons que j'ai apparemment oublié cette partie. Et cela fonctionne, mais il y a un comportement étrange lorsque le score s'ajoute d'une manière ou d'une autre après avoir détruit l'ennemi. Donc oui, nous devons nous assurer que cela n'arrive pas. OK. Il y a en fait un problème ici. Examinons cet ennemi ici, l'ennemi terrestre. Passez à notre mode traité, et je vais étendre nos ennemis terrestres, et c'est le premier Voyons dans notre jeu si codor du bus devrait être désactivé Oui, il est désactivé. Mais chaque fois que nous frappons, c'est en fait notre, cela ajoute du score. Revenons à notre système de santé et voyons s'il est possible de vérifier son état de santé. Maintenant, nous devons nous assurer de ne plus ajouter de score. La solution la plus simple pour résoudre ce problème est probablement de créer une variable d'investissement b death, ce qui serait faux Ensuite, réussissez à vous faire tuer Ensuite, nous définissons cela comme vrai, nous nous assurons que si c'est un ennemi et que c'est faux actuellement, nous voulons l'exécuter. Cela ne fonctionnera donc qu'une seule fois. Essayons encore une fois. En gros, si nous réussissons à tuer, nous sommes en train de le tester et le problème persiste. Nous devons cocher une autre case dans le code et je vais passer la vidéo et rechercher la solution. Donc, pour résoudre ce problème, puisque nous avons ce problème ici, chaque fois que nous le tuons, nous tuons accidentellement les autres ennemis en dehors de notre écran. Nous pouvons modifier le mouvement de notre balle pour qu' elle se détruise chaque fois que nous appuyons sur cet activateur ici Faisons-le, ouvrons notre script Bullet Move et nous voulons créer un combat lors de la saisie du déclencheur. Voyons simplement si l' autre tag sur lequel nous avons cliqué est un activateur. Je pense que c'est un activateur. Vérifions simplement le nom du type ici. Oui, c'est l'activateur ou l'activateur. Nous voulons remettre cet objet de jeu dans le système de traction. Faisons-le simplement. Pull Manager instance, et nous pouvons utiliser la méthode return object et nous pouvons renvoyer cet objet de jeu ici. La balle. Parce que la balle va bien sûr être tirée puisque nous une grande partie de cette balle. Alors, examinons simplement notre système de santé. OK. OK. Et maintenant, essayons ceci. OK. Maintenant, cela fonctionne enfin très bien. Nous n'avons aucun comportement inattendu, et une fois que nous aurons tué l'ennemi, nous arrêterons d'en ajouter. Je vais essayer avec le Ron de voir si ça marche. Vous pouvez voir que cela fonctionne très bien. Nous réglons donc le problème. Une autre chose que nous pouvons faire, c'est chaque fois que nous sauvons un humain. Nous ajoutons également un score. Passons donc à notre gestionnaire de niveaux. Et chaque fois que nous ajoutons rescue, nous pouvons ajouter un certain score ici et simplement en ajouter 75 et le mettre à jour. Pour le sauvetage humain, nous pouvons définir une valeur fixe de 75 pour chaque sauvetage. OK. Essayons une dernière fois, car lorsque nous secourons des personnes sans intervention sans humaine, cela s'ajoute Marquez des points chaque fois que nous sauvons des personnes. Ceci conclut notre système de score et nous pouvons passer à la vidéo suivante. 54. 54 Menu de mise à niveau d’arme: Dans cette vidéo, nous allons ajouter un menu d'amélioration des armes et également configurer l'élément d'amélioration des armes. Et ici, dans la scène du menu, développez l'objet du jeu Canvas, puis développons le gestionnaire d'écran puis le panneau de la boutique. Et sous le panneau de la boutique, nous avons l'objet enfant appelé Upgrade item. Et dupliquons simplement l'objet d'amélioration deux fois en appuyant sur Ctrl D. Et je vais renommer le second pour améliorer l'objet au laser Et le troisième à améliorer le missile. Et pour le premier, renommons-le simplement pour améliorer la santé de l'objet Et sur chaque objet d'élément d' amélioration, nous avons le script d'élément de mise à niveau. Pour le nom du set, nous pouvons simplement copier le nom depuis l'objet du gestionnaire de jeu, le script du gestionnaire de statistiques, et nous pouvons simplement copier le nom de chacune des statistiques du laser. Nous pouvons simplement copier le nom du blister ici, puis coller la chaîne au nom du blister et au nom de l'article de l'objet amélioré au laser Ensuite, nous pouvons simplement sélectionner à nouveau le gestionnaire de jeu, puis sous les statistiques, nous pouvons copier le nom du missile Ensuite, nous pouvons le coller dans le script d' amélioration de l'objet d' amélioration du missile, fois sur le nom de l'étape et sur le nom de l'objet. Ensuite, sélectionnons l' objet de jeu parent, le panneau de la boutique. Et comme vous pouvez le voir ici, nous avons le groupe de mise en page verticale. Et je vais désactiver la case à cocher Child Force Agrandir la case Masquer. Nous n'avons donc pas cet écart entre les éléments d'amélioration. Décochons donc simplement cela. Et comme vous pouvez le constater, une fois que j'ai décoché l'option, le menu s'intègre parfaitement sans aucune lacune supplémentaire Nous pouvons ajouter un peu d'espacement ici dans le groupe de mise en page verticale Je vais insérer une valeur de dix. Et maintenant, nous avons un objet image sur chacun des objets d'amélioration en tant qu'enfant, mais il ne s'agit toujours que d'un rectangle blanc. Nous devons donc régler ce problème. J'ai fourni l'illustration de chacune des statistiques présentes sur la ressource Vous pouvez donc simplement la télécharger, et je vais importer cette ressource dans le projet. Je vais diriger ce fichier PNG vers le dossier sprice. Et une fois importé, je vais sélectionner le fichier PNG puis changer le type de texture en sprite Nous devons changer le mode sprite en mode multiple. Maintenant, nous pouvons découper le sprite. Et comme vous pouvez le constater, si nous utilisons le découpage automatique, il sera automatiquement découpé en trois sprites différents Passons maintenant à chacun des objets de mise à niveau, et nous pouvons attribuer l'image manuellement. Il se trouve sous l' objet de jeu appelé objet de jeu. Il existe un objet de jeu appelé image, et nous pouvons simplement sélectionner cet objet de jeu , puis attribuer le sprite Donc, pour la santé, je vais utiliser la première, l'icône zéro de S. Et nous pouvons également attribuer la même couleur orange en copiant la couleur de l'objet texte ci-dessus, puis sélectionnant à nouveau l'image , puis en la collant dans la case de couleur. Et pour les deux autres objets d' amélioration du jeu, nous pouvons faire de même. Donc, pour le blaster, je vais attribuer une image de l'icône Sets à l' emplacement de l'image source, puis coller la couleur Et pour le missile, nous pouvons sélectionner la dernière image depuis l'icône Sets, puis coller la couleur orange. Et maintenant, tous les éléments d' amélioration sont bien configurés. Maintenant, si je le teste, dans la boutique ici, vous verrez que le blaster est au maximum parce que notre profil actuel est défini le niveau maximum du Ici, comme vous pouvez le voir sur le gestionnaire de jeu, j'ai réglé le niveau du blaster à cinq Mais essayons simplement d' améliorer le missile, et je vais appuyer sur « oui ». Et testons cela et sauvegardons le jeu. Et arrêtons le temps d'exécution. Maintenant, si nous essayons à nouveau, puis que nous allons au magasin puis que nous le chargeons à nouveau, vous verrez que la mise à niveau du missile se poursuit. La configuration de l'atelier de mise à niveau des armes est donc terminée. 55. Déverrouillage de niveau 55: Bonjour, dans cette vidéo, je vais vous montrer comment créer une fonctionnalité de déverrouillage de niveaux et comment ajouter une barre de défilement à notre sélection de niveaux Donc, si nous avons beaucoup de niveaux, nous pouvons faire défiler la sélection des niveaux. Donc, pour créer la barre de défilement, c'est assez simple, en fait. Je vais d'abord désactiver le chargeur de scènes pour que nous puissions mieux voir. Et également dans notre gestionnaire d'écran, désactivons simplement le panneau de la boutique. OK. Et maintenant, sous notre panneau de sélection de niveaux, nous avons ce groupe de disposition verticale, et nous allons le déplacer vers un autre objet du jeu abord, il suffit de cliquer avec le bouton droit sur le panneau cellulaire du niveau créer une nouvelle interface utilisateur et de créer une vue défilante, et la position sera perturbée en ce moment à Tout d'abord, il suffit de cliquer avec le bouton droit sur le panneau cellulaire du niveau, de créer une nouvelle interface utilisateur et de créer une vue défilante, et la position sera perturbée en ce moment à cause de ce groupe de mise en page vertical OK. Ensuite, il suffit d'étendre la vue défilante, étendre la fenêtre d'affichage, et tous les boutons de notre niveau ou de la sélection du niveau doivent se trouver sous le contenu enfant ici. Orientons donc simplement notre menu de niveaux vers le contenu ici. Ensuite, nous devons simplement copier ce composant ou en créer un nouveau, si vous voulez, et sous le contenu, activons-le simplement. Cliquez donc avec le bouton droit sur Transformer, puis collez comme nouveau. Nous avons donc le groupe de mise en page verticale dans notre objet de jeu de contenu. Et dans le panneau de démarrage du niveau, supprimons simplement le groupe de mise en page vertical. Et ici, sous la vue déroulante, je vais adapter la vue défilante à la taille de notre panneau latéral gauche. Il suffit donc d'appuyer sur l'ancre prédéfinie ici et de maintenir le bouton enfoncé , puis d'appuyer sur le préréglage en bas à gauche ici. Cela correspond donc à notre panel. Je vais maintenant désactiver l'image. Dans la vue défilante ici, nous avons une image de couleur blanche transparente. Je vais donc simplement désactiver cela, pour que ce soit clair. Et sous la fenêtre d'affichage, nous avons également une image, mais nous ne devons pas désactiver celle-ci car cela est requis par le masque, et cela clipsera tous les boutons situés en dehors de cette vue défilante ici. Par exemple, si nous dupliquons le menu des niveaux plusieurs fois. OK. Vous verrez que ceux qui se trouvent en dehors de notre panneau de défilement ne seront pas rendus. Et c'est parce que ce masque est là. Il suffit donc de modifier le réglage de notre fenêtre d'observation. Et je vais supprimer tout de suite, nous devons tester si la barre de défilement fonctionne ou non. OK. Donc, si nous accédons à l'objet du jeu en mode défilement, nous pouvons désactiver la barre de défilement horizontale car nous ne la supprimerons pas. Et sous le contenu, je vais modifier l' espacement à environ 25 Nous avons donc un espace entre le bouton entre la sélection du niveau. OK. Et pour la vue défilante, je vais le régler sur Clip. OK. Maintenant, si nous sauvegardons puis que nous appuyons sur Play, vous verrez que nous ne pouvons pas nettoyer ou faire glisser la section des niveaux, et il nous reste encore deux niveaux en dehors de cette vue défilante ici Donc, pour que ces deux solutions fonctionnent, nous devons accéder à la vue du contenu, puis utiliser un composant d' ajustement de taille de contenu Cherchons simplement du contenu, et si vous voyez un ajusteur de taille de contenu, ajoutez-le simplement Et pour l'ajustement vertical, je vais le régler à la taille préférée. Et cela sera conforme à la taille du contenu. Si nous avons ce bouton, il essaiera de régler la hauteur à la valeur de la taille combinée de notre enfant. Il conviendra donc à la taille de notre enfant. Maintenant, si nous appuyons sur Play, vous verrez que nous pourrons faire défiler notre sélection de niveaux. heure actuelle, bien sûr, le bouton était toujours pas réglé correctement, et nous le ferons dans la prochaine partie ici. Arrêtons tout cela et je vais supprimer tout le menu des niveaux. Et sauvegardons d'abord la scène. Et nous pouvons également appliquer cela au panneau de la boutique. Ce n'est pas ce que je vais faire dans cette vidéo. J'espère que vous pourrez le faire vous-même en consultant l' exemple de notre panneau de sélection de niveaux Mais maintenant, nous allons ajouter la fonctionnalité de déverrouillage des niveaux. Ouvrons donc simplement notre script ici, et maintenant j'ai le gestionnaire de statistiques. Et nous devons créer un nouveau champ, qui est type dictionary string et boll, il s'appelle level completed Je l'ai déjà tapé. Il suffit donc de taper cette ligne ici, et le type doit être string et boll pour la clé et la valeur Et ici, d'abord, dans le cadre de la progression de la sauvegarde, nous devons également enregistrer ces champs ou données complétés au niveau. Donc, sous les données de sauvegarde, nous devons les dupliquer. Il suffit donc de sélectionner la ligne ici, copier en appuyant sur le bouton de commande C, puis ici, sous la classe de données sécurisée, je vais l'insérer en la collant dans le Ststimr, elle remplira la ligne au-dessus Maintenant que nous l'avons , nous pouvons passer à notre méthode de sécurité et de chargement et, juste sous sécurité, je vais taper des données sécurisées, puis le niveau terminé est égal au niveau terminé. Et pour les données de chargement, je vais copier cette ligne ici, désolé, puis la coller ici, puis modifier l'ordre, afin qu'elle soit complétée au même niveau de données de chargement terminé. Donc, en gros, nous voulons remplir le niveau terminé qui est encore frais dans une nouvelle session à partir de notre niveau de données chargé terminé. Et lors de la sauvegarde, nous voulons remplir les données de sauvegarde avec notre niveau terminé que nous avons déjà modifié pendant le jeu. Donc, une fois que nous l' avons enregistré, nous devons aller dans le gestionnaire de niveaux, puis à la fin d'un niveau, nous voulons nous assurer que nous ajoutons cette valeur ici. Dans l'instance Stats Manager, nous voulons accéder au champ ou aux variables du niveau complété, puis exécuter la méthode d'ajout, diffuser l'annonce. Ensuite, pour la chaîne, nous allons transmettre le nom de notre niveau pour la valeur clé, et pour la valeur du lingot, nous voulons le définir. Une fois que nous aurons joué le niveau, il le définira, et nous pourrons utiliser cette valeur pour débloquer autre niveau dans le menu des niveaux. OK. Maintenant que nous avons défini le script du gestionnaire d'état et le gestionnaire de niveaux, je pense que ce serait tout pour ces deux scripts. Et une autre chose que nous devons changer est le menu des niveaux. Ici, dans le menu des niveaux, d'abord au démarrage, nous voulons accéder au script, désolé, pas au script, au texte de l'objet du jeu situé sous le bouton. Je vais donc accéder au bouton Play, puis utiliser le composant GT dans Children et transmettre le type, qui est l'interface utilisateur fiscale, puis exécuter la méthode, désolé, modifier les propriétés du texte, et nous allons utiliser un index get sibling sibling, afin que nous puissions simplement taper transform Obtenez l'index des frères et sœurs, et cela renverra l'indice des frères et sœurs de notre base d'objets de jeu par rapport à son parent Définissons d'abord la valeur. Puisque la base est zéro, je vais l'ajouter un par un, puis je vais le fermer avec un ensemble de parenthèses, puis convertir ces deux éléments en une chaîne avec un format Mettez donc le double zéro dans cette valeur de chaîne de valeurs ici sous la chaîne e. Et cela convertira la valeur, choisissez une chaîne au format à deux chiffres. Donc, une fois que nous l'avons enregistré, cet indice frère g obtient essentiellement l'index de l' objet en fonction de son parent Donc, pour ce menu de niveau, celui-ci serait zéro, l'index frère, et celui-ci serait un Et comme cela se trouve au même niveau sous le contenu, cela renverra un index différent. Et ici, comme vous pouvez le voir, nous en ajoutons un par un. Le premier index sera donc un, puis le second sera deux, et nous le convertissons en chaînes, afin de pouvoir l'afficher sur le label de niveau ici, le 01 ici. Maintenant que nous avons modifié cela, nous devons créer une nouvelle méthode pour vérifier si le niveau est débloqué Je vais appeler cela vérifier si vous êtes déverrouillé, puis je vais créer une nouvelle condition de déverrouillage en forme de taureau Ensuite, nous allons vérifier la variable « niveau terminé » dans le gestionnaire de statistiques. Ainsi, dans l'instance du gestionnaire de statistiques, nous voulons vérifier le niveau terminé, s'il contient la clé du niveau requis, et nous devons créer une nouvelle variable de chaîne dans le menu des niveaux pour définir le niveau précédent requis. Donc, sous la cible du péché, je vais ajouter une nouvelle variable, appeler le niveau requis. Et nous devons le renseigner plus tard dans l'inspecteur, mais maintenant nous pouvons utiliser cette variable pour vérifier si le niveau terminé contient cette clé ou non. Ensuite, je contient, puis nous voulons vérifier si le niveau terminé contient cette vraie valeur dans la clé du niveau d'enregistrement. Et en gros, nous devons vérifier cela. Nous devons utiliser cette méthode contains key car si le niveau terminé ne contient pas encore cette clé et que nous essayons d'accéder à cette clé , une nouvelle erreur de référence sera renvoyée. Nous devons donc d'abord spécifier que cette clé contient. Et avec cet opérateur N, en gros, si cela tombe, cela ne sera jamais exécuté. C'est donc une mesure sûre si cette clé n'est pas encore terminée à notre niveau. Et maintenant, si nous avons déjà ce lingot, nous voulons configurer le bouton de jeu pour interagir avec le bouton de jeu, qui puisse interagir avec la valeur de notre Donc, si c'est désolé, le niveau de l'état est terminé, cela devrait être la condition déverrouillée Ou nous voulons vérifier si la chaîne du niveau requis est vide ou non. Donc, si nous utilisons cette méthode string is or empty, il vérifiera si cette chaîne est vide ou non. S'il est vide, nous voulons définir ces deux valeurs comme vraies, et si ce n'est pas le cas, nous voulons définir ces deux valeurs comme fausses. Et c'est l'opérateur ternaire a déjà été discuté plusieurs fois. En gros, si l'une de ces conditions est vraie, nous voulons définir cette valeur sur celle-ci ici. Mais si c'est faux, nous voulons définir cette valeur ici. OK. Maintenant que nous l'avons configuré, nous devons vérifier si le niveau est débloqué au démarrage et également lors de la mise à jour du menu Nous pouvons donc simplement ajouter ici et menu de mise à jour est appelé chaque fois que nous chargeons la progression. Ainsi, chaque fois que nous chargeons, nous souhaitons également modifier la condition de déverrouillage en fonction de nos données sécurisées Maintenant que nous l'avons configuré, nous devons en créer un nouveau, désolé. Je pense qu'il y a une erreur. Jetons juste un coup d'œil. Transparent. Oh, oui, c'est une erreur précédente. C'est clair maintenant. Donc, dupliquons simplement le niveau de jeu. Et je vais appeler ce gameplay deux. Et ici, dans les paramètres intégrés, ajoutons simplement le gameplay. Et maintenant, une fois que nous l'avons configuré, nous voulons placer le bouton du menu du deuxième niveau le mode de jeu 2. Ensuite, pour le niveau requis, il doit s'agir du niveau précédent, qui est le gameplay. Et cela vérifiera la valeur de la variable « niveau terminé » au début ou lors de la mise à jour, désolé, pas celle-ci, lorsque nous mettrons à jour le menu ici OK. Essayons-le, sauvegardons la scène, les menus et je vais appuyer sur Play. Vous voyez que le deuxième niveau est verrouillé, et comme vous pouvez le voir, la transformation, get sibling index renvoie la bonne valeur, comme vous pouvez le voir C'est le premier et c'est le deuxième niveau. Donc, si nous appuyons sur Play, désolé, il y a une erreur. Oh, oui, j'ai désactivé le chargeur de scènes, donc il doit être réactivé, ainsi que le panneau de prise de vue. OK, sauvegardez ceci et appuyez sur Play. OK, maintenant je peux appuyer sur le premier niveau, et le jeu va charger. Et c'est assez difficile. Revenons donc au game manager. Je vais régler le blaster au niveau 5, et réessayons OK. Je vais donc suspendre l'enregistrement puis continuer une fois le niveau terminé. OK. Maintenant, je termine le niveau. Et si nous appuyons dessus, vous verrez que le niveau est maintenant débloqué et que nous pouvons jouer au deuxième niveau Et pour économiser, nous pouvons enregistrer ça. Mais si nous voulons l'enregistrer automatiquement, nous pouvons modifier le script ici dans le gestionnaire de niveaux. Nous pouvons appeler l'instance du gestionnaire de statistiques, puis appeler la progression sécurisée lorsque nous avons terminé le niveau. Et puis enregistrez-le au démarrage du jeu ici, sous le point de départ, ici, nous pouvons appeler la progression du chargement. Il chargera et enregistrera donc le jeu automatiquement. Lorsque nous gagnons le niveau, cela enregistre la progression, et lorsque nous lançons le menu des niveaux, il charge à nouveau la progression. OK. Donc oui, pour ajouter un nouveau niveau, il suffit d'ajouter un nouveau bouton ici sous le défilement de contenu et de définir le niveau requis Et ça devrait être le nom de la scène. Donc, si nous dupliquons cela et pour le troisième niveau, l'objectif devrait être le gameplay troisième ou quel que soit le nom de la scène et pour le niveau précédent le gameplay ou le gameplay deuxième ici. Pour toute question, il suffit de répondre aux questions, et j'essaierai d'y répondre le plus rapidement possible . OK. 56. 56 Final fix et builds: Dans cette vidéo, nous allons construire le jeu final sur le binaire Android ou pk Voici la vidéo mise à jour, et j'utilise Unity 2019 0.4 0.15 Nous devons donc d'abord préparer le SDK Android ainsi que le SDK FFA Avec la nouvelle version de Unity, je pense qu'après 2018 ou à partir de 2019, vous pouvez vous rendre sur le Unity Hub ici. Je vais donc ouvrir le Unity Hub et dans le menu Installer, vous pouvez ajouter un module sur chacune des versions de votre unité installées sur votre PC. Par exemple, j' utilise celui-ci ici, et nous pouvons simplement cliquer sur le bouton de navigation ici, sur le bouton à trois points, puis sur Ajouter des modules Et si vous avez installé le support de build Android, vous pouvez l'étendre et vérifier si cette option est installée, le SDK Android et le NDK, ainsi que le JDK ouvert Dans mon cas, je l'ai déjà installé. Mais si ce n'est pas le cas, vous pouvez simplement cocher ces deux cases ici, puis appuyer sur le, et l'installation s'effectuera automatiquement. Une fois terminé, vous pouvez ouvrir votre projet et commencer à suivre cette vidéo ici. Je vais donc annuler cela et fermer le Unity Hub. Une fois le SDK installé, vous devez le définir dans les préférences d'édition et sous les outils externes ici Et si vous utilisez le JDK ouvert et le SDK depuis le hub, vous pouvez cocher ces deux cases ici. Pour utiliser ceux qui sont installés avec Unit. Et aussi le NDK ici. Et probablement, le gradle sera également vérifié par défaut. Si ce n'est pas le cas, vérifiez ceci, mais j'utilise un gradle personnalisé ici, donc ça va Et si vous utilisez un kit de développement ou un SDK Jaffa personnalisé que vous avez téléchargé depuis le site Web du SDK Android, vous pouvez décocher cette case, puis accéder au chemin du GDK installé et au chemin du La prochaine chose que je veux souligner ici, s' assurer que le chargeur de scènes est activé. Et ici, dans mon cas, je l'ai activé, mais dans la vidéo précédente, se peut que nous l'ayons désactivé lorsque nous utilisions l'interface utilisateur. Assurez-vous donc que le chargeur de scène est activé, et sous la scène de jeu, je vais ouvrir la scène de jeu ici. Je vais également vérifier que le chargeur de scènes est chargé. OK. Maintenant, nous sommes tous d' accord avec le chargeur de scène. Configurons maintenant les paramètres de construction. Mais d'abord, je vais importer l'icône, et j'ai déjà préparé l'icône pour cela ici, et vous pouvez la télécharger dans la ressource de cette vidéo. Alors suivons simplement cette icône et je vais la mettre dans les sprites OK. Maintenant, c'est important. Et nous pouvons accéder au paramètre de construction du fichier, et je vais cliquer sur le paramètre du lecteur. Et cela ouvrira les paramètres du lecteur ici. Et il suffit de faire glisser l'icône. J'ai déjà sélectionné. Mais vous pouvez simplement faire glisser l'icône ou vous pouvez simplement utiliser le bouton de sélection et rechercher l'icône ici. Ensuite, vous souhaitez définir le nom de l'entreprise ici, et j'ai déjà défini le nom de l'entreprise en utilisant mon nom, le nom du produit et la version. Et pour les autres paramètres, nous devons nous assurer que le nom du package est défini comme suit : nom de votre entreprise, puis point sur le nom de votre jeu. Vous pouvez définir ici le niveau minimum supporté par Android si vous le souhaitez. Et nous avons le code de version de ce bundle. Par défaut, il doit être défini sur un, et cette valeur doit être un entier. Assurez-vous donc que chaque fois que vous créez une nouvelle version, vous augmentez ce nombre d'une unité. Sinon, le Play Store rejettera si vous téléchargez un EPC ou un PK mis à jour contenant le même code de version de bundle que celui disponible dans le Assurez-vous donc d'augmenter ce code de version ici. Et assurez-vous que le backend de script est réglé L deux CPP et pour le niveau de compatibilité AP, définissez ces deux points pour x, et avec cette configuration, vous pourrez sélectionner le 64 bits Dans le cas contraire, cela sera rétrogradé et vous ne pourrez pas l'activer. Et selon les exigences, je pense que c'est depuis août ou septembre 2019 que les nouvelles applications soumises au Playstore doivent avoir leur binaire au format 64 bits Vous devez donc vous assurer que cela est activé. Et pour l'autre configuration, nous pouvons simplement laisser cela comme paramètres par défaut. Et dans les paramètres de publication, vous devez définir un magasin de clés ici. Il suffit donc d'appuyer sur le keystore personnalisé ici, et nous pouvons simplement naviguer Mais si vous n'avez pas créé de keystore, vous pouvez en créer un nouveau Il suffit donc de cliquer sur le gestionnaire de keystore ici, de créer un keystore ici et d'appuyer n' importe où Et je vais créer un nouveau dossier ici, keystore, et je vais l' appeler de mon nom Et tu dois définir un mot de passe. Je vais donc configurer un mot de passe Dami ici. Et pour la nouvelle clé, vous pouvez simplement définir quelques noms ici. Par exemple, ce jeu est le projet Smoop, donc je vais l'appeler le projet Smoop Et pour le mot de passe, je vais utiliser le même mot de passe. Et pour le nom, je peux utiliser mon nom ici. OK, on peut laisser l'autre vide. Je vais appuyer sur la touche Ajouter, et cette touche sera ajoutée. Maintenant, il est créé, et nous pouvons simplement l'utiliser comme magasin de clés de projet et comme clé de projet ici. Maintenant, une fois cette configuration terminée, vous verrez que nous avons les options pour utiliser ce projet fluide que nous avons créé ici. Mais si nous supprimons ce magasin de clés personnalisé ici, vous verrez que nous allons créer ce signe APK ou ce mode de débogage ici, et vous devrez saisir à le mot de passe chaque fois que vous redémarrez l'éditeur Unity Assurez-vous donc d'en être conscient. OK, maintenant je vais fermer ceci et je vais enregistrer le projet. Nous pouvons maintenant le créer en appuyant sur le bouton « build » dans les paramètres de construction ici. Et je vais remplacer cet APK ici, et construisons-le. Je vais publier la vidéo et nous continuerons à tester la version sur l'appareil. Maintenant, la construction est terminée, et nous devons l'installer sur notre téléphone ici. Et pour l'installer sur notre téléphone, j'ai déjà préparé un fichier batch pour ouvrir cet AP et il l' installera automatiquement sur notre téléphone. Mais vous devez connecter votre téléphone au PC ici, et voici l'exemple de fichier batch ici. En gros, nous devons le pointer vers le fichier ADB, et je l'ai pointé vers le SDK installé par la version précédente de mon unité Et vous pouvez rechercher votre chemin et simplement remplacer ce fichier de nom de chemin, et vous pouvez utiliser ce fichier batch pour installer votre APK. Je vais donc fermer ça. Et ici, dans le dossier Bills, je vais cliquer ici choisir Ouvrir avec et choisir une autre application. Et ici, je vais utiliser le chemin d'installation d' ADB ici. Et si vous ne l'avez pas, vous pouvez simplement cliquer sur Plus d'applications , puis rechercher une autre application sur ce PC et accéder à ce fichier batch ici, l'installation ADB Je vais donc choisir ceci et appuyer sur. Et cela installera le jeu. Maintenant, il est en cours d'installation. Il ne montre rien, mais si nous l' installons avec succès sur le téléphone, il affichera un message de réussite comme celui-ci. Je peux simplement appuyer sur n'importe quelle touche pour continuer, et cela se fermera, et maintenant je vais lancer le jeu sur mon téléphone. Voilà à quoi ça ressemble au téléphone, et essayons de jouer le niveau. Jusqu'à présent, ça a l'air bien. Allons chercher les pièces. Et le bullet time fonctionne également lorsqu'il n'y a pas de contact. Testons les bonus laser de cette chaîne de vaisseaux ennemis. Le sauvetage humain fonctionne également très bien. Mes armes sont un peu surpuissantes maintenant, mais ce n'est qu'une question de réglages. Voici donc le patron. Essayons le bouclier. Maintenant, le bus est vaincu et je n'ai obtenu que deux succès sur trois. Donc oui, c'est la fin de ce cours, et j'espère que vous en apprendrez quelque chose. Et si vous avez des questions, n'hésitez pas à les poser. Et si vous avez également trouvé un bogue, veuillez me le faire savoir, et j'essaierai de le corriger et mettre à jour les bogues sur la vidéo correspondante. Et si vous n'avez pas révisé le cours, veuillez le faire car les critiques m' aideront à développer un meilleur cours à l'avenir et aideront également les autres étudiants à décider de s' inscrire à un cours Merci encore de vous être inscrit et d'avoir terminé. J'espère que ce cours vous sera utile, et je vous verrai lors du prochain cours. 57. 57 Optimiser les déplacements des nœuds: Dans cette vidéo supplémentaire, nous allons optimiser le script de l'éditeur Note Move ainsi que le composant Note Move. Et dans cette vidéo, nous allons remanier le script Note Move, afin qu'il prenne en compte la transformation locale. Auparavant, cela fonctionnait dans la transformation locale, mais les indicateurs de courbe étaient dans la transformation mondiale. Maintenant, je vais changer le contrôleur Gizmo pour il soit également dans la transformation locale de l'objet Ainsi, chaque fois que nous déplaçons l'objet, le Gizmo le suit Pour ce faire, ouvrons le script de l' éditeur Note Move. Et ici, dans le script de l'éditeur Note Move. Dans la méthode de la scène I, nous devons le convertir en un espace local. Mais la poignée de position fonctionne avec une transformation du monde. Pour ce faire, nous pouvons simplement accéder à l'objet source du jeu ici et y accéder par transformation, puis nous pouvons utiliser la méthode du point de transformation, puis insérer la valeur du nœud ici dans la méthode du point de transformation. Et en gros, cela transformera la position de l'espace local en espace mondial, et nous allons convertir la position de chacun des nœuds en un espace local. Mais pour que les poignées de position fonctionnent, elles besoin d'un espace mondial. Nous devons donc d'abord convertir cette valeur en un espace mondial à l' aide du point de transformation. Mais chaque fois que nous stockons le vecteur résultant de cette poignée de position, comme vous pouvez le voir ici, la valeur de retour, nous devons le reconvertir dans l'espace local. Ici, je vais ajouter un point de transformation par point source, et ce sera le point de transformation inverse. Et nous devons mettre tout ce code ici entre parenthèses Ajoutons simplement une parenthèse fermée à la fin. En gros, nous allons convertir les nœuds en un espace local. Et nous devons également convertir cette valeur dans l'espace mondial. Et ici, nous devons exécuter la méthode du point de transformation à partir de l'objet de transformation. Accédons donc simplement à la transformation, puis exécutons le point de transformation ici , puis passons les nœuds ici. OK, sauvegardons ça. Revenons maintenant à Unity et jetons un coup d'œil. Ici, j'ai cet objet cube ici, et ce cube ici, j'ai déjà attaché un nœud à déplacer ici. Donc, si j'ajoute des nœuds, ajoutez-en quelques ici. Je vais créer quatre nœuds. Ajustons simplement la position des nœuds, et comme vous pouvez le voir, en ce moment, les nœuds suivent l'objet ici. Je vais donc ajouter une valeur aléatoire ici afin que nous puissions déplacer les nœuds. Et maintenant, ajustons les notes. Voici donc la première note. Et voici la troisième note. Il s'agit de la deuxième note, et voici la quatrième note. OK. Alors maintenant, ajustons simplement cela ici. OK. Comme vous pouvez le constater, si nous déplaçons les notes ici, cela fonctionne maintenant. Toutes les notes suivent l'objet du jeu ici. Mais nous devons corriger la courbe, la ligne tracée ici. Je vais donc simplement ajuster les nœuds ici. Cela part donc de cette position. Et maintenant je vais raconter la scène ici. Et je vais appeler cette note Move test, et nous allons utiliser la scène pour tester le script modifié. Et revenons au studio physique ici. Maintenant que cela a été modifié. Ensuite, nous devons modifier la note « Move script » ici. Passons d'abord à la méthode du nœud des courbes G. Et en gros, étant donné que les nœuds trouvent déjà dans des espaces locaux, nous n'avons pas besoin de convertir la position du monde en espace local, nous pouvons donc simplement supprimer cette méthode en toute sécurité ici. Et je vais supprimer toute cette méthode. Et supprimez toutes ces parenthèses ici. Ces parenthèses supplémentaires. OK. Ensuite, je vais supprimer ce code ici. Nous allons donc partir de la première note plutôt que de la position initiale. En gros, nous voulons commencer par la première note , puis passer à la note suivante et ainsi de suite. Nous pouvons donc simplement supprimer ce code ici. Mais par mesure de sécurité, je vais le recommander ici, afin que ce code ne soit pas exécuté Et la prochaine chose que nous devons faire est ici, dans le smo sélectionné, nous devons supprimer cette conversion ici Je vais donc supprimer ce point de transformation parent ici. Mais en gros, cela tracera la ligne dans l'espace mondial, mais le problème est que les facteurs cette liste appelés positions des courbes se situent dans l'espace local. Et si nous le laissons ainsi, la courbe sera dessinée dans une position incorrecte et non par rapport à l'objet du jeu. Mais nous ne pouvons pas utiliser le point de transformation car nous voulons uniquement saisir la position de départ chaque fois que nous jouons afin mieux voir la courbe lorsque l'objet se déplace, voir clairement qu' il suit la courbe. Donc, pour le faire ci-dessus, je vais ajouter un nouveau vecteur privé trois, et ce serait une position de départ. Et ici, dans la méthode d'inactivation, nous voulons définir la position initiale de cet objet ici Donc, saisissons-le, transformons cette position, et nous voulons stocker la position initiale dans la variable start pus. Et ci-dessous, dans la méthode Inside the rogs Most, je vais ajouter une nouvelle variable locale de facteur trois appelée offset, et je vais vérifier si l'application fonctionne, puis nous voulons obtenir la position de départ Sinon, nous voulons obtenir sa position transformée. Et en gros, chaque fois que le jeu se déroule, nous voulons uniquement obtenir la position de départ et nous ne voulons pas obtenir la position de transformation à chaque image. Mais chaque fois que nous éditons ou que nous ne jouons pas, nous voulons changer de position. Ainsi, chaque fois que nous déplaçons l'objet, toute la ligne est mise à jour. Et en utilisant ce décalage ici, nous pouvons simplement ajouter le décalage ici à la position de la courbe, et cela convertira la position locale de la courbe dans l'espace mondial. Ajoutons donc un autre bouleversement au deuxième argument. Et maintenant, comme les nœuds se trouvent dans un espace local parce que nous les avons modifiés dans l'éditeur de mouvement des notes ici, nous devons également ajouter le décalage. Je vais donc ajouter le décalage, et ici, je vais également ajouter le décalage. Et sauvegardons ça. J'ai fait une erreur lorsque la variable de position de départ est vecteur deux alors qu'elle devrait être le vecteur trois. Je vais donc le définir sur le vecteur trois et enregistrer à nouveau le script. Et revenons à l'unité. Et maintenant, comme vous pouvez le voir , la courbe est alignée avec le contrôleur des nœuds, et chaque fois que nous déplaçons l'objet, toutes les lignes et tous les nœuds suivent. Mais cela ne marchera pas encore avec le mouvement. Cela perturbera le mouvement. Nous devons donc régler ce problème. Donc, dans le script Note Move, nous pouvons simplement désactiver cette impression car nous n'en avons plus besoin. Et en gros, à l'heure actuelle, chaque fois que nous exécutons la routine co ici, nous exécutons cette méthode ici, et nous calculons des notes de courbe à chaque fois, et ce n'est pas une question de performance. Donc, pour rendre cela plus performant, mettons simplement en cache les notes de courbe sur Enable ici en créant une nouvelle liste privée de vecteurs. Je vais donc créer une nouvelle liste privée du vecteur trois. Et je vais appeler ce chemin, et initialisons-le Et ici sur la méthode nenable. Récupérons simplement la méthode des nœuds de courbe et transmettons-la dans le chemin ici. Et maintenant, nous pouvons supprimer cette ligne en toute sécurité. Et ici, à l'intérieur du gadget routier sélectionné, nous voulons également modifier ce code Donc, en gros, nous voulons vérifier si l'application fonctionne, et si elle fonctionne, alors passons simplement le chemin que nous avons généré sur Activé ici. Il ne calculera donc pas de nouvelles notes de courbe à chaque fois. Mais s'il ne joue pas, nous pouvons calculer de nouvelles notes en toute sécurité à chaque fois car nous pouvons effectuer ajustements dans l'éditeur, et disons ceci. Et maintenant, nous devons modifier le mouvement ici. Donc, pour le mouvement, en gros, nous voulons commencer la position de l'objet dès la première note. Pour ce faire, nous pouvons simplement accéder à la position de transformation, puis nous pouvons transmettre l'ID de position du chemin. Mais comme le chemin se trouve dans l'espace local, nous devons ajouter la position de départ. Maintenant, nous devons également modifier cela ici. Nous devons toujours nous comparer à la situation mondiale actuelle. Pour comparer cela, nous devons ajouter la position de départ ici. Je vais ajouter la position de départ avec ce chemin ici et je vais ajouter un ensemble s parent C ici, afin que nous puissions d'abord regrouper ce calcul, puis soustraire en transformant la position ici Ici, chaque fois que nous déplaçons l'objet, nous voulons déplacer la position mondiale, et ici nous pouvons simplement accéder à la position mondiale, puis ajouter le décalage de la position de départ à la position du chemin pour la rotation, nous devons également le modifier ici. En gros, nous devons ajouter la position de départ comme décalage par rapport à la position du chemin et nous la soustrayons avec la position mondiale Une autre chose que nous devons modifier ici est le nœud get curve ici. En gros, nous n'avons pas besoin d' ajouter les premiers nœuds ici. Parce que nous voulons nous assurer que la première note est la première note que nous avons définie dans l'éditeur, la position de Gizmo, je vais donc la supprimer Maintenant que nous l'avons modifié , essayons-le. Revenons à Unity, nettoyons la console et appuyons sur Play. Maintenant, comme vous pouvez le voir, si j'appuie sur play, l'objet suit très bien la ligne ici. Et si je déplace cet objet dans l'autre position, et si nous recommençons le jeu, vous verrez qu'il se déplacera sur cette ligne ici. Ainsi, avec cette modification, il est très facile d'ajuster le mouvement de l'objet de déplacement du nœud, et nous pouvons voir au moment de l'exécution le bon chemin et le bon mouvement en fonction du chemin. Il y a d'autres optimisations que nous devons faire ici. En gros, nous n'avons plus besoin du parent de transformation, nous pouvons donc simplement le supprimer en toute sécurité ici et nous n'en avons plus besoin. Supprimons donc simplement toute cette ligne liée au parent de transformation. Et celui que nous avons commenté, supprimons-le parce que nous n'en avons plus besoin. Et maintenant, nous avons supprimé la variable parent. Revenons à Unity et essayons de voir si ce til fonctionne correctement ou non. Et maintenant, comme vous pouvez le voir , cela fonctionne correctement. Oh, une autre chose que nous voulons modifier ici est la courbe ici. Comme vous pouvez le constater, le tracé de la courbe ne s'arrête pas à la bonne position. Et pour résoudre ce problème, c'est assez simple, en fait. Si nous accédons au script de déplacement de nœuds ici, nous pouvons ajouter un signe égal. Nous voulons donc créer la courbe si elle est inférieure ou égale au segment de courbe. Cela couvrira donc la courbe jusqu'à la fin du nœud ici. Enregistrez simplement le script ici et maintenant, une fois le script mis à jour, vous verrez que la ligne verte est terminée jusqu' au dernier nœud ici. Et maintenant, avec cette modification, en gros, c'est plus de performance, car chaque fois que nous lançons le jeu, il n'encaisse les notes de courbe qu'une fois activé. Mais si nous sommes en train de modifier dans l'éditeur, les notes de courbe seront mises à jour à chaque fois ici, comme vous pouvez le voir sur le g, c'est plus sélectionné. Et avec cette modification, nous devons modifier l' ennemi présent sur la scène ici . Ouvrons simplement la scène de jeu ici et je vais passer à la première vague d'ennemis ici. Et si nous activons le jeu ennemi, vous verrez que c' est la position, et que ce sont les nœuds ici Nous devons donc modifier le nœud, et voici l' activateur activé Déplaçons donc d'abord l'avion ennemi pour le rapprocher beaucoup plus de l'activateur Ensuite, modifions la courbe ici. Je vais donc soustraire la position z ici avec dix sur chacun des nœuds ici Et maintenant, vous voyez qu'il est correctement aligné. Et maintenant, si nous sélectionnons à la fois les vagues ennemies et l'avion ennemi ici, vous voyez que nous pouvons voir l'activateur et l'avion ennemi Ainsi, une fois que le collider ou l'activateur aura touché cet objet ici, il activera cet ennemi, qui partira de cette position Nous avons donc une bien meilleure représentation visuelle chaque fois que nous concevons le mouvement de l'ennemi dans le niveau. Je vais ajuster un peu ces nœuds ici. Il se déplace donc plus loin vers l'avant. Il s'approche du joueur. OK. OK. Donc oui, c'est essentiellement ainsi que nous modifions le script ici. Une autre chose dont je veux m' assurer est la rotation. Je vais donc activer la rotation ici et essayons-la car nous modifions déjà la rotation, et comme vous pouvez le voir, la rotation fonctionne bien. Cela fonctionnera donc également avec le navire ennemi sur la scène de jeu. OK. 58. 58 Correction d’erreurs StatsManager: Bonjour. Ceci est une vidéo de mise à jour pour corriger quelques bugs que Paul Torn, l'un des étudiants de ce cours a repéré. Merci Paul pour ça. Donc oui, la première chose que nous avons un problème chaque fois que nous rejouons à une partie précédente que nous avons terminée, cela génère une erreur à la fin de la partie, chaque fois que nous devenons habiles ou chaque fois que nous tuons le boss Nous ne pouvons donc pas quitter ce niveau. Et je peux te montrer ici. Jouons maintenant au premier niveau. Et faisons-nous tuer par l'ennemi, par exemple. OK. Donc ici, si nous sortons, vous voyez que nous débloquons le deuxième niveau, et cela ne devrait pas non plus se produire. Nous devons nous assurer que chaque fois que nous sommes tués, nous ne débloquons pas le niveau, et nous ne le débloquons que lorsque nous avons tué le boss. Nous allons donc également régler ce problème. Mais maintenant, si nous essayons de rejouer au jeu, puis nous essayons de nous faire tuer. Comme vous pouvez le constater, le menu ne s'affiche pas. Et ici, dans la console, nous avons quelques erreurs. OK. Donc, ici, filtrons simplement cela. Je pense que c'est pour la dernière fois. Oui, ici. C'est l'erreur. Et en gros, sur cette erreur ici, et ici, comme vous pouvez le voir sur le gestionnaire Lefl, chaque fois que les jeux commencent cette routine de base ici et que nous ajoutons le niveau terminé Le problème est que si nous avons déjà une clé portant le même nom niveau dans ce dictionnaire terminé, cela générera une erreur. Nous devons donc régler ce problème. Pour résoudre ce problème, nous devons d'abord ouvrir le gestionnaire de statistiques. Et ici, dans le gestionnaire de statistiques, créons une nouvelle méthode ci-dessous, qui sera une méthode publique, afin que nous puissions y accéder à partir d'un autre script. Et disons simplement que ce niveau est terminé. Ici, nous voulons passer un argument, qui est un type de chaîne qui peut simplement l'appeler du même nom qui est le nom du niveau que la méthode ci-dessus. Et pour la deuxième valeur, nous voulons transmettre la valeur du lingot Et ici, à l'intérieur, ça devrait être assez simple. Nous pouvons vérifier si le dictionnaire de niveau terminé contient une clé ou un nom de niveau de chaîne ici à partir de ce paramètre, puis nous voulons modifier la valeur en accédant à l'entrée, à la clé ici, puis en passant le nom afo comme index ou clé, puis nous assignons puis nous assignons la valeur bleen que nous transmettons ici L, nous pouvons simplement exécuter la méthode d'ajout à partir du dictionnaire, puis ajouter le nom du niveau ainsi que la valeur d'interdiction ici. Nous avons maintenant créé cette méthode. Nous pouvons revenir au gestionnaire létal et au lieu d'ajouter directement au dictionnaire lefl completed, nous pouvons simplement exécuter la méthode add fo completed, et nous pouvons utiliser le même argument ici Mais il y a une autre chose que nous voulons corriger ici. Nous voulons régler ce problème. Nous ne voulons pas passer tout notre temps ici. Nous voulons donc modifier cette valeur en fonction de la condition. Donc, dans le cadre de la méthode du jeu public void, nous pouvons ajouter une valeur d'or et nous pouvons simplement appeler cela une victoire Et ici, dans le délai de comptage, nous pouvons également transmettre la valeur du lingot et appeler cela une victoire Et maintenant, nous devons transmettre cette valeur de lingot de la méthode de jeu à la méthode du délai de comptage, ici dans la méthode Start Cote Et maintenant, nous avons cette valeur de Bulen. Nous voulons remplacer cette vraie valeur par cette valeur bin, qui est win. Sauvegardons ça. Et maintenant, nous devons changer certaines choses dans la scène. Revenons donc à l'unité. OK. Pendant que nous y sommes, nous voyons que nous avons un autre message d'erreur. Ouvrons-le donc ici. Et en gros, cela peut générer une erreur s'il n'y a aucun objet de jeu avec un type de joueur. Nous devons donc vérifier cela. Je vais créer une nouvelle variable temporaire appelée objet de jeu du joueur. Et je veux récupérer l'objet du jeu et transmettre à cette variable temporaire ici. Maintenant, nous voulons vérifier si l'objet du jeu du joueur n'est pas nul. Ensuite, nous voulons obtenir la transformation, et nous pouvons utiliser la variable temporaire que nous avons déjà mise en cache ici. Donc, si ce n'est pas nul, nous voulons obtenir la transformation et cela devrait résoudre ce deuxième problème ici. Alors voilà, quand on change, c'est où ? Lorsque nous modifions le jeu pour utiliser une variable Bullion ici, nous devons corriger l'objet dans la scène de jeu Ouvrons donc simplement la scène de jeu ici et essentiellement sur l'objet de jeu du joueur ici. Chaque fois que le joueur est mort, nous voulons relancer le jeu. Mais maintenant, il manque la même méthode pour ce qui est du système de mort. Nous devons donc retourner dans le manager de gauche, puis choisir le jeu avec le lingot ici car les signatures des méthodes changent Et pour le joueur, nous voulons décocher la valeur des lingots du jeu Il ne donne donc pas de valeur vraie à l'argument de la victoire haussière ici. Et pour le bus ici, si nous allons au navire-bus, nous voulons sélectionner à nouveau le jeu et la méthode pour les mettre à jour, utiliser la nouvelle méthode avec la valeur Bulon, puis nous voulons transmettre la valeur Bulon Et nous devons désactiver le navire-bus ici. Il est donc activé lorsque le lifo démarre. Sauvegardons la scène ici et revenons au menu. Et maintenant, essayons de tuer le joueur deux fois de plus. OK. Maintenant, il affiche ce menu ici, puis effaçons le journal ici, rejouons et nous allons nous faire tuer à nouveau. Et comme vous pouvez le constater, nous n' avons pas à nouveau la même erreur. Et nous pouvons le voir, cette interface utilisateur est affichée deux fois. Cela résoudra donc également le problème avec le bus. Nous ne pouvons pas quitter le jeu lorsque nous battons le bus pour la deuxième fois. OK. Donc oui, ce sera tout. Et merci encore, Paul Thornton, avoir repéré ce problème. Bravo.