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.