Les bases du développement de jeux dans Godot ! | Thomas Yanuziello | Skillshare

Vitesse de lecture


1.0x


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

Les bases du développement de jeux dans Godot !

teacher avatar Thomas Yanuziello, Indie Game Developer

Regardez ce cours et des milliers d'autres

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

Regardez ce cours et des milliers d'autres

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

Leçons de ce cours

    • 1.

      Introduction

      1:56

    • 2.

      Pause

      17:42

    • 3.

      Titre

      15:59

    • 4.

      Transition

      14:18

    • 5.

      Autoload

      14:06

    • 6.

      Musique

      15:09

    • 7.

      Paramètres

      18:34

    • 8.

      Sortie

      13:20

    • 9.

      Entrer

      15:57

    • 10.

      Enregistrer

      11:47

    • 11.

      Crédits

      11:41

    • 12.

      Quoi faire ensuite ?

      1:40

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

Généré par la communauté

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

109

apprenants

1

projets

À propos de ce cours

Ce cours est la suite de l'introduction au développement de jeux 3D dans Godot.

Cliquez sur le lien de mon site Web dans mon profil pour rejoindre notre serveur discord !

Dans ce cours, nous aborderons les éléments essentiels communs à presque tous les jeux de n'importe quel genre : pause, menus, changement de scène, persistance des données, musique, paramètres et déplacer un personnage entre les différents domaines de votre jeu.

Vous apprendrez également des compétences utiles pour travailler avec le moteur de jeu Godot, organiser et designer vos projets pour qu'ils soient plus évolutifs.  Vous apprendrez à coder avec GDscript, tout en expliquant les détails.  Nos scripts seront écrits pour être hautement personnalisables et réutilisables.  Tous les fichiers de projet seront également disponibles sur GitHub si vous devez revoir le projet tel qu'il était après avoir terminé chaque leçon.  Ces vidéos ont été enregistrées en utilisant la version 4.2.2 de Godot.

Ce cours fera partie d'une série destinée à enseigner des morceaux de développement de jeux de taille compacte qui peuvent tous être utilisés de manière interchangeable.  Faites-moi savoir quels types de jeux vous intéressent pour apprendre à créer, et j'essaierai de les inclure dans les futurs cours de cette série.

Rencontrez votre enseignant·e

Teacher Profile Image

Thomas Yanuziello

Indie Game Developer

Enseignant·e
Level: All Levels

Notes attribuées au cours

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

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

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

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

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

Transcription

1. Intro: Bienvenue dans mon cours sur les bases du développement de jeux et de Gado Ce cours est la suite de l'introduction au développement de jeux en trois dimensions et à Gado, mais il peut être suivi et appliqué à tout projet contenant un personnage que le joueur peut contrôler pour passer d'un niveau à l' autre Vous pouvez rejoindre notre serveur Discord pour travailler sur ce cours aux côtés de vos pairs Dans ce cours, nous aborderons les éléments essentiels communs à presque tous les jeux, quel que soit leur genre. Création d'une scène de titre, menus, transition fluide entre les scènes, déplacement d'un personnage entre les différents niveaux de votre jeu, musique de fond, paramètres et persistance des données entre les scènes, niveaux et les sessions de jeu Lorsque vous aurez terminé, vous aurez une bonne structure de base d' un jeu que vous pourrez développer pour en quelque chose de votre propre design, quel que soit son genre. Vous acquerrez également des compétences utiles pour travailler avec le moteur de jeu Gada, organiser et concevoir vos projets de manière à ce qu'ils soient plus évolutifs Vous apprendrez à coder avec le script GD avec tout expliqué en détail Nous appliquerons les principes de conception orientée objet dans nos scripts, à savoir l'héritage, l'encapsulation et l'abstraction, afin de les organiser, personnaliser et de les réutiliser pour un projet de toute taille Tous les fichiers du projet seront également disponibles sur GitHub, si vous devez revoir le projet tel qu' il était après avoir terminé chaque leçon Ces vidéos ont été enregistrées avec la version 4.2 0.2 de Gadot. Le projet commence avec des éléments issus des personnages et de donjons de Ka Kit packs remasterisés de personnages et de donjons de Ka Kit créés par Dans ce cours, j'ajouterai également des éléments du Basic Guy Bundle créé par Penzilla et de la musique dans le pack Barns Music créé par Eric the Tous sont disponibles en téléchargement gratuit sur H point IO. 2. Pause: Bonjour, mes amis. Avant de commencer, votre projet doit comporter une scène de jeu contenant un personnage que le joueur peut contrôler et un niveau dans lequel il peut se déplacer. Vous devez avoir au moins deux ou trois scènes de niveau différentes prêtes à être connectées lorsque le joueur franchit un seuil. Tout au long de ce cours, nous ajouterons des éléments essentiels à tout type de jeu auquel vous pouvez penser, notamment les menus, les transitions entre les scènes et les niveaux, décoloration visuelle et audio, les paramètres, les crédits et la persistance des données Vous pouvez utiliser votre propre projet pour suivre ce cours ou télécharger un projet de démarrage sur mon Github intitulé Godot Essentials course Main branch Votre projet peut être en deux ou trois D et presque tous les genres de jeu impliquant déplacement d'un personnage entre différentes scènes. Commençons par autoriser le joueur à mettre le jeu en pause. En ouvrant les paramètres du projet et en passant à l'onglet Carte d'entrée, nous pouvons ajouter une nouvelle action de pause et cliquer sur le bouton Ajouter. faisant défiler la page vers le bas, en trouvant notre nouvelle action de pause, nous pouvons ajouter des événements qui déclencheront cette action de pause en cliquant sur le bouton Plus J'utiliserai la touche Escape et le bouton de démarrage de ma manette. Nous avons utilisé le nœud joueur pour gérer entrées de notre jeu par le biais du script ci-joint et pour transmettre les informations appropriées pour déplacer le personnage ou le bras à ressort et la caméra Comme nous l'avons fait avec les boutons de course et de saut, nous pouvons vérifier si le bouton pause a été enfoncé. Mais nous ne voulons pas mettre le personnage ou la caméra en pause. Nous voulons suspendre toute la scène. Nous pouvons récupérer une référence au nœud racine des scènes en exportant une autre variable. Appelons cela Underscore GM, abréviation de Game Manager Mais la valeur de cette variable ne devrait jamais vraiment avoir besoin d'être modifiée. Il doit toujours être le nœud racine de la scène de jeu. Plutôt que lors de l'exportation, nous pourrions utiliser at on ready pour définir la valeur de notre variable GM afin d'obtenir le parent, puisque le nœud joueur est un enfant du nœud de jeu. Mais il se peut que nous ne voulions pas nous fier à cette structure exacte pour que notre script fonctionne correctement. Nous pouvons, par exemple, vouloir que le nœud joueur soit un enfant du nœud personnage pour d'autres raisons. Donc, pour que cette référence pointe toujours directement vers le nœud racine de Scenes, nous pouvons utiliser l'annotation du signe dollar. En commençant le chemin du nœud par une barre oblique, nous allons commencer par la racine des arbres de scène Mais il est important de noter que ce n'est pas encore le nœud de la scène de jeu. Nous devons également ajouter le nom du nœud racine à ce chemin de nœud. Si nous exécutons notre scène actuelle, puis que nous passons à la vue à distance dans le panneau de scène, nous pouvons voir que le nœud racine des arbres de scène est nommé racine, et qu'actuellement le seul nœud enfant racine est le nœud de jeu. Maintenant que notre nœud joueur fait directement référence au nœud racine des scènes, appelons une fonction que nous n'avons pas encore écrite, Toggle pause Joindre un nouveau script à notre nœud de jeu. Ce script sera chargé de gérer la scène dans son ensemble. Nous l'appellerons Game Manager. Tout comme un manager sur son lieu de travail, cette tâche de script consistera à ouvrir la scène dès son lancement. Assurez-vous que tous les employés ou les nœuds enfants disposent de tout ce dont ils ont besoin pour effectuer leur travail individuel, puis fermez la scène une fois l'opération terminée. Comme notre jeu simple ne comporte qu'un seul mode de jeu, nous n'avons besoin que d'un seul gestionnaire de jeu. Mais un jeu plus complexe avec plusieurs scènes de jeu peut avoir un gestionnaire d'exploration, gestionnaire de combat, un gestionnaire de puzzles , etc., pour différentes scènes de jeu. Dans notre nouveau script de gestionnaire de jeu, nous pouvons ajouter la fonction de bascule et de pause que nous avons appelée depuis le script du joueur Mettre le jeu en pause est en fait assez simple. Nous allons commencer par obtenir une référence à l'ensemble de l'arbre des scènes avec une fonction intégrée, get tree. Le type de retour de cette méthode est un arbre de scènes, qui contient une variable nommée paused à laquelle nous pouvons accéder avec p. Le type de la variable suspendue est un booléen, dont la valeur par défaut est false Régler la valeur sur true fait des pauses pour gagner. Nous pouvons changer la valeur entre vrai et faux chaque fois que cette fonction de bascule et de pause est appelée à l'aide de l'opérateur logique zéro, représenté par un point d' exclamation Régler la valeur de pause sur zéro sur « faux » la première fois, puis sur « non vrai » la seconde fois et Si nous le testons, nous pouvons suspendre le jeu, mais nous ne pouvons pas encore le remettre en pause. Cela est dû au fait que le nœud joueur, qui essaie de recevoir les entrées pour mettre le jeu en pause, est également suspendu et ne peut ni recevoir ni traiter se peut que nous ne souhaitions pas suspendre certains nœuds pendant que le jeu est en pause. En sélectionnant le nœud du joueur dans l'arborescence de la scène, regardez dans l'inspecteur situé sous nœud et développez la section des processus. La propriété mode est actuellement définie pour hériter, ce qui signifie qu'elle héritera du même mode de processus que son parent, le nœud de jeu Puisque le nœud de jeu est suspendu, le nœud joueur sera également suspendu. Nous pouvons changer cette valeur en always, afin que le nœud joueur fonctionne toujours même lorsque le jeu est en pause. Notez que nous pouvons également faire en sorte que certains nœuds ne soient que lorsque le jeu est pause ou désactiver complètement le traitement à partir de certains nœuds Désormais, lorsque nous lançons la scène, nous pouvons suspendre ou remettre le jeu en pause, car le nœud joueur fonctionne toujours malgré Mais cela pose un nouveau problème. Si nous interrompons le jeu et appuyons sur le bouton de saut, puis que nous relâchons la pause, le personnage saute Si nous ne voulons pas ce comportement, nous devons revenir au script du joueur. Déplaçons d'abord la case correspondant au bouton de pause en haut de la fonction de saisie. Ensuite, si l'arbre est suspendu, ignorez toute autre entrée en revenant et faites de même dans la fonction de traitement pour ignorer également le mouvement et les commandes de la caméra Désormais, lorsque le jeu est en pause, la seule chose que le joueur peut donner est de le remettre en pause Tout le reste sera ignoré. Enfin, j'aimerais afficher un menu à l'écran avec quelques boutons pendant que le jeu est en pause. Mais avant de faire quoi que ce soit concernant l'interface utilisateur, nous devons configurer la taille de la fenêtre du jeu. Ouvrez les paramètres du projet et passez à l'onglet général. En sélectionnant la fenêtre, nous pouvons définir la propriété de taille pour définir la taille de la fenêtre de notre jeu. La taille de fenêtre optimale dépend de votre plateforme cible. Je vais utiliser 12 pixels de 80 x 720 pixels. Jusqu'à présent, tout ce qui se trouve dans notre arbre de scènes observé par la caméra pour produire une image en deux dimensions, est observé par la caméra pour produire une image en deux dimensions, ce que nous voyons dans notre fenêtre lorsque nous jouons au jeu. Cette image en deux D rendue par notre caméra est la couche zéro de l'écran en deux D. Nous pouvons ajouter des couches supplémentaires à l'écran de nos jeux fois que la caméra a terminé son rendu en utilisant un nouveau type de nœud, un nœud de couche Canvas. La couche par défaut d'un nœud de couche Canvas est une, elle sera donc dessinée au-dessus de la couche zéro. Si nous le voulons, nous pouvons ajouter autant de couches que vous le souhaitez pour dessiner devant ou derrière notre jeu. Renommons le nœud de la couche Canvas en UY, abréviation de interface utilisateur le bouton droit sur le nœud de l'interface utilisateur et sélectionnez Ajouter un nœud enfant. Ajoutons un nœud d'étiquette au Canvass. Cela fait passer notre point de vue à deux D. Jusqu'à présent, nous n'avons travaillé qu'avec des nœuds par défaut tels que le nœud joueur et trois nœuds D pour tout le reste. Notre Canvas utilisera une famille différente de nœuds appelés nœuds de contrôle , dotés d'icônes vertes. Je vais renommer ce nœud en titre et définir sa propriété pour qu'elle soit « pause » Ensuite, répétons le processus pour ajouter un bouton. Et nommez le bouton « continuer ». Modifiez ensuite le texte du bouton pour qu'il en soit de même. Zoomez et effectuez un panoramique pour voir le rectangle bleu à droite de l'axe vert y et en dessous de l'axe X rouge. Il s'agit de la fenêtre d'affichage de la fenêtre de jeu. Nos nœuds ont été ajoutés à l'origine de la scène Ils seront donc affichés dans le coin supérieur gauche de l' écran si nous jouons au jeu, mais ils se chevauchent Organisons ces nœuds à l'aide d'un autre nœud de contrôle, un conteneur à boîte verticale. Un conteneur vertical ne dessine rien, mais nous organiserons ses enfants de manière à les aligner verticalement, ce qui accélérera l'organisation rapport au positionnement manuel de chaque nœud. En sélectionnant à la fois les nœuds de titre et les nœuds continus, nous pouvons cliquer et faire glisser pour les relier au nœud de la boîte verticale et voir à ce qu'ils soient automatiquement réorganisés Dupliquons également le bouton continu pour créer un autre bouton et nommons celui-ci exit. Modifiez ensuite la propriété du texte en conséquence. Le cadre vertical s'est automatiquement ajusté pour accueillir le bouton supplémentaire. Renommons le cadre vertical en menu pause. Une fois le nœud du menu de pause sélectionné, développez la section de mise en page. La valeur prédéfinie des ancres est actuellement définie en haut à gauche. Nous pouvons facilement ancrer le menu de pause à n'importe quel coin ou au centre de l'écran. Les ancres sont représentées dans l'aperçu par ces quatre épingles vertes, lesquelles nous pouvons cliquer et faire glisser individuellement sur l'écran Les ancres déterminent la position ou la taille des notes, par rapport à la taille de fenêtre définie dans les paramètres du projet, exprimée en pourcentage Nous pouvons également utiliser des ancres personnalisées si nous voulons, par exemple, utiliser uniquement les 10 % supérieurs de l'écran pour une barre de menu, ou peut-être utiliser le tiers central de l'écran pour afficher un tableau Je vais ancrer mon menu de pause au centre de l'écran et configurer l'alignement horizontal des titres pour qu'il soit centré sur les boutons. Une fois le menu de pause créé, définissons sa propriété visible sur false par défaut en cliquant sur l'icône située à côté dans l'arbre de scène. Ensuite, dans le script du gestionnaire de jeu, nous pouvons utiliser une référence prête à obtenir au menu Pause. En utilisant le signe $1 pour spécifier le chemin d'un nœud, en utilisant des guillemets parce que le nom contient un espace, en passant par le nœud de l'interface utilisateur pour accéder au nœud du menu de pause. Lorsque le jeu est en pause ou non, nous pouvons définir la propriété visible du menu de pause pour qu'elle corresponde à la valeur de pause de l' arbre Nous avons maintenant un menu de pause avec des boutons, mais comment savoir quand les boutons sont enfoncés et que faisons-nous lorsqu' ils sont appuyés ? Si nous sélectionnons le bouton de sortie dans l'arborescence de la scène, nous pouvons passer de l'onglet inspecteur à l'onglet nœud, qui affichera les signaux par défaut. Si des groupes sont affichés, vous pouvez passer aux signaux en cliquant ici. Ici, nous pouvons voir une variété de signaux que ce nœud émettra dans différentes conditions. Le nœud du bouton émet un signal lorsqu'il est enfoncé. Il suffit de connecter ce signal à une fonction, soit en double-cliquant dessus, soit en cliquant avec le bouton droit de la souris et en sélectionnant connecter. Dans la fenêtre, nous pouvons sélectionner n'importe quel nœud de notre arbre de scènes, pour lequel nous écouterons le signal à émettre. Si nous sélectionnons le nœud du gestionnaire de jeu, le champ de la méthode du récepteur indiquera que vous appuyez sur Exit, c'est le nom de la fonction qui sera créée pour nous lorsque nous cliquerons sur Connecter. Notre affichage passe automatiquement script et affiche le script du gestionnaire de jeu, qui contient désormais la fonction lorsque vous appuyez sur la touche de sortie. Cette fonction sera désormais appelée automatiquement lorsque le joueur appuiera sur le bouton de sortie . Une icône de connexion verte est affichée à côté la définition de la fonction pour nous indiquer que cette fonction est appelée par un signal, et le bouton de sortie l'arbre de scène comporte une icône de signal pour nous indiquer que ce nœud peut émettre un signal connecté à un récepteur. Pour l'instant, imprimons simplement sur la sortie un message disant «   retournez à la scène du titre ». À la fois pour savoir que cela fonctionne et pour nous rappeler d'implémenter cette fonctionnalité ultérieurement. En sélectionnant le bouton Continuer, nous pouvons également connecter le signal pressé au nœud du gestionnaire de jeu. Mais cette fois, cliquez sur le bouton de sélection et choisissez la fonction de bascule et de pause que nous avons écrite plus tôt Enfin, nous avons besoin de ce nœud pour fonctionner pendant que le jeu est en pause. Passons donc à son mode de traitement en mode pause. Essayons-le. Nous pouvons mettre le jeu en pause, cliquer sur le bouton de sortie pour afficher notre message et appuyer sur le bouton Continuer pour mettre le jeu en pause. Une fois que les boutons du menu sont focalisés, nous pouvons également utiliser les touches fléchées pour naviguer entre les boutons et la barre d' espace pour les appuyer. Faisons en sorte que cela fonctionne également avec notre manette de jeu en quelques étapes simples. Ouvrez les paramètres du projet, l'onglet Carte d'entrée, dans l'onglet Carte d'entrée, cliquez sur le bouton Afficher les actions intégrées pour voir les actions utilisées Le Controllers DP est déjà répertorié sous l'interface utilisateur gauche, droite, haut et bas pour les menus de navigation Mais nous devons ajouter une entrée de contrôleur à l'action d'acceptation de l'interface utilisateur pour pouvoir appuyer sur les boutons. Je vais utiliser le bouton d'action inférieur, qui est A sur ma manette. Maintenant, nous avons juste besoin du menu pour nous concentrer lorsqu'il est ouvert. En ajoutant un script au nœud du menu de pause, nous le nommerons simplement menu. Nous allons exporter une variable pour contenir l'élément de menu, qui devrait attirer l' attention par défaut lorsque le menu est ouvert en mode contrôle de type. Je vais attribuer le bouton de poursuite comme élément de focus par défaut dans l'inspecteur en cliquant dessus et en le faisant glisser dans le champ Pour créer une fonction publique, appelons-la ouverte. Nous pouvons définir la propriété visible sur true et également indiquer à l'élément de focus par défaut de capter le focus. Et une autre fonction, close, remettra à la propriété visible les chutes. De retour dans le script du gestionnaire de jeu. Au lieu de définir directement la propriété visible de la pause many, nous pouvons appeler open ou closed en fonction de la valeur de paused, en utilisant une instruction if exécutant la scène, en utilisant uniquement une manette, nous pouvons mettre le jeu en pause, naviguer dans le menu et appuyer sur les boutons. Nous avons maintenant un menu de pause qui est présenté au joueur lorsqu'il appuie sur la pause. Dans la leçon suivante, nous allons créer une scène de titre pour notre jeu. Je te verrai dans la prochaine leçon. 3. Titre: Bonjour, mes amis. Dans la leçon précédente, nous avons créé un menu de pause pour notre scène de jeu. Dans cette leçon, nous allons créer une scène de titre connectée à la scène de jeu. Pour cela, nous aurons besoin d' une image d'arrière-plan et de quelques ressources d'interface utilisateur de base. J'utiliserai le bundle Guy de base créé par Penzila sur it shot IO Commençons par créer une nouvelle scène. Vous pouvez sélectionner une scène dans la barre de menu, puis une nouvelle scène. Utilisez le raccourci Ctrl N ou Commande N ou cliquez avec le bouton droit de la souris sur l'onglet Système de fichiers et sélectionnez Créer une nouvelle scène. clic droit sur un dossier spécifique créera la scène dans ce dossier et nous permettra de lui donner un nom immédiatement. Peu importe que cette scène soit en deux ou trois D, puisque nous ne nous intéressons à UY que pour cette leçon. Faisons du nœud racine de cette scène un nœud de contrôle en sélectionnant Interface utilisateur. Et le nœud racine est automatiquement renommé pour correspondre au nom du titre de la scène. Si nous créons la scène via le menu, il nous sera d'abord demandé de sélectionner le type de nœud racine. Nommez-le ensuite et triez-le dans un dossier lors de son premier enregistrement. En sélectionnant le nœud racine, nous pouvons voir qu'il s'agit d'un nœud de contrôle dont les préréglages d'ancrage sont réglés à fond, couvrant toute la fenêtre de jeu, mais ne dessinant rien Comme dans la leçon précédente, ajoutons un nœud d'étiquette et quelques boutons. Nommons le titre de la note d'étiquette et définissons la propriété du texte sur le titre de notre jeu. De même, nommez nos boutons et modifiez leurs propriétés de texte dans un nouveau jeu. Continuez. Paramètres, crédits et boutons de sortie ou tout autre bouton que vous souhaiteriez voir apparaître sur l'écran titre de votre jeu. Organisons également ces boutons l'aide d'un conteneur vertical comme nous l'avons fait avec le menu Pause et renommons-le en boutons de menu Nous pouvons organiser rapidement et facilement ces éléments sur notre écran à l'aide d'ancres. Par exemple, j'aimerais que le titre soit centré horizontalement sur l'écran et un tiers vers le bas à partir du haut de l'écran. Une fois la note d'étiquette de titre sélectionnée, en élargissant la section de mise en page, je vais modifier les préréglages d'ancrage en paramètres personnalisés ancres sont définies par des nombres de 0 à 1, représentant le pourcentage de la largeur ou de la hauteur des parents positionner le titre au milieu de l'écran Vous pouvez positionner le titre au milieu de l'écran horizontalement en réglant l' ancre gauche sur 0,5, et l'ancre droite sera automatiquement mise à jour pour correspondre, car l'ancre droite ne peut pas être inférieure à la gauche. De même, positionner le titre à un tiers du haut de l'écran signifierait régler l'ancre supérieure sur 0,333 Ce n'est pas encore tout à fait la position que je souhaite car les ancres se trouvent dans le coin supérieur gauche de l'étiquette Le texte est simplement joué vers la droite et en dessous du point d'ancrage. En élargissant la sous-section direction de croissance, nous pouvons définir les directions de croissance horizontale et verticale pour les deux. En fonction de la sous-section sur le décalage des ancres, nous pouvons toutes les remettre à zéro, et les ancres sont désormais centrées dans l'étiquette Je vais également positionner le conteneur de boutons de la même manière. Mais avec son ancre verticale aux deux tiers plus bas, il apparaît donc en dessous du titre du jeu. Vous pouvez également positionner n'importe lequel de vos nœuds de contrôle manuellement, mais n'oubliez pas que l'utilisation d' ancres rendra vos mises en page plus flexibles et s'adaptera à différentes résolutions d'écran Ajoutons un manuscrit au nœud des mini-boutons et attribuons un élément de focus par défaut dans l'inspecteur. Tout comme notre scène de jeu possède un script de gestionnaire de jeu attaché à son nœud racine, nous avons également besoin d'un script de gestionnaire de titres attaché au nœud racine des scènes de titre. Et ici, nous pouvons récupérer une référence au script des boutons de menu pendant la phase de préparation en utilisant add on ready. Dites ensuite aux boutons du menu de s' ouvrir dans la fonction « Prêt ». Le menu était déjà visible, mais en lui demandant de s' ouvrir, nous indiquerons également l' élément de focus par défaut de capter le focus. En sélectionnant chacun des nœuds de boutons, nous pouvons ajouter un appel de fonction pressé à notre script de gestionnaire de titres pour chacun d'entre eux. Pour l'instant, nous ne nous intéresserons qu' au nouveau bouton de jeu. Le reste peut simplement imprimer des chaînes pour nous indiquer d'implémenter ces fonctionnalités ultérieurement. Le but du nouveau bouton de jeu sera de faire passer notre jeu de la scène du titre à la scène du jeu. Nous pouvons y parvenir en obtenant une référence à l'arbre des scènes, puis en accédant à une méthode appelée change scene to file. Cette méthode prend un argument de chaîne, qui est un chemin de fichier vers la scène que nous voulons charger. Les suggestions contiennent une liste de toutes les scènes de notre projet, afin que nous puissions sélectionner la scène de jeu à partir d'ici. Sinon, en regardant dans l'onglet du système de fichiers, nous pouvons trouver la scène du jeu et cliquer avec le bouton droit de la souris, puis sélectionner Copier le chemin et le coller sous forme de texte. Mais n'oubliez pas que les chaînes doivent être placées entre guillemets. Jusqu'à présent, nous avons utilisé le bouton Exécuter la scène actuelle pour tester notre jeu. Mais vous avez probablement déjà appuyé accidentellement le bouton Exécuter le projet au moins une fois, ce qui vous permettra de configurer la scène principale de notre projet. C'est la première scène qui sera chargée lorsque nous démarrerons le jeu, qui devrait être cette scène, la scène titre. Si vous ne l'avez pas encore défini, vous pouvez cliquer sur le bouton Sélectionner le moment pour définir la scène du titre comme scène principale du jeu. Le nouveau bouton de jeu permet de se concentrer lorsque le jeu commence. En cliquant sur chacun des boutons , nos déclarations s'affichent, et en cliquant sur le nouveau bouton de jeu vous passez immédiatement à la scène de jeu. Nous pouvons également modifier la scène principale du projet à tout moment à partir des paramètres du projet dans l'onglet général sous Exécuter la scène minimale de l'application. Notre scène de titre est désormais fonctionnelle, mais elle n'est pas très belle. Tout d'abord, nous pouvons ajouter un fond d'écran à l'aide d'un nœud de texte. Appelons-le arrière-plan. Dans la section de mise en page, si vous réglez les ancrages sur Full Wreck, vous garantissez que l'arrière-plan couvre toute la fenêtre Nous pouvons modifier la propriété de texture pour afficher l'image en deux D que nous voulons. À l'aide des propriétés de l'inspecteur, nous pouvons modifier le mode d'affichage de l'image , en conservant sa taille d'origine ou en l'adaptant aux points d'ancrage en largeur ou en hauteur. Nous pouvons également spécifier que l'image doit conserver son rapport hauteur/largeur pour éviter soit étirée pour s'adapter à la fenêtre. Enfin, nous allons le classer en haut des scènes (enfants), afin qu'il soit dessiné en premier, après tout le reste. Examinons ensuite les propriétés des nœuds de l'étiquette de titre. La plupart des paramètres de l'étiquette concernent justification et l'emballage, ce qui n'est pas vraiment pertinent pour notre titre. Les paramètres que nous voulons modifier se trouvent sous les propriétés héritées du contrôle dans la section de remplacement du thème Ici, nous pouvons ajuster la couleur de police. Ajoutez une ombre ou un contour qui peut également être ajusté dans la sous-section des constantes. Nous pouvons modifier la taille de la police, ainsi que la police elle-même. J'ai téléchargé quelques polices gratuites sur dafont.com. Assurez-vous que toutes les polices que vous utilisez dans vos jeux sont gratuites. Da font affiche la licence de ses polices au-dessus du bouton de téléchargement. Cela fonctionne bien pour le titre de notre jeu, qui est censé se démarquer, mais modifier les propriétés individuelles de cette manière pour tous les éléments de notre projet serait fastidieux Pour modifier nos boutons de menu, nous devrions plutôt créer un thème commun à utiliser tout au long du projet de jeu. Sélection du nœud conteneur de boutons. Cette fois, élargissez la section thématique. Le champ du thème est vide. En cliquant dessus, nous pouvons sélectionner nouveau thème pour créer une nouvelle ressource thématique pour notre projet. En cliquant sur la ressource thématique, un nouvel onglet sera ajouté au panneau inférieur de notre fenêtre, un éditeur de thème. L'éditeur de thème contient un aperçu d'une variété de nœuds de contrôle différents, d' un panneau jouable, de différents types de boutons, de boutons, d' une liste déroulante, d'un sélecteur de couleurs, de champs de texte, de barres de défilement, de séparateurs, d' onglets Le tout en utilisant le thème par défaut fourni par Gadot. En repensant à notre ressource thématique dans le panneau de l'inspecteur, nous pouvons modifier la police et la taille de police par défaut pour tous les éléments de notre thème. Changeons la police et ajustons la taille. Nous pouvons voir les effets à la fois dans l'aperçu et dans les boutons de notre menu titre. Cela n'affecte pas le titre du jeu puisque le thème n'a pas été appliqué à ce nœud. Il n'a été appliqué qu' au conteneur de boutons de menu. Même si le thème était appliqué au nœud de titre, les remplacements de thème que nous venons d'appliquer seraient utilisés à la place Les boutons héritent de leur thème de leur parent dans l'arborescence des scènes Dans l'éditeur de thème, nous pouvons ajouter de nouveaux paramètres pour n'importe quel nœud de contrôle en cliquant sur le bouton Plus. Comme notre menu ne contient que des nœuds de boutons, ajoutons des paramètres pour les nœuds de boutons. Il existe de nombreux paramètres permettant de régler la police et les couleurs des icônes selon l' état du bouton. Par défaut, désactivé, focalisé, surligné, surligné, pressé et enfoncé, ainsi qu'une couleur de contour Avant de pouvoir ajuster l'un de ces paramètres, nous devons les ajouter au thème en cliquant sur le bouton plus à côté d'eux. En ajustant l'un de ces paramètres, nous pouvons voir leurs effets dans l'aperçu, notamment les nous pouvons voir leurs effets dans l'aperçu, états du survol, de la mise au point et de la pression en cliquant sur les boutons Des paramètres supplémentaires et d'autres onglets permettent de régler les constantes, les polices et la taille de police. La police et la taille de police ont déjà été définies par la ressource thématique elle-même. Nous n'avons pas besoin de les ajuster ici. Nous pouvons également modifier l'apparence du bouton lui-même à l' aide de boîtes de style. Chacun des états des boutons peut être attribué à une boîte de style différente. Commençons par le normal. En cliquant sur le bouton plus, nous pouvons utiliser une boîte de style plate pour simplement créer un rectangle plat coloré pour le bouton, ou nous pouvons utiliser une boîte de style de texture pour utiliser une image bidimensionnelle importée. Cliquez sur la ressource de la boîte de style pour l'ouvrir dans le panneau de l'inspecteur où nous pouvons remplir le champ de texture avec un fichier image en deux D. Vous souhaiterez peut-être ajouter un peu de rembourrage sur les bords du bouton afin que le texte du bouton ne chevauche pas les bords de l'image En élargissant la section des marges de contenu, nous pouvons ajuster la taille des marges pour mieux s'adapter au texte à l'intérieur de l'image. En ajoutant une boîte de style enfoncée, nous pouvons changer la texture utilisée pour dessiner le bouton. vous copiez les mêmes paramètres, vous n'utilisez pas la zone de style normale, mais augmentez le rembourrage supérieur pour que le texte se déplace vers le bas lorsque vous appuyez dessus Ajout de zones de style pour les états de survol désactivés et de focalisation Il se peut que les textures ne soient pas différentes pour les différents états de vos boutons. Mais nous pouvons toujours créer de nouvelles boîtes de style pour ces états. Utilisez la même texture et les mêmes paramètres normaux, mais ajoutez une modulation de couleur pour créer une apparence différente pour le bouton dans cet état. Nous pouvons multiplier les couleurs des textures par quelque chose comme jaune pour leur donner un aspect sensiblement différent lorsqu'elles sont recouvertes Ou nous pouvons simplement utiliser une autre image d' une couleur différente pour mettre l'accent. Lorsque cette option est désactivée, nous pouvons multiplier les couleurs Alpha pour ajouter de la transparence. Nous pouvons facilement tester toutes ces différentes boîtes de style depuis l'aperçu dans l'éditeur de thème. Maintenant que le menu Remain est plus beau, modifions également le menu Pause la scène de jeu en conséquence. Au lieu d'ajouter un nouveau thème au menu Pause et de refaire toutes les modifications, nous pouvons revenir à la scène titre, rechercher la ressource et cliquer sur le Sélectionnez Enregistrer et enregistrez le thème dans le dossier de ressources de nos projets. Maintenant, dans la scène de jeu, nous pouvons attribuer ce thème au menu de pause, et les boutons seront automatiquement mis à jour pour correspondre au nouveau thème. Ouverture du script du gestionnaire de jeu. Lorsque le joueur appuie sur le bouton de sortie, nous pouvons également passer à la scène titre. En lançant notre jeu, nous commençons par la scène du titre. Le nouveau bouton de jeu permet de passer à la scène de jeu. mettez le jeu en pause et que vous sélectionnez Quitter, vous revenez à la scène titre Nous avons maintenant une scène titre et pouvons passer d'une scène à l'autre . Dans la leçon suivante, nous allons faciliter la transition entre les scènes en passant au noir Je te verrai dans la prochaine leçon. 4. Transition: Bonjour, mes amis. Dans la leçon précédente, nous avons créé une scène de titre et nous l'avons connectée à la scène de jeu. Dans cette leçon, nous simplifierons la transition grâce à un fondu visuel. La plupart des jeux commencent par un écran noir. Ajoutons un nouveau nœud à notre scène de titre, un nœud détruit par des couleurs Appelons-le Fade. Dans l'inspecteur, nous pouvons définir la propriété de couleur sur le noir. Réglez ensuite les préceptes de l'ancre sur une épave complète pour couvrir toute la fenêtre Lorsque le jeu démarre, nous pouvons légèrement estomper cet objet pour le rendre totalement transparent, révélant ainsi la scène du titre qui se cache derrière celui-ci. Même lorsqu'un objet de notre scène est transparent, événements liés à la souris ne sont déclenchés qu'au premier contact, ce qui signifie que le fait de déplacer la souris ou de cliquer sur nos boutons est bloqué par le fondu. Dans les propriétés héritées du contrôle, dans la section souris, nous pouvons modifier les paramètres de filtrage de notre fondu pour qu'il soit ignoré, ce qui permettra aux événements de la souris passer par le fondu aux objets situés derrière celui-ci. Maintenant, les boutons fonctionnent à nouveau avec la souris. Pendant que nous travaillons sur notre scène dans le montage, il serait préférable de pouvoir voir tout le reste. J'aimerais que le fondu soit visible par défaut. Avant de joindre un script, commençons à organiser nos scripts dans des dossiers plus spécifiques en créant un sous-dossier nommé UI Nous pouvons déplacer le manuscrit dans le sous-dossier puisqu'il est utilisé pour contrôler les éléments de l'interface utilisateur Mais lorsque vous déplacez des ressources de cette manière, assurez-vous que les scènes qui les utilisent sont ouvertes en premier. Dans le cas contraire, les fichiers de scène risquent d'en perdre la trace. ce cas, replacez simplement la ressource là où elle était à l'origine et assurez-vous que les scènes utilisant la ressource sont ouvertes avant de la déplacer. Nous pouvons maintenant joindre un script au nœud Fad et utiliser le navigateur pour le trier dans le dossier des scripts de l'interface utilisateur Contrairement à notre manuscrit, qui pouvait être pertinent pour n'importe quel nœud de contrôle, puisqu'il n'affectait que la propriété visible , héritée du contrôle. Ce script FAD modifiera propriété de couleur du nœud endommagé par la couleur, de sorte qu'il ne sera utilisable que par nœuds de couleur ou ses Commençons par la fonction «   prêt ». Définir la propriété visible de fa true lorsque la scène démarre pour la première fois, rendant la fenêtre complètement noire. Ensuite, nous pouvons déclarer une fonction publique appelée à être effacée. Contrairement à la plupart des fonctions de la plupart des scripts, cela devra se produire progressivement au fil du temps, sur plusieurs images. Nous pouvons y parvenir avec un nouveau type de variable, un tween. Il peut s'agir d'une variable privée, applicable uniquement à ce script localement, et je vais simplement la nommer tween pour plus de simplicité Le nom de cette classe vient mots anglais entre les deux, car elle est le plus souvent utilisée pour trouver des points entre un point de départ et un point d'arrivée. Nous pouvons créer un tween à tout moment en appelant une méthode intégrée, create tween Cette méthode renvoie un objet tween, que nous pouvons affecter à notre variable pour le stocker Un tween est une classe complexe avec une variété de méthodes, mais celle que nous voulons utiliser s' appelle la propriété tween, qui nécessite plusieurs arguments Le premier argument est le nœud que cette interpolation affectera, qui est le même nœud auquel ce script est attaché Nous pouvons obtenir une référence à ce nœud en utilisant le mot clé self. La suivante est la propriété du nœud que nous voulons modifier, un chemin de propriété sous forme de chaîne. Nous allons modifier la propriété de couleur de ce nœud. Si vous n'êtes pas sûr du chemin de la propriété, nous pouvons consulter l'inspecteur. survol d'une propriété nous indiquera le chemin de la propriété pour y accéder, ou nous pouvons cliquer avec le bouton droit de la souris pour copier le chemin de la propriété et le coller sous forme de texte L'argument suivant est la valeur finale à laquelle nous voulons que cette propriété soit définie une fois l'interpolation terminée Comme la propriété est une couleur, nous lui attribuerons une couleur personnalisée que nous définirons. Disons que c'est clair. Et la dernière propriété est la durée de l'interpolation, mesurée en secondes, exprimée sous forme de valeur flottante Réglons-le sur 1 seconde pour le moment. La valeur de clear sera quelque chose que nous pourrons définir mais que nous ne modifierons jamais. Au lieu de déclarer une variable, nous pouvons définir une constante en utilisant le mot-clé constant. Nommez-le sans couleur typographique. Il est classique de nommer les constantes en majuscules. Attribuez ensuite la valeur de cette constante sous forme de couleur. L'écriture du nom de classe suivi de crochets accéder à une méthode de constructeur, ce qui nous permet de construire la couleur en spécifiant toutes les propriétés requises Une couleur est définie par quatre flottants : rouge, vert, bleu et Alpha pour la transparence A sous forme de chiffres de 0 à 1. Notre couleur claire sera simplement zéro, rouge, zéro, vert, zéro, bleu et zéro Alpha, ce qui la rendra noire, mais aussi complètement transparente. appel de notre méthode à deux effacements fera passer la propriété de couleur de sa valeur actuelle, qui est le noir, à la valeur claire pendant une seconde. Nous pouvons également écrire une autre fonction en noir pour faire le contraire. Cependant, il n'est pas nécessaire de définir une constante pour noir puisque la classe de couleur en possède déjà une. Nous pouvons y accéder via le nom de classe en utilisant un point, et nous pouvons voir qu'il existe un grand nombre de couleurs prédéfinies. Celui que nous voulons en ce moment est noir. Le noir est défini comme zéro, rouge, zéro, vert, zéro, bleu, sauf un Alpha. Passons au script du gestionnaire de titres pendant un moment et saisissons une référence au FAD Noe pendant la phase de préparation en utilisant at ready Lorsque la scène commence, nous pouvons dire à Fate de s'effacer. Ensuite, avant de passer à la scène de jeu, nous pouvons lui dire de passer au noir. Mais le processus de passage au noir prend du temps, et cette fonction s'exécute en une seule image pour passer immédiatement à la scène de jeu Nous ne verrons donc pas cela se produire Nous pouvons indiquer à cette fonction de faire une pause et d'attendre un signal avant de continuer, en utilisant un nouveau mot-clé, un poids. Un poids nécessite un signal d'attente, que nous pouvons faire revenir de la fonction Fade to Black. De retour dans le script FAD, nous pouvons spécifier un type de retour pour nos fonctions avant les deux points en ajoutant un tiret, une flèche, puis un Dans ce cas, nous voulons renvoyer un signal. La classe d'interpolation contient un signal qui est émis automatiquement lorsque l'interpolation est terminée Nous pouvons donc le renvoyer Le gestionnaire de titres attendra maintenant le nœud FAD passe au noir avant de changer de scène Butt copie également ce format dans la fonction two clear. Même s'il renvoie un signal, le gestionnaire de titres n' a pas besoin d' accepter ce retour ni d'en faire quoi que ce soit. Dans ce cas, l'interpolation sera lancée et le reste de la fonction sera exécuté immédiatement Nous pouvons copier ce nœud FAD dans la scène de jeu. Modifiez ensuite le script du gestionnaire de jeu pour obtenir une référence au nœud FAD pendant la phase de préparation Passez au clair lorsque la scène démarre pour la première fois, et attendez que le fondu passe au noir avant de passer à la scène titre. Mais cette fonction, lorsque vous appuyez sur la touche de sortie, est appelée pendant que le jeu est en pause. Par conséquent, le nœud F est également suspendu et ne changera pas de couleur en conséquence Nous pouvons autoriser le nœud FAD à toujours traiter pour se déplacer Mais ce serait aussi une bonne idée de mettre le jeu en pause avant de changer de scène Essayons-le. Maintenant, le jeu commence à partir d'un écran noir qui passe à notre écran titre, pression sur le nouveau bouton de jeu passe au noir, passe à la scène de jeu, qui s'estompe vous faites une pause et que vous appuyez sur le bouton de sortie, vous passez au noir, puis passez à la scène titre, qui s'estompe également Cependant, il y a un scintillement entre les scènes de changement de scène. Nous pouvons modifier les paramètres du projet dans l'environnement de rendu et changer la couleur par défaut en noir. Il s'agit d'une transition beaucoup plus douce que de changer immédiatement de scène, et si notre jeu devient suffisamment volumineux pour nécessiter des temps de chargement plus longs, nous pouvons le remplacer par un écran de chargement. Cependant, il peut être difficile de commencer un préadolescent avant la fin du précédent De retour dans le script FAD, nous pouvons vérifier si le tween existe en le comparant à null Dans le script Godo, nous pouvons le faire implicitement avec just if S'il existe, vérifiez également s'il fonctionne. Dans ce cas, nous devons tuer le préadolescent avant d' en créer un nouveau Cela empêchera toute possibilité plusieurs préadolescents existent et interfèrent les uns avec les autres, puisque le plus récent prendra simplement le Nos deux fonctions claires et deux fonctions noires sont très similaires, seule la valeur de couleur étant différente entre elles. Ce serait une bonne pratique de déclarer plutôt une fonction privée ici. Appelons-le bicolore et acceptons une couleur comme paramètre. Nous ne pouvons alors faire tout cela qu'une seule fois. En passant la couleur à la méthode des propriétés jumelles, et en utilisant les deux fonctions claires et les deux fonctions noires on appelle plutôt cette fonction bicolore. Faire passer le signal de retour à travers la chaîne ou les gestionnaires peuvent l'attendre. De cette façon, toute modification de ce comportement ne nécessitera de modifier qu'un seul bloc de code. Vous souhaiterez peut-être que le script soit plus adaptable. Exportons une variable pendant la durée de l'interpolation et attribuons-lui une valeur par défaut de 1 seconde Remplacez ensuite l' argument de 1 seconde par notre variable, et maintenant le timing du peut être facilement ajusté dans l'inspecteur. Voyons à quoi ressemble le FAD avec une durée de 2 secondes. Nous pouvons rendre cela encore plus flexible en autorisant les deux fonctions claires et les deux fonctions noires à accepter un paramètre facultatif pour remplacer la durée spécifiée Appelons le paramètre duration sans trait de soulignement, pour le différencier de la variable qui possède un trait de soulignement Et attribuez-lui une valeur par défaut de notre durée de soulignement. Nous devons ensuite transmettre cette valeur à la fonction bicolore. Et ajoutez-le à la liste des paramètres. Utilisez ensuite le paramètre dans la méthode de propriété tween au lieu de notre variable Nos scripts de gestion peuvent toujours utiliser ces fonctions sans spécifier de durée. Dans ce cas, la valeur exportée sera. Mais ils peuvent également spécifier une durée différente et l'utiliser à la place. Faisons en sorte que la durée exportée soit de 1 seconde, mais autorisons le gestionnaire de titres à la remplacer et à s'estomper sur une durée de 2 secondes à la place. Nous avons maintenant une transition visuelle plus douce entre nos deux scènes. Dans la leçon suivante, nous transmettrons des informations entre les scènes. Je te verrai dans la prochaine leçon. 5. Autoload: Bonjour, mes amis. Dans la leçon précédente, nous avons intégré et éteint nos scènes pour une transition plus fluide Dans cette leçon, nous allons ajouter à l'arborescence des scènes des nœuds supplémentaires accessibles depuis n'importe quelle scène. Si nous lançons notre jeu et passons à l'arborescence des scènes distantes. Nous pouvons voir que la racine de l' arbre de scène n'a qu'un seul enfant, qui est la scène titre. Lorsque vous passez à la scène de jeu, la scène de titre est supprimée de l'arborescence et remplacée par la scène de jeu. Si nous voulons transmettre des informations entre les scènes, nous pouvons ajouter des enfants supplémentaires au nœud racine de l'arbre des scènes, qui y resteront tant que le jeu est en cours d'exécution. C'est ce qu'on appelle des chargements automatiques, et nous pouvons les créer en écrivant des scripts. Ajoutons d'abord un dossier spécial dans le dossier des scripts pour contenir nos scripts de chargement automatique. Cliquez ensuite avec le bouton droit sur ce dossier pour créer un nouveau script. Le but du script sera d'économiser de la charge et de fournir un accès aux données. J'aimerais nommer ce fichier de script. Comme cela ne représente rien qui doit être dessiné, il peut hériter du nœud Ce script comportera deux variables contenant des ensembles d'informations distincts, les paramètres actuels du jeu et la progression actuelle du joueur dans le jeu. Vous souhaiterez peut-être avoir une troisième variable pour stocker les informations de progression associées à un compte utilisateur, mais non liées à un emplacement de sauvegarde spécifique, comme le déverrouillage de niveaux de difficulté ou de succès Ces variables seront accessibles au public pour tout autre script de notre jeu, quelle que soit la scène. Ouvrez les paramètres du projet, passez à l'onglet de chargement automatique. Cliquez sur l'icône du dossier à côté du champ de chemin pour ouvrir un navigateur, puis accédez au script du fichier. Le champ du nom du nœud sera automatiquement renseigné pour correspondre au nom du script. Cliquez sur le bouton Ajouter pour ajouter ce script à la liste des chargements automatiques. Maintenant, lorsque nous lançons le jeu, nous pouvons voir dans l'arborescence de la scène distante que le nœud racine possède un autre nœud enfant nommé file. En cliquant sur ce nœud, nous pouvons voir qu'il contient deux variables nommées paramètres et progression. En passant à la scène de jeu, la scène de titre est supprimée et remplacée par la scène de jeu, mais le nœud de fichier reste, ce qui signifie que nous pouvons l'utiliser pour transmettre des informations entre les scènes. Mais je n'ai pas spécifié de type pour les variables, car nous souhaiterons créer nos propres types pour contenir des ensembles complexes d'informations. Créons un autre sous-dossier dans le dossier des scripts et nommons-le ressources personnalisées. Cliquez ensuite avec le bouton droit de la souris pour créer un nouveau script. Appelons-le paramètres. Au lieu d'hériter d'un type de nœud, le script héritera cette fois d' Ensuite, nous pouvons en créer un autre. Appelons cela un progrès. Dans les scripts de ressources, nous pouvons ajouter n'importe quel nombre de variables de types différents, mais elles doivent être des types intégrés non des références à d'autres éléments. Par exemple, nous pouvons stocker une variable booléenne, vraie ou fausse, pour définir si les commandes de caméra sur l'axe X sont inversées et une autre pour l' Les nombres peuvent être stockés sous forme de nombres flottants, qui autorisent les décimales Vous pouvez l'utiliser pour enregistrer le réglage du volume du jeu sous la forme d'un nombre compris entre zéro, muet ou un volume complet Les nombres peuvent également être stockés sous forme d'entiers, un nombre qui ne contient pas de décimales, mais qui peut être positif ou négatif Nous pouvons l'utiliser dans le script de progression pour stocker l'argent des joueurs ou. Nous pouvons également utiliser des chaînes pour stocker des séquences de caractères, donnant par exemple un nom au joueur, à l' emplacement de sauvegarde ou au protagoniste. D'autres types intégrés tels que vecteurs ou les couleurs peuvent-ils également être utilisés ? Les collections de n'importe lequel de ces types peuvent également être stockées dans un tableau ou un dictionnaire, tel qu'un tableau de booléens indiquant si le joueur a terminé chaque niveau ou non a terminé chaque Chacun de ces types de variables possède une valeur par défaut. Les booléens sont faux, les entiers et les nombres sont nuls. Les chaînes, les tableaux et les dictionnaires sont tous vides. Lorsqu'une ressource est créée, elle appelle automatiquement une fonction intégrée qui y est nommée. Absence d'initialize. En remplaçant cette fonction, nous pouvons spécifier valeurs par défaut que nous voulons pour nos variables Peut-être en commençant notre réglage de volume à 0,5 pour un, ou en donnant au protagoniste un nom par défaut. Pour créer notre ressource, nous devons spécifier un nom de classe, ce qui se fait en haut du script. Généralement dans la même ligne que le mot clé extends. Avec le mot clé class name, nous pouvons donner à cette classe de ressources un nom qui sera utilisé par d'autres scripts pour désigner cette classe en tant que type. Nous pouvons nommer les paramètres de cette classe avec un S majuscule, et celui-ci, progresser avec un P. Par convention, les classes sont nommées en cas de Pascal avec la première lettre de chaque mot en majuscule De retour dans le script de fichier, nous pouvons maintenant spécifier les types de nos variables sous forme de paramètres et de progression. Pour l'instant, nous pouvons simplement créer ces ressources dans la fonction ready. En utilisant leur nom de classe suivi du point Neu. Cela déclenchera également la fonction d'initialisation, initialisant les variables à l'intérieur de la ressource cours de jeu, nous pouvons voir ces variables dans l'arbre des scènes distantes. Cliquez dessus, consultez et modifiez les valeurs de leurs propriétés. Modifions leurs valeurs. Passez à la scène de jeu et vérifiez que les modifications sont maintenues pendant la transition de scène. N'importe quel script de notre jeu peut facilement accéder ces ressources grâce au chargement automatique des fichiers. Ouvrons le script Spring Arm responsable de la rotation de la caméra. Son comportement actuel consiste à utiliser des axes x et y inversés. Mais maintenant, nous avons des variables dans notre ressource de paramètres qui devraient activer ou désactiver cette option Notez que la rotation de la caméra autour l'axe X est une rotation verticale, que les joueurs interpréteront comme la rotation Y, et que la rotation autour de l'axe Y est la rotation horizontale ou rotation X. Nous pouvons écrire une instruction if avant chacun de ces calculs pour vérifier paramètres de point de notre fichier afin de voir si la variable d'inversion appropriée est vraie ou fausse Multipliez ensuite la formule par moins un, si elle est fausse, pour que le comportement inversé devienne non inversé Cela signifie que presque la même formule est copiée deux fois avec seulement une petite différence entre le fait d' être multipliée par moins un ou non. Nous pouvons le faire plus efficacement en utilisant une déclaration re. Revenez d'abord au format d'origine, puis multipliez par entre crochets, un, si les paramètres du fichier s' inversent sinon, moins un. Et en répétant cette opération avec la rotation horizontale, remplacer y par x. Les instructions Turnary sont efficaces chaque fois que vous souhaitez modifier une valeur sur la base d'une simple condition d'intimidation Essayons-le. En inclinant le stick analogique droit, la rotation x de la caméra n'est plus inversée par défaut, mais la rotation y est En ouvrant l'arborescence des scènes distantes, nous pouvons accéder aux paramètres et les modifier. Et pour en revenir à la simulation, les commandes de la caméra sont désormais opposées. Nous avons maintenant créé certains de nos scripts qui héritent de différents types de notes ainsi que de ressources Mais nous pouvons également écrire des scripts qui héritent de nos propres classes personnalisées En jetant un coup d' œil au script FAD, nous avons combiné le comportement de deux couleurs claires et de deux couleurs noires en une seule fonction combinée Nous pouvons combiner des comportements similaires issus de différents scripts de la même manière, en créant une super classe et en utilisant l'héritage pour permettre à différents scripts d'accéder au même comportement. Prenons l'exemple de nos scripts de gestion, puisqu'ils utilisent tous deux désormais la transition FAD Ce serait une bonne idée de les placer dans un dossier de scripts séparé. Appelons ça des managers. Déplacer le gestionnaire de jeu et le gestionnaire de titres dans ce dossier. Nous pouvons également créer un nouveau troisième script, appelons-le Scene Manager. Dans le script Scene Manager, nous allons donner au script un nom de classe dans le cas d'une cloche de passe. Chaque fois que vous attribuez un nom de classe à un script, vous devez l'enregistrer avant que le moteur ne le reconnaisse. Ensuite, dans les scripts Game Manager et Title Manager, nous pouvons leur demander d'étendre le comportement de la classe Scene Manager. Désormais, tout ce que nous mettons dans le script Scene Manager sera utilisé à la fois par le gestionnaire de jeu et par le gestionnaire de titres. Déplaçons la variable FAD dans le script Scene Manager Ensuite, dans le jeu et les gestionnaires de titres, puisqu'ils héritent de la variable Fad de la classe Scene Manager, ils ne sont pas autorisés à déclarer une autre variable du même Nous pouvons supprimer la variable, puisqu'elle est désormais héritée de la classe Scene Manager. Mais le chemin du nœud est différent entre la scène de jeu et la scène de titre. Nous pouvons facilement contourner ce problème en exportant la variable au lieu d'utiliser at on ready. Nous devrons attribuer la valeur du fondu deux scènes dans le panneau d'inspection. Si la variable n'apparaît pas, vous devrez peut-être fermer et rouvrir Godot pour que l' héritage de classe fonctionne Les fonctions sont également héritées, mais les sous-classes peuvent redéfinir des fonctions héritées qui remplacent leur comportement. C'est pourquoi chaque classe que nous avons écrite avec une fonction re ou une fonction process a une icône bleue à côté, car elle remplace la définition héritée qui existe déjà dans la classe de nœud Si notre classe de gestionnaire de scène dispose d'une fonction prête à l'emploi qui indique au fondu de disparaître, ce comportement sera hérité à la fois par le gestionnaire de jeu et par le gestionnaire de titres. Nous pouvons supprimer cette fonction du gestionnaire de jeu, mais le gestionnaire de titres ouvre également le menu. En permettant au gestionnaire de titres de remplacer la définition de fonction prête héritée de Scene Manager, n'est pas nécessaire de la remplacer dans son intégralité Nos sous-classes peuvent accéder à la définition héritée d' une fonction à l'aide du mot-clé super Puisque le gestionnaire de titres hérite de Scene Manager, Scene Manager est une superclasse En appelant Super Dot Ready, nous disons au Fade de passer à clair. Mais ensuite, nous demandons également au menu de s'ouvrir également. La structure des superclasses et l'héritage deviendra plus utile si nous avons plus de gestionnaires de scène ou si nous avons des comportements plus communs à tous nos gestionnaires de scène Nous n'avons pas besoin de réécrire le même code dans plusieurs scripts Nous avons maintenant un nœud chargé automatiquement dans notre essai de scène qui peut stocker des informations sur les paramètres et la progression du jeu. Dans la leçon suivante, nous allons ajouter une musique de fond à notre jeu. Je te verrai dans la prochaine leçon. 6. MUSIQUE: Bonjour, mes amis. Dans la leçon précédente, nous avons créé des nœuds chargés automatiquement qui peuvent être utilisés pour transmettre des informations entre différentes scènes. Dans cette leçon, nous allons ajouter musique de fond qui peut changer à chaque scène du jeu. Pour cette leçon, j'utiliserai pack de musique de Barn créé par Eric the Funny Barn sur Itch point IO. Quelle que soit la musique de fond que vous choisissez d'utiliser pour votre jeu, assurez-vous qu'elle est conçue pour fonctionner en boucle. Les fichiers audio étant généralement très volumineux, je vous recommande de ne les importer dans votre projet que lorsque vous décidez de les implémenter. Une fois que vous les avez importés et triés dans un dossier musical, sélectionnez-en un et passez du panneau d'arnaque au panneau d'importation. Il se peut que vous deviez modifier les paramètres d'importation de vos fichiers audio pour qu'ils puissent démarrer en boucle. Selon le type de fichier, le paramètre de boucle peut être une case à cocher ou une liste déroulante contenant plusieurs options Dans ce cas, vous souhaiterez le remplacer par une boucle linéaire. Commençons par ouvrir la scène de titre et y ajouter un nouveau nœud. Sur le nœud du lecteur de flux audio. Assurez-vous de ne pas utiliser les variantes à deux ou trois D, car elles sont destinées à simuler sons auditifs dans un espace à deux ou trois D. Le nœud normal du lecteur de flux audio ne sera pas affecté par la proximité ou par tout autre élément de la scène, et diffusez simplement le son tel quel. Nous pouvons définir la propriété du flux audio dans l'inspecteur sur l'une de nos chansons importées. Si vous examinez les propriétés des notes du lecteur de flux audio dans l'inspecteur, vous remarquerez que le volume est mesuré en décibels, à flot avec une valeur par défaut de zéro comprise entre moins 80 et 24 . Il est important de noter que ce chiffre n'est pas exagéré. Augmenter de 1 décibels à 2 décibels n'est pas deux fois plus fort Mais ne vous inquiétez pas si vous ne comprenez pas comment fonctionnent les décibels, car nous ne les utiliserons pas Nous pouvons indiquer au nœud du lecteur de flux audio de se lancer automatiquement lorsque le jeu démarre lancez le jeu, la musique démarre à plein volume, et lorsque nous passons à la scène du jeu, elle s'arrête soudainement. En combinant ce que nous avons appris dans les deux leçons précédentes, nous pouvons créer un lecteur audio persistant pour écouter de la musique de fond, et également faire disparaître la musique de manière fluide. Comme la musique de fond est souvent présente dans chaque scène dans les jeux , il serait logique qu'il y ait un nœud chargé automatiquement qui puisse rester en permanence dans l'arborescence des scènes pour la gérer. Nous pouvons donc supprimer le nœud du lecteur audiotrem dans notre arborescence de scènes Et créez un nouveau script dans le dossier Auto Lodes. Appelons ça de la musique. Ce nœud chargé automatiquement peut hériter du lecteur de flux audio, donnant au nœud musical l'accès à toutes les propriétés et méthodes d' un nœud de lecteur de flux audio Comme nous ne pouvons pas accéder aux propriétés d' un nœud chargé automatiquement dans l'inspecteur, nous devrons définir ses valeurs de propriétés par défaut dans la fonction de préparation des scripts. J'aimerais que le volume commence à sa valeur la plus basse possible, soit moins 80 décibels Mais nous pouvons également utiliser le volume linéaire si nous le voulons, ce qui est plus facile à comprendre pour la plupart des gens. À l'aide d'une fonction intégrée, linéaire en dB, abréviation de décibels, qui convertira une échelle linéaire en échelle de décibels, nous permettant de régler le volume à zéro en termes linéaires, ce qui signifie qu' Si vous souhaitez que la musique soit également jouée pendant que le jeu est en pause, nous devrons modifier le mode de traitement de ce nœud En utilisant les suggestions, nous pouvons toujours le définir sur node, point, process. Merci D'accord. En réfléchissant d'abord à la manière dont nous voudrions que ce nœud soit utilisé, nous n'avons probablement besoin que de deux fonctions publiques. Un pour écouter un morceau de musique et un autre pour le faire disparaître. piste de lecture prendra une piste comme paramètre de type flux audio. Alors que le fondu ne nécessite aucun paramètre. Dans la fonction Play track, nous pouvons accéder à toutes les propriétés héritées du nœud du lecteur de flux audio, y compris le flux en cours de lecture, dont la valeur par défaut est null. Nous pouvons définir la valeur du stream en fonction de la piste que nous voulons jouer. Dites ensuite au lecteur de flux audio de jouer. Mais le volume est actuellement inaudible. Utilisons un tween comme nous l'avons fait avec le fondu visuel pour ajuster progressivement le volume au fil du temps, en déclarant une nouvelle variable d'interpolation en haut du script Nous allons d'abord vérifier si le préadolescent existe déjà, et s'il existe, vérifier s'il est déjà en cours d'exécution Et si c'est le cas, tuez-le. Nous pouvons ensuite créer un nouveau tween. Et entre deux propriétés. Accès à ce nœud lui-même, la propriété du volume, en le transformant progressivement en point de fichier définissant le volume des points sur une durée d'une seconde. Mais n'oubliez pas que le volume n'évolue pas de façon linéaire, puisqu'il est mesuré en décibels Au lieu d'interpoler directement la propriété du volume, nous pouvons également interpoler une méthode La méthode Tween ne nécessite pas de référence à un nœud, nous pouvons donc supprimer le premier argument Le chemin de propriété est désormais une méthode appelable. Écrivons une fonction appelée set linear volume, qui prend un paramètre flottant du volume linéaire. Cette fonction définira la propriété du volume après l'avoir convertie de linéaire en décibels Nous pouvons l'utiliser dans notre fonction prête à l'emploi pour des raisons de cohérence. Et utilisez-la également comme méthode appelable dans l'appel de la méthode d'interpolation Notez que lorsque vous utilisez une méthode en tant que câble, elle n'a pas de crochets à son extrémité. La méthode a également besoin non seulement d'une valeur finale, mais également d'une valeur de départ, car ce n'est plus une propriété du nœud. Il n'a aucun moyen de connaître la valeur actuelle. Les valeurs de début et de fin sont en fait un argument qui sera transmis à la méthode appelable, le volume linéaire En utilisant la fonction intégrée opposée, nous pouvons convertir les décibels en décibels linéaires pour transformer le volume de décibels actuel en volume linéaire comme valeur de Nous pouvons spécifier que le volume linéaire de notre musique sera interpolé, quel que soit le volume actuel, jusqu'à que le volume soit réglé sur une seconde Renvoyons également le signal de fin de l' interpolation. Ensuite, la fonction Fade Out voudra faire exactement le contraire. Tweeter le volume linéaire à partir de zéro. Attendre la fin de l'interpolation, arrêter la lecture du nœud et remettre la piste sur zéro Comme nous l'avons fait avec la couleur Fade, nous pouvons les combiner en une seule fonction privée. Disons que c'est du volume. En prenant uniquement le volume linéaire cible comme paramètre. Faire alterner le volume de son emplacement actuel vers le volume cible pendant une seconde Et maintenant, les fonctions d'entrée et disparition utilisent la même fonction Ouvrez les paramètres du projet, passez à l'onglet de chargement automatique. Nous pouvons ajouter le script musical à la liste des nœuds chargés automatiquement. Dans le script du gestionnaire de scène, nous pouvons exporter une variable pour contenir la piste de musique de fond de chaque scène, car chaque gestionnaire de scène héritera la variable et pourra lui attribuer sa propre valeur Notre script Scene Manager peut désormais accéder facilement au nœud de chargement automatique de musique en utilisant son nom de nœud, indiquant au nœud musical jouer le morceau souhaité pour cette scène. Attribuons une piste musicale différente pour chaque titre et chaque scène de jeu. Et assurez-vous également de faire disparaître la musique chaque fois que nous changeons de scène. Essayons-le. La musique de la scène titre s'estompe, l' appui sur le nouveau bouton de jeu fait disparaître la musique et la scène de jeu réintègre sa propre musique faites une pause et que vous appuyez sur exit, la musique s'éteint et la musique du titre s'estompe Cela fonctionne bien tant que nous ne jouons qu' un seul morceau de musique par scène et que nous nous efforçons de toujours estomper avant de demander un nouveau Mais que se passerait-il si nous voulions demander au nœud musical de jouer un morceau différent alors qu'il joue déjà ou même le même morceau ? Ce serait une bonne idée d'ajouter des conditions supplémentaires à la fonction Play Track. Commençons par vérifier si le nœud musical fonctionne déjà. Ensuite, vérifiez également si ce que le nœud joue est le même que ce à quoi nous voulons jouer. Si tel est le cas, nous n'avons pas besoin de modifier le stream ou de lui demander de jouer. Nous pouvons simplement renvoyer le signal de fin de l' interpolation qui est renvoyé en diminuant le volume Si une autre piste est déjà en cours de lecture, nous devons effacer cette piste avant de passer à celle-ci. Attendez que le jumeau soit terminé, puis passez au reste de cette fonction. Notez que cela va désormais effectuer deux exécutions de fad volume, chacune d'une durée d'une seconde Il faudra donc 2 secondes pour changer de piste. Rendons cela plus flexible en exportant la durée comme nous l'avons fait avec le FAD et en lui attribuant une valeur par défaut de 1 seconde Permettez ensuite aux fonctions play track et fade out d'accepter un paramètre de durée facultatif avec valeur par défaut de la variable exportée. Transmission du paramètre de durée à la fonction de volume du fondu. Nous pouvons l'utiliser dans l'appel de la méthode tween en tant qu'argument. on regarde les scripts du jeu et du gestionnaire de titres, O sur le nouveau jeu et sur Si l'on regarde les scripts du jeu et du gestionnaire de titres, les fonctions O sur le nouveau jeu et sur la touche de sortie sont assez similaires maintenant. Écrivons une méthode héritée pour changer de scène dans notre script Scene Manager. Scènes de changement nommées. Nous pouvons dire à la musique de s'estomper. Attendez que le fondu passe au noir, remettez le jeu en pause s'il est suspendu, puis changez la scène de l'arbre en fichier Transmettre le chemin du fichier en argument. Afin d'obtenir les résultats escomptés, nous devrons nous assurer que le signal attendu est celui dont la durée est la plus longue. La déclaration d'attente doit également être la dernière si nous voulons que tous les préadolescents se produisent en parallèle Si, pour une raison quelconque, vous devez réorganiser l'ordre de ces instructions afin que le signal attendu ne soit pas celui renvoyé, vous pouvez également le stocker dans une variable et l'attendre sur une autre ligne Désormais, le gestionnaire de titres peut faire tout cela en appelant sa méthode de scène de changement héritée, en passant le chemin des scènes de jeu comme argument. De même, le gestionnaire de jeu peut également le faire en modifiant la scène du titre. N'oubliez pas non plus que les sous-classes peuvent toujours remplacer ces comportements si vous souhaitez qu' une scène spécifique se comporte différemment Nous avons maintenant une musique de fond qui s' intègre et s'éteint en douceur à chaque scène de notre jeu Dans la leçon suivante, nous ajouterons un menu de paramètres permettant de modifier les paramètres du jeu. Je te verrai dans la prochaine leçon. 7. Paramètres: Bonjour, mes amis. Dans la leçon précédente, nous avons ajouté une musique de fond qui s'estompe doucement Dans cette leçon, nous allons ajouter un menu de paramètres à notre jeu. Commençons par la scène titre. Contrairement aux boutons et aux menus que nous avons créés jusqu'à présent, qui flottent juste devant tout, je préférerais que les paramètres du jeu soient intégrés dans un panneau. Il existe deux notes de contrôle différentes que nous pouvons ajouter à notre scène, qui se comportent différemment. Un panneau n'est qu'une fenêtre de base que nous pouvons redimensionner à notre guise et réorganiser ses enfants de n'importe quelle manière Un conteneur de panneaux se redimensionnera automatiquement pour encapsuler ses enfants, comme un conteneur horizontal ou vertical. Les deux présentent des avantages et des inconvénients. J'aime utiliser un conteneur de panneaux pour économiser le temps et les efforts liés au dimensionnement et à la réorganisation des nœuds enfants pendant que je développe mon interface utilisateur Mais je pourrais passer à un panneau si je souhaite plus de flexibilité lorsqu'il s'agit peaufiner le projet final. Puisque notre classe de paramètres contient des variables booléennes. Nous pouvons ajouter une case à cocher ou un bouton à cocher pour chaque variable, permettant au joueur de définir sa valeur sur vrai ou faux en conséquence. Ajoutons-en un pour l'inversion de caméra x et un autre pour l'inversion de caméra Je vais en ajouter un de chaque, afin de voir à quoi ils ressemblent et de décider lequel je préfère plus tard. Le réglage du volume est une variable flottante, qui est souvent contrôlée dans les menus par un curseur Étant donné qu'un curseur impose intrinsèquement une valeur minimale et maximale Chacun de ces paramètres aura également besoin d' un nœud d'étiquette pour indiquer au joueur à quoi il sert. Tout comme nous avons utilisé des conteneurs horizontaux et verticaux pour organiser automatiquement les nœuds. Nous pouvons également utiliser un conteneur de grille pour organiser automatiquement les nœuds selon un schéma de grille. La seule propriété des nœuds de la grille est le nombre de colonnes de la grille. Les lignes sont automatiquement ajoutées et supprimées du conteneur de la grille en fonction du nombre d'enfants qu'il contient. En réglant ce paramètre sur deux, nous pouvons facilement organiser tous les nœuds d' étiquette dans la colonne de gauche et les nœuds de contrôle interactifs sur le côté droit Le conteneur quadrillé compressera tous ses enfants autant que possible. Mais nous pouvons spécifier des tailles minimales pour chacun d'entre eux. Je vais donner au curseur de volume une valeur x minimale de 100 pixels, ce qui force la colonne de droite du conteneur de la grille à s'étendre Maintenant, je pense que les cases à cocher seraient mieux centrées dans la colonne. En élargissant la section de mise en page et la sous-section sur le dimensionnement des conteneurs, je vais définir la valeur horizontale pour réduire le centre La case à cocher est maintenant centrée horizontalement dans la colonne. Et je vais faire de même pour le bouton de vérification. Maintenant que nous pouvons voir notre curseur, examinons ses propriétés dans l'inspecteur Nous pouvons définir ses valeurs minimale et maximale, ainsi que la valeur du pas, qui est une distance entre les valeurs sur lesquelles le curseur peut être réglé En utilisant nos réglages de volume linéaires, la valeur minimale doit être zéro. Une valeur maximale de un est acceptable, car une linéaire équivaut à 0 décibels Mais nous pouvons également autoriser le volume à dépasser ce seuil. Puisque nous savons que la valeur maximale en décibels du nœud du lecteur de flux audio est de 24 décibels Nous pouvons en fait taper des fonctions intégrées dans ce champ, utilisant db pour linéaire, passant 24, nous obtenons 15,849 est la valeur maximale réelle Mais cela peut entraîner une diminution de la qualité audio. Le réglage du volume linéaire maximal à un convient dans la plupart des cas. Quelque chose d'aussi fluide que le volume peut généralement être ajusté dans une très faible mesure. Comme mon curseur mesure 100 pixels, je vais régler sa valeur d'étape 0,01, chaque pixel représentant une variation de volume de 1 % Nous aurons également besoin d'une étiquette de titre pour ce menu. Et un bouton qui le ferme. Mais ils n'ont pas leur place dans le réseau. Nous pouvons trier le conteneur de la grille de titre et le bouton de fermeture à l'intérieur d'un conteneur vertical. L'étiquette de titre et le bouton fermé sont étirés pour s'adapter à la même largeur que le conteneur de la grille. Je vais centrer le titre en utilisant sa propriété d'alignement. Le bouton peut être réglé pour rétrécir commencer à le placer dans le coin inférieur gauche. Rétrécissez le centre pour le centrer ou rétrécissez l'extrémité pour le placer dans le coin inférieur droit. Si vous ne voulez pas utiliser ces conteneurs ou si vous les trouvez trop restrictifs, vous pouvez toujours utiliser un panneau normal et un manuel nous positionnons chacun des nœuds enfants pour obtenir la disposition que vous souhaitez. Nous pouvons réutiliser la ressource du thème pour notre menu des paramètres si nous le voulons, mais vous pouvez utiliser différents styles de boutons pour différentes parties de votre jeu. Dans ce cas, vous pouvez facilement créer une nouvelle ressource thématique. Je vais simplement ajouter un paramètre de conteneur de panneaux aux paramètres existants. Remplacez sa boîte de style par une texture. Et donnez-lui des marges de contenu de 16 pixels. Les cases à cocher héritent de leur style du bouton Nous pouvons donc remplacer cela en ajoutant une case à cocher au thème et en remplaçant toutes ses cases de style Je vais juste utiliser des boîtes de style vides. Répétez ensuite le processus pour le bouton de vérification. OK. Je pense que le titre devrait avoir une taille de police plus grande que les autres étiquettes. Je vais modifier sa taille de police dans la section de remplacement du thème. Maintenant que j'ai vu à la fois la case à cocher et le bouton à cocher, je peux les comparer dans le contexte du menu Je pense que je préfère la case à cocher et je vais inverser la caméra en y pour qu'elle corresponde. Une fois le menu créé, ancrons-le au centre de l'écran. Nous avons déjà écrit un script de menu qui gère l'affichage et le masquage d'un nœud de contrôle et qui peut également permettre de se concentrer sur l'ouverture d'un menu. Attachons-le au nœud du menu des paramètres. Et réglez son élément de mise au point par défaut sur le premier élément de menu, la case à cocher Camera Invert X Mais pour connecter les signaux de commande à notre script, il faudra qu'il s'agisse d'un script différent de ceux utilisés par les autres menus. Nous pouvons donner un nom de classe au manuscrit , puis créer un nouveau script dans le dossier des scripts de l'interface utilisateur, en héritant du menu Appelons-le menu des paramètres. En faisant glisser ce script vers le nœud du menu des paramètres, il remplace le manuscrit Mais nous devrons remplir à nouveau l'élément de focus par défaut. Dans notre nouveau script, nous devrons initialiser chacun de nos nœuds de contrôle pour qu' il corresponde aux valeurs déjà présentes dans la ressource de paramètres Nous devrons donc récupérer les références à chacun de nos nœuds de contrôle en utilisant At on ready. Ensuite, dans la fonction Ready, nous pouvons définir les valeurs de la variable correspondante dans la ressource de paramètres de fichier. Avec nos commandes de réglage triées dans le menu et initialisées. Nous pouvons maintenant connecter les signaux de chaque nœud de contrôle au manuscrit des paramètres. Appel d'une fonction chaque fois qu'un paramètre a été modifié par le joueur. Les nœuds de case à cocher et de bouton à cocher relieront le signal activé et nous indiqueront s'il est défini sur vrai ou faux Et le curseur connectera le signal à valeur modifiée, nous donnant la nouvelle valeur sur laquelle il vient d'être réglé Nous pouvons définir les valeurs des variables dans les paramètres par points de notre fichier pour qu'elles correspondent à toutes les valeurs modifiées à l'aide des nœuds de contrôle. Étant donné que les commandes de l'appareil photo lisent directement les paramètres pour déterminer son fonctionnement. Aucune autre action n' est nécessaire pour que ces paramètres fonctionnent. Mais le réglage du volume n' affectera pas automatiquement le nœud musical. Nous devrons régler le volume manuellement. Lorsque le réglage du volume change, nous pouvons appeler volume linéaire transmettant une nouvelle valeur comme argument. Exécutons cette scène et essayons de régler le volume pour constater immédiatement la différence lorsque vous écoutez de la musique. Une partie terminée comportera probablement plus de nœuds audio, chacun ayant son propre réglage de volume. Il se peut que nous ne souhaitions pas tous les ajuster individuellement depuis le menu des paramètres. Pour anticiper ce besoin, nous pouvons émettre un signal ici pour indiquer à l'ensemble de la scène que le réglage du volume a été modifié. Ensuite, tout nœud qui écoute l' de ce signal peut y réagir. En haut du script, nous pouvons déclarer des signaux de la même manière que nous déclarons des variables, en utilisant le mot clé signal. Passons au nom du volume. Il est courant de nommer les signaux au passé, indiquant ce qui s'est passé auquel les autres scripts devraient réagir. Comme pour une fonction, nous pouvons ajouter des crochets à la fin de la déclaration du signal pour y ajouter des paramètres. Nous pouvons non seulement indiquer que le volume a été modifié, mais également émettre la nouvelle valeur de volume sous forme de valeur flottante. Lors de la connexion de ce signal à une fonction, la fonction réceptrice doit accepter un paramètre flottant correspondant au signal. Ensuite, connectons le signal appuyé sur les boutons fermés à la méthode fermée des classes de menu pour fermer le menu. La plupart des jeux permettent de modifier les paramètres du titre et des scènes de jeu. Enregistrez la branche du menu des paramètres en tant que scène à part entière. Copiez ensuite le nœud du menu des paramètres et collez-le dans les scènes de jeu. C'est toujours une bonne idée de m'assurer que le nœud de fondu se trouve avant tout le reste Je vais donc trier le menu des paramètres au-dessus celui-ci et définir sa propriété visible de false. Nous pouvons facilement ajouter un bouton de réglage au menu de pause. Comme les deux scènes disposent menu de paramètres, un peu comme le Fade, nous pouvons exporter une variable depuis le script du gestionnaire de scènes, afin que le gestionnaire de titres et le gestionnaire de gain puissent l'utiliser. Et dans les deux scènes, le menu des paramètres est accessible depuis un autre menu. Soit le menu principal des scènes de titre , soit le menu de pause des scènes de jeu. Nous pouvons créer une implémentation très simple de Breadcrumbs dans notre manuscrit. Ainsi, chaque fois qu'un menu est ouvert à partir d'un autre menu, fermer revient automatiquement au menu précédent Dans notre manuscrit, nous pouvons déclarer une autre variable. Appelons-le underscore Breadcrumb de type menu. Ajoutez ensuite un paramètre facultatif à la fonction d'ouverture également appelée Breadcrumb Si le fil de navigation est autre chose que nul lorsque le menu est ouvert, nous devons l' enregistrer dans la variable et fermer ce menu avant d'ouvrir celui-ci Ensuite, lorsque le menu est fermé, si le fil de navigation n'est pas nul, ce menu doit être ouvert après la fermeture de celui-ci, puis il peut être remis à Les scripts du gestionnaire de titres et du gestionnaire de jeu peuvent désormais ouvrir le menu des paramètres, en passant les boutons du menu ou le menu pause en guise de miette de pain Ouverture de la scène du menu des paramètres. Assurons-nous que l'élément de focus par défaut est défini et que ces nœuds fonctionneront toujours même lorsque le jeu est en pause. Essayons de lancer le jeu. Modification des paramètres du jeu et passage à la scène de jeu. Les commandes de volume et de caméra restent modifiées, et nous pouvons les modifier à nouveau depuis le menu de pause. Nous avons maintenant un menu de paramètres qui permet de modifier le volume et les commandes de l'appareil photo en temps réel. Dans la leçon suivante, nous allons ajouter des événements de transition pour déplacer notre personnage entre les différents niveaux. Je te verrai dans la prochaine leçon. 8. Quitter: Bonjour, mes amis. Dans la leçon précédente, nous avons ajouté un menu de paramètres. Dans cette leçon, nous allons détecter le moment où le joueur franchit une porte et nous préparer à passer à un autre niveau Commençons par le niveau actuellement chargé dans la scène de jeu. Pour moi, c'est une chambre trois. Deux portes mènent à la sortie de cette pièce. Lorsque le joueur franchit l'une de ces portes, il doit passer à un autre niveau de mon jeu la même manière que le corps de notre personnage entre en collision avec le corps statique du sol, nous pouvons détecter les collisions avec un espace vide pour déclencher un événement. Le nœud qui effectue cette opération est appelé nœud de zone 3 D. Et tout comme un corps physique, il a besoin d'une forme de collision avant de pouvoir fonctionner. Ajoutons un nœud en forme de collision en trois D et faisons-en une forme de boîte. Pour l'adapter à la taille de mes carreaux de sol, je vais le faire 4 mètres de long, de large et de haut. Renommons le nœud de la zone 3 D en transition. Créez ensuite sa propre scène en cliquant dessus et en la faisant glisser dans le dossier des scènes de l' onglet système de fichiers Ouvrez ensuite la nouvelle scène de transition pour la modifier. J'aimerais que l' origine des transitions repose clairement sur le sol. Nous allons déplacer la forme de collision vers le haut le long de l'axe y, la moitié de sa hauteur de 4 mètres, soit 2 mètres. Afin de réagir aux collisions avec le joueur, le nœud de transition aura besoin d'un script. Créons un nouveau script en cliquant sur l'icône de défilement. OK. Assurez-vous qu'il est enregistré dans le dossier des scripts. Le nom par défaut et l'héritage sont corrects. Le nœud de la zone 3 D émet un tas de signaux différents pour réagir aux collisions. Puisque le corps de notre personnage est considéré comme un corps physique et que nous voulons réagir lorsque le personnage entre dans cette zone, le signal que nous voulons est le corps saisi La connexion de ce signal au nœud de transition lui-même crée la fonction saisie sur le corps, qui accepte le corps entré dans cette zone comme paramètre du nœud trois D. Nous pouvons voir les types de paramètres dans la liste des signaux. Pour l'instant, imprimons simplement le corps pour voir notre collision fonctionner. cours de scène de jeu, en entrant dans la zone de transition, le nom du corps du personnage en trois notes en D est imprimé, mais également les noms des nœuds corporels statiques de notre scène. Nous ne voulons pas que n' importe quel corps physique entre dans cette zone pour déclencher une réaction, mais uniquement le personnage du joueur. Nous pouvons vérifier si le corps appartient à une certaine classe. Ou vérifiez le nom du nœud pour voir s'il s'agit du personnage du joueur. Mais ces solutions ne sont pas très flexibles. Une méthode plus simple et plus propre consiste à s'assurer que seul le personnage du joueur peut réellement entrer en collision avec cette zone en utilisant le masquage des collisions Tout d'abord, ouvrons la scène du personnage et sélectionnons le nœud en trois D du corps du personnage. En regardant sous les propriétés héritées de l'objet de collision en trois D, développez la section de collision. Il y a ici deux séries de nombres allant jusqu'à 32. Ce sont des couches de collision, que nous pouvons utiliser pour contrôler quels objets de notre jeu peuvent entrer en collision les uns avec les autres et lesquels ne le peuvent pas Jusqu'à présent, dans notre jeu, tout existe dans le calque 1 par défaut et masque ou entre en collision uniquement avec le calque 1 Puisque la couche 1 est la couche par défaut et que tout entre en collision avec elle par défaut Faisons en sorte que la première couche soit le terrain du jeu. la façon dont ces couches sont affichées par blocs de huit, j'aime considérer chaque bloc comme des couches regroupées. Les huit premières couches de mon jeu peuvent être réservées aux couches du monde ou de l'environnement. Notre personnage peut exister sur une couche unique différente. Utilisons la couche neuf comme exemple. Ainsi, l'intégralité du deuxième bloc de couches peut être réservée aux couches de collision liées au joueur. ouvrant les paramètres du projet, dans l'onglet général, sous les noms des couches, nous pouvons modifier le nom de chacune de ces 32 couches qui existent pour la physique des trois D. Je nommerai la couche 1 terrain et la couche 9 joueurs. Passez le curseur sur les couches dans l'inspecteur pour afficher leur nom Dans la scène de transition, étant donné que rien n'a besoin de détecter ou d'entrer en collision avec notre zone, il n'est en fait pas nécessaire qu'elle existe sur aucune couche N'hésitez pas à mettre de côté une couche de collision pour les transitions si cela vous aide. La transition n'a besoin que d' un masque de collision pour détecter les collisions avec le joueur. Désactiver la première couche et masquer uniquement la couche neuf, le joueur Nous pouvons renforcer cela en modifiant les propriétés du nœud en trois D de la zone, lui demandant de surveiller pour d'autres corps physiques, mais de ne pas être surveillable par d'autres organismes physiques Maintenant, la seule façon dont cette zone 3D peut déclencher une collision est de détecter un corps physique sur la couche neuf. Il ne recherchera aucune autre couche et sera invisible pour tout le reste. La zone de transition peut être positionnée de manière à couvrir l'espace vide au-delà de la porte, empêchant ainsi le personnage du joueur de sortir de cette pièce sans entrer en collision avec elle personnage du joueur de sortir de cette pièce sans entrer en collision avec J'ouvre toutes mes scènes de différents niveaux. Je peux voir que cette transition est destinée à se connecter à la première chambre. Appelons-le donc deux pièces une. La duplication du nœud renommera automatiquement le doublon en deux pièces, et je pourrai le repositionner sur l'autre porte T Bien que mes petits niveaux ne comportent chacun que deux transitions. Vous pouvez imaginer comment un grand niveau complexe peut contenir de nombreux autres dont il est difficile de suivre l'évolution. Nous devons donc regrouper ces nœuds pour les trier dans l'arbre des scènes. Ajoutons un nouveau nœud, juste un nœud normal, et nommons-le transitions. Reliez-y ensuite les nœuds de transition. Cela les rendra plus faciles à trouver et utiliser, non seulement dans notre arbre de scènes sous l'éditeur, mais également dans nos scripts ultérieurement. Nous pouvons copier et coller ces nœuds dans nos scènes de niveau et les repositionner pour couvrir toutes les portes Renommez-les pour que nous sachions où ils mènent. ouvrant le script de progression, nous pouvons modifier les variables ou en ajouter de nouvelles pour enregistrer le nom du niveau se trouve actuellement le joueur sous forme de chaîne. Je vais l'initialiser pour qu'il s'agisse de la première chambre. Pour que cette méthode fonctionne, la valeur de cette variable doit correspondre l'orthographe exacte du nom de scène du niveau dans l'onglet du système de fichiers. Dans le script de transition. Nous pouvons ensuite définir cette variable au fur et à mesure que le joueur passe d'un niveau à l'autre. Exportons une variable pour contenir le nom du niveau auquel cette transition mène sous forme de chaîne. Ensuite, lorsque le corps du personnage entre dans cette zone, nous pouvons définir la valeur du niveau du point de progression des points du fichier. Ce sera le nom du niveau. Ensuite, nous allons demander au game manager de passer à ce niveau. Comme nous l'avons fait dans le script du joueur, nous pouvons toujours accéder au nœud racine des scènes en commençant le chemin du nœud par le symbole dollar, puis en accédant au gestionnaire de jeu avec le jeu Disons simplement au game manager d'appeler une fonction que nous n'avons pas encore écrite, nommée Load level. Le nom du niveau étant déjà enregistré dans la ressource de progression, il n'est pas nécessaire de le transmettre en argument. Comme nous essayons d'accéder au gestionnaire de jeu uniquement dans cette instance unique, il n'est pas nécessaire de le stocker dans une variable ou d'utiliser Add on Ready. D'autant que logiquement, un seul événement de transition peut éventuellement se produire par niveau chargé dans le jeu Ainsi, chaque transition déclarant la variable et accédant au gestionnaire de jeu alors qu'une seule personne en a réellement besoin serait plus inutile. Dans le script du gestionnaire de jeu, prenons d'abord une référence au niveau qui existe déjà dans la scène. Nous pouvons cliquer et faire glisser le nœud dans le script pour générer automatiquement son chemin de nœud, ou même maintenir la touche Ctrl ou Commande enfoncée tout en relâchant le bouton de la souris pour le stocker automatiquement dans une variable. Je vais renommer la variable au niveau actuel. Déclarez ensuite la fonction de niveau de charge que nous avons appelée à partir du script de transition. abord, nous devons savoir si un niveau est déjà chargé en vérifiant si cette variable contient une valeur ou si elle est nulle. S'il contient une valeur, nous devons d'abord attendre f to black. Nous pouvons ensuite décharger le niveau actuel de notre scène de jeu à l'aide de la fonction intégrée Q. Nous allons surcharger la scène suivante dans la prochaine leçon Pour l'instant, attendons que Fate s'en débarrasse et essayons-le. Si le joueur franchit la porte, la scène passe au noir Le niveau actuel est supprimé de l'arborescence des scènes, puis nous revenons en arrière pour voir notre personnage et tomber en chute libre puisqu'il n' y a plus de niveau. Notre panneau de débogage nous donne deux avertissements. Nous avons déclaré une variable qui n' a jamais été utilisée dans le script, et notre fonction de collision contient un paramètre inutilisé . Nous pouvons préfixer les paramètres inutilisés par un trait de soulignement pour les signaler au moteur afin qu'ils puissent être ignorés Lorsque vous passez au script de transition, le paramètre body n' est plus utilisé. Nous pouvons ajouter le préfixe au nom de la variable pour répondre à cet avertissement Dans le script Scene Manager. Nous avons déclaré la variable settings manu dans ce script, mais elle n'est pas utilisée dans ce script Nous l'avons fait exprès car la variable settings many est héritée et utilisée par tous les héritiers de cette classe Nous n'avons aucune intention d' utiliser directement le script du gestionnaire de scènes, mais nous l'utilisons pour contenir toutes les propriétés et comportements similaires d'un groupe de scripts connexes. Dans d'autres langages, cela s' appellerait une classe abstraite. Ce modèle d'utilisation de l' héritage de cette manière est connu sous le nom d'abstraction dans la programmation orientée objet. Nous pouvons choisir d' ignorer un avertissement en ajoutant une autre ligne avant la ligne qui déclenche l'avertissement en utilisant at warning ignore. Spécifiez ensuite l'avertissement que vous souhaitez ignorer. Dans ce cas, nous avons déclaré une variable privée non utilisée. Les deux avertissements de débogage ayant été corrigés, le lancement du jeu ne présentera plus aucun avertissement Nous avons maintenant le niveau actuel qui se décharge lorsque le joueur entre dans une porte Dans la leçon suivante, nous allons charger le niveau suivant et positionner le joueur dans la porte correspondante de l'autre côté Je te verrai dans la prochaine leçon. 9. Entrer: Bonjour, mes amis. Dans la leçon précédente, le joueur sortait du niveau par une porte Dans cette leçon, nous allons charger le niveau suivant et y positionner le joueur. Avant de charger le niveau suivant, nous avons d'abord vérifié s'il existe un niveau actuel et, dans l' affirmative, nous sommes en train de le décharger Nous pouvons ensuite attribuer une nouvelle valeur à la variable de niveau actuelle puisqu'elle est désormais vide. À l'aide d'une fonction intégrée de chargement, nous pouvons charger n'importe quelle ressource depuis l'onglet de notre système de fichiers, y compris des scènes, en spécifiant un chemin de fichier sous forme de chaîne. Pour mieux organiser nos scènes, créons un sous-dossier dans le dossier des scènes nommé levels. Placez ensuite chacun des niveaux du jeu dans ce dossier. En sélectionnant l'une des scènes de niveau, nous pouvons cliquer et faire glisser le curseur dans les crochets des fonctions de chargement pour y indiquer le chemin du fichier Comme tous les niveaux de nos jeux se trouvent dans le dossier des niveaux et qu'ils se terminent tous par l'extension TSCN point, nous pouvons séparer ces parties de la chaîne à l' aide de l' opérateur Ajouter, le Remplacez ensuite le nom de la scène de niveau par ceux enregistrés dans la ressource de progression. La fonction de chargement renvoie une ressource. Mais la variable de niveau actuelle est un nœud trois d. Nous devons d'abord appeler une fonction sur la ressource pour la transformer en nœud, point instanciée Ajoutez-le ensuite à l'arbre des scènes avec la fonction add child. Comme il s'agit du script du gestionnaire jeu attaché au nœud racine des scènes de jeu, le nœud de niveau sera ajouté en tant qu'enfant du nœud de jeu. Mais qu'en est-il lorsque le jeu commence pour la première fois ? Ou si le joueur charge un fichier sécurisé ? Nous pouvons commencer notre scène de jeu sans nœud de niveau. En supprimant le nœud de niveau de la scène de jeu, nous pouvons supprimer le module prêt à être ajouté de la variable de niveau actuelle. Remplaçons immédiatement la fonction Ready héritée de Scene Manager et appelons le niveau de charge Avant d'exécuter la définition de superclasse depuis Scene Manager Cela nous permettra de charger n'importe quel niveau de notre jeu, simplement en définissant son nom de fichier dans la ressource de progression et en appelant le niveau de chargement. Il passera facilement d'un niveau à l'autre en passant abord au noir et en déchargeant la scène en cours, puis en chargeant le niveau suivant et Si c'est la première fois qu'un niveau est chargé et qu'il n'y a aucun niveau en cours, il sautera cette étape et chargera immédiatement le niveau. Mais nous devrons positionner le joueur dans le nouveau niveau et assurer que la position est liée au chemin par lequel il est entré dans le niveau. Commençons par la scène de transition, en ajoutant un nouveau nœud qui ne fait que marquer une position dans un espace en trois D, un nœud marqueur en trois D. La seule différence entre un nœud en trois D et un nœud en trois D est que le marqueur dessinera un Gizmo et que l'éditeur indiquera où il se trouve Renommons l'entrée de ce nœud et déplacons-la vers l'avant le long de l'axe Z, manière à ce qu'elle se trouve en dehors du nœud de zone et suffisamment éloignée pour que le personnage du joueur n'entre pas en collision avec la Dans le script de transition, nous pouvons le faire glisser et maintenir la touche Ctrl ou Commande enfoncée pour l'ajouter en tant que variable sans être prêt. C'est à cette position que le joueur sera introduit dans le niveau lorsqu'il entrera par cette transition Dans nos scènes de niveau, nous pouvons faire pivoter n'importe laquelle de nos transitions pour pointer l'axe Z et le marqueur d' entrée vers un endroit approprié dans le niveau. Si, pour une raison quelconque, vous devez déplacer un marqueur d'entrée individuel sans affecter les autres transitions, vous pouvez toujours cliquer avec le bouton droit sur un nœud de transition et activer les enfants modifiables Cela vous permettra de déplacer un marqueur d'entrée spécifique pour tenir compte des obstacles ou des variations de hauteur du sol, par exemple. Avant de savoir comment positionner le joueur, nous aurons besoin des scènes de niveau pour suivre leurs transitions avec le script. Ajoutons un nouveau script au nœud racine des niveaux nommé level dans le dossier des scripts. Si nous faisons glisser le nœud de transition, nous pouvons le stocker dans une variable avec l'ajout prêt. Mais nous ne voulons pas de ce nœud. Nous voulons tous ses enfants. À l'aide d'une fonction intégrée get children, nous allons stocker une liste de tous les nœuds enfants de ce nœud de transition dans un tableau de nœuds. L'ordre des nœuds du tableau sera le même que celui de l'arbre des scènes. Nous pouvons accéder au contenu d'un tableau en spécifiant un numéro d'index commençant à zéro. Écrivons une fonction dans notre script de niveau qui donne le numéro d' index des transitions et renvoie les coordonnées où le personnage du joueur doit être placé. Appelons-le get entry, en acceptant l'indice de transition sous forme de paramètre entier. Et en renvoyant un vecteur trois, la position dans un espace à trois D du caractère à placer. Nous pouvons accéder au tableau des transitions en mettant le numéro d' index entre crochets. Si le numéro d'index est zéro, cela nous donnera le nœud supérieur, suivi de un, deux, etc. Ensuite, nous allons obtenir le marqueur d'entrée à partir de la transition et obtenir la propriété de position globale du marqueur d'entrée à trois nœuds D. Puisque la position des notes est relative à leur parent. Nous voulons connaître la position globale telle qu'elle existe dans l'ensemble de la scène, afin de pouvoir la restituer. Nous devrons joindre le script de niveau à la note de base de chaque niveau de notre jeu. Il est également possible, cependant, peu probable que lorsque vous chargez le niveau avant de repositionner le personnage, celui-ci se trouve déjà dans une zone de transition Dans la scène de transition, nous devons désactiver la propriété de surveillance par défaut. Ensuite, dans le script de niveau, lorsqu'un niveau est chargé et que le personnage est correctement positionné, nous pouvons appeler une fonction pour activer toutes les transitions. Une caractéristique très utile des tableaux est notre capacité à itérer chacun de leurs éléments à l'aide d'une boucle En commençant par le mot clé quatre, nous pouvons spécifier un alias que nous utiliserons dans la boucle pour faire référence à l'élément en cours. Suivi du mot clé in, puis du nom du tableau et de deux points. Tout ce que nous mettons dans le bloc de boucle s' exécutera sur chaque élément du tableau, et nous pouvons faire référence à l' élément actuel en utilisant l'alias. Pour chaque transition dans les transitions, nous pouvons définir sa propriété de surveillance sur true pour activer toutes les transitions de ce niveau. Dans le script du gestionnaire de jeu, nous pouvons saisir une référence au personnage du joueur. Ensuite, lorsqu'un niveau est chargé, nous pouvons positionner le joueur à l'entrée du niveau. Utilisons zéro comme argument pour le moment. Maintenant que le personnage est positionné, nous pouvons activer toutes les transitions du niveau, car nous savons que le personnage ne touche aucune d'entre elles. Enfin, nous devons définir les valeurs de chaque transition dans chaque niveau de l'inspecteur, afin que chaque transition sache à quel niveau elle se connecte. cours de scène, le jeu commence maintenant dans la première salle et le joueur est positionné devant la porte L'enfant supérieur du nœud de transition. En entrant par n'importe quelle porte, le niveau est déchargé et les scènes de jeu sont au bon Mais quelle que soit la porte que nous franchissons, le joueur est toujours placé devant la même porte Ajoutons une autre variable à la ressource de progression nommée transition ID de type int. Ajoutez ensuite également cette variable au script de transition exporté. Lorsque le personnage du joueur entre dans cette transition, nous pouvons définir la valeur dans la ressource de progression pour qu'elle corresponde à la variable exportée. Et dans le script du gestionnaire de jeu, utilisez-le comme argument pour sélectionner la transition dans laquelle le joueur sera placé. En commençant par la salle 1, examinons la transition vers la salle 2, qui possède désormais une variable d'ID de transition avec une valeur de zéro. Il s'agira de l'indice du nœud de transition qui revient sur la scène depuis la salle deux. Nous pouvons voir que la transition vers la première chambre correspond au nœud enfant supérieur, dont l'indice est zéro. C'est donc correct. Je jette un coup d' œil à la transition de la chambre deux à la chambre trois. Passons à la scène de la chambre trois, et nous pouvons voir que la transition de la salle trois à la salle deux correspond à l'indice 1. Nous devrons donc changer l'identifiant de transition de la salle deux à la salle trois en un. Et les transitions quittant la salle trois devront également être remplacées par une seule. Au cours de la scène de jeu, nous pouvons désormais passer d'un niveau à l' autre, dans le sens des aiguilles d'une montre ou dans le sens inverse des aiguilles d'une montre, et le joueur est correctement positionné à chaque fois et le joueur est correctement positionné Si vos niveaux comportent de nombreuses transitions, je vous recommande de définir une convention pour votre jeu quant à la façon dont vous organisez vos transitions, par exemple dans le sens des aiguilles d'une montre depuis le nord Vous pouvez également remplacer le numéro d'index par une chaîne et organiser vos transitions dans un dictionnaire plutôt que dans un tableau. J'aimerais également m' assurer que le personnage et la caméra sont pointés à l' opposé de la transition laquelle le joueur entre dans un niveau. Dans le script de niveau, tout comme nous avons renvoyé la position globale de l'entrée à partir d'une fonction, renvoyons également la rotation des transitions à partir d'une autre fonction. Désormais, le script du gestionnaire de jeu peut accéder cette fonction pour déterminer dans quelle direction ils doivent se diriger. Nous pouvons transmettre ces informations au script du joueur et utiliser pour faire pivoter à la fois le personnage et le ressort qui tient la caméra, appeler une fiction, transmettre la rotation renvoyée comme argument. Collez la direction en acceptant la rotation Y comme flottante. Vous pouvez facilement régler la rotation des bras à ressort en conséquence. Mais le bras à ressort doit être pivoté 180 degrés pour se trouver derrière le personnage Puisque la rotation est mesurée en radians, cela signifie que nous pouvons ajouter ou soustraire Pi cette valeur pour orienter la caméra dans la bonne direction Nous pouvons ensuite transmettre cette valeur de rotation le long de la chaîne à la classe de caractères. Et ajoutez une autre fonction pour faire pivoter le plateau de personnages afin qu'il fasse immédiatement face à la direction souhaitée. Essayons-le. Même si nous positionnons le personnage et la caméra à angles étranges avant d' entrer dans l'embrasure de la porte, ils seront tous deux orientés à la porte de l'autre côté Cela aidera le joueur comprendre d'où ils viennent. Le joueur peut désormais passer d'un niveau à l'autre de notre scène de jeu. Dans la leçon suivante, nous allons enregistrer et charger la progression des joueurs. Je te verrai dans la prochaine leçon. 10. Enregistrer: Bonjour, mes amis. Dans la leçon précédente, nous avons terminé notre processus de transition de niveau. Dans cette leçon, nous allons enregistrer et charger la progression des joueurs dans le jeu. Notre script de fichier comporte plusieurs variables contenant des ressources personnalisées que nous avons utilisées pour suivre les paramètres du jeu ainsi que la progression des joueurs. Commençons par la ressource de paramètres. Dans la fonction Ready, nous créons une nouvelle ressource de paramètres, mais nous ne devons le faire que s'il n'en existe pas déjà une que nous pouvons charger à la place. La condition I vérifiera d'abord si la ressource ceti existe, et si c'est le cas, chargez-la, sinon créez-en une nouvelle et sauvegardez-la immédiatement. Cette ligne sera en fait le bloc else d' une instruction IF. Godo nous permet de sauvegarder et de charger n'importe quelle ressource à l'aide des classes Singleton Le chargeur de ressources peut charger notre ressource appelant la méthode de chargement, en passant un argument de chaîne, un chemin de fichier. Au lieu d'accéder à une ressource de notre projet, nous voulons cette fois charger quelque chose depuis le système de l'utilisateur. Le chemin du fichier commence par une barre oblique de deux points de l'utilisateur. Le moteur Godo utilisera le raccourci pour trouver un emplacement approprié sur n'importe quel système pour enregistrer et charger des fichiers uniques à chaque utilisateur Nommons les paramètres du fichier et donnons-lui une extension RS pour ressource. Cette fonction de chargement renvoie une ressource que nous pouvons affecter à notre variable de paramètres. Avant de charger les paramètres, nous pouvons exécuter une fonction similaire pour vérifier d' abord si le fichier existe. Comme le chemin du fichier est maintenant écrit deux fois, nous allons également l'utiliser davantage, et c'est une valeur qui ne devrait jamais changer. Je serais plus efficace de le déclarer comme une constante. Si le fichier de paramètres n'existe pas, nous pouvons le créer. Et enregistrez-le immédiatement à l'aide de la classe d'économiseur de ressources, en appelant la méthode save La méthode de sauvegarde nécessite une ressource à enregistrer, qui est notre ressource de paramètres, et le chemin du fichier dans lequel l'enregistrer, qui est le chemin des paramètres. Maintenant, lors de l'exécution du jeu, si les paramètres existent pour l'utilisateur, ils seront chargés et sinon, ils seront créés. Mais nous devons également apporter quelques modifications au menu des paramètres. Tous nos paramètres doivent être définis sur les valeurs qui ont été chargées, est-à-dire sur la fonction « Prêt ». Nous avons défini la position initiale du curseur du réglage du volume à l'aide des nombres enregistrés dans la ressource de paramètres Mais nous devons également régler le volume du nœud musical et émettre le signal ici, comme nous l' avons fait ci-dessous en réponse à la modification de la valeur du curseur Lorsque le joueur ouvre le menu des paramètres, ajuste certains paramètres, il serait judicieux de les enregistrer lorsque le menu est fermé Nous pouvons remplacer notre méthode de fermeture des classes de menu. Ainsi, lorsque le menu des paramètres sera fermé, nous indiquerons au fichier de se charger automatiquement pour enregistrer les paramètres De retour dans le chargement automatique du fichier, nous pouvons ajouter la fonction qui enregistre les paramètres. La ressource de progression, en revanche, ne sera pas gérée dans la fonction Ready. Nous pouvons séparer chacune de ces méthodes en fonctions publiques permettant d'accéder à la ressource de progression de différentes manières. Vérifier s'il existe, démarrer un nouveau jeu et le charger. En utilisant le même format que nos paramètres, nous pouvons déclarer une constante de chemin de sauvegarde. La fonction safe file exists renverra un booléen renvoyant la même valeur renvoyée par le chargeur de ressources do Passer le chemin de sauvegarde en tant qu'argument. Création d'une nouvelle ressource de progression lorsqu'une nouvelle partie est appelée. Sauvegarde de la ressource lorsque le jeu sauvegardé est appelé et chargement de la ressource lorsque Load Game est appelé. Dans la scène titre, nous pouvons désormais facilement créer une nouvelle ressource de progression lorsque vous appuyez sur Nouveau jeu. Et chargez le fichier sécurisé existant si vous appuyez sur Continuer. Ce serait une bonne conception de l'interface utilisateur de désactiver le bouton de poursuite b et de ne l'activer que s'il existe un fichier sûr à charger. Faisons référence au bouton «   Continuer » en utilisant « Ajouter prêt ». Dans la fonction Ready, si un fichier sécurisé existe, nous pouvons activer le bouton Continuer en définissant sa propriété désactivée false, puis en lui demandant également de se concentrer. De cette façon, l'option par défaut sera « nouveau jeu » la première fois que le jeu sera joué et continuera à chaque fois par la suite. Il ne nous reste plus qu'à décider quand sauvegarder le jeu. Comme ce script de fichier est un nœud de chargement automatique, vous pouvez facilement appeler la fonction de sauvegarde pour le faire depuis le menu de pause ou depuis l' objet de sauvegarde de votre jeu. Je vais juste enregistrer automatiquement mon jeu chaque fois que le game manager décharge un niveau De retour dans le script du gestionnaire de titres, complétons également la fonction de sortie. Comme lorsque le jeu commence, nous pouvons attendre de passer au noir avant de sortir Quitter le jeu est une fonction intégrée de l'arbre des scènes, laquelle nous pouvons accéder avec get tree, et il suffit d'appeler la fonction Q. Dans nos scripts de ressources personnalisés, nous devrons ajouter une exportation au début de toutes les déclarations de variables que nous voulons écrire dans le fichier sécurisé. Toutes les variables que nous ne voulons pas enregistrer peuvent simplement omettre la balise d'exportation Si, par exemple, vous utilisez la méthode du point sûr commune aux JRPG, la variable enregistrée dans le fichier sécurisé sera un numéro d'identification associé au point sûr, qui sera donc exporté Mais les variables contenant le niveau actuel et ID de transition n'auraient pas besoin d'être enregistrées dans le fichier sécurisé, car elles ne sont pas nécessaires pour charger le jeu, mais sont tout de même nécessaires pour passer d'un niveau à l'autre. Ils n'auraient donc pas besoin d' être exportés dans ce cas. Dans mon jeu, je dois exporter ces variables, car je sauvegarde automatiquement mon jeu à chaque changement de niveau. Une dernière remarque concernant le script de chargement automatique des fichiers. En utilisant l'extension point RES, nous allons écrire un fichier sécurisé sous forme de fichier binaire, ce qui le rendra difficile pour l'utilisateur d'y accéder. En ajoutant un T, en créant l'extension TRes pour ressource de texte, nous écrirons le fichier sécurisé sous la forme d'un fichier texte commun, qui pourra être consulté et édité dans n'importe quel logiciel d'édition de texte. Les deux formats sont acceptables. Je vais enregistrer les paramètres sous forme de texte et la progression sous forme de fichier binaire. Essayons-le. En cours de jeu, le bouton Continuer est désactivé, mais nous pouvons démarrer une nouvelle partie. Dans la scène du jeu, je vais tomber sur un niveau différent, qui devrait sauver ma partie. En interrompant le jeu, je vais modifier certains paramètres du jeu. Quittez ensuite le jeu en revenant à la scène titre. Le bouton Continuer est maintenant actif, car le fichier sécurisé existe pour être chargé. Mais quittons d'abord le jeu, qui passe au noir et ferme la fenêtre de jeu Maintenant, je lance à nouveau le jeu. Cette fois, le bouton Continuer est activé, car notre fichier sécurisé persistait entre les sessions de jeu En continuant notre jeu actuel, nous commençons dans l'autre niveau, et les paramètres du jeu sont également les mêmes que ceux que nous avons laissés. R. Maintenant, examinons les fichiers qui ont été créés sur mon disque dur. Le fichier de paramètres peut être ouvert dans le bloc-notes. Nous pouvons voir clairement les variables exportées et leurs valeurs et même les modifier et enregistrer le fichier. Ensuite, ouvrons le fichier de sauvegarde contenant la progression des joueurs. La plupart de ces informations le sont. Même si nous devions modifier quelque chose et enregistrer le fichier, tenter de charger le fichier saf ferait planter le jeu car il n'est plus correctement formaté Lancez le jeu une fois de plus et vérifiez que notre fichier de paramètres, que nous avons modifié manuellement dans un bloc-notes, est chargé et que les valeurs sont correctes sauvegarde des ressources au format binaire est donc plus sûre et les ressources textuelles sont très faciles à modifier. À mon avis, il est souvent plus avantageux pour les développeurs de ND de pouvoir résoudre les problèmes de modification des fichiers de sauvegarde avec vos joueurs que de masquer les données de progression pour éviter de tricher Les joueurs progressent, enregistrent et chargent maintenant entre les sessions de jeu. Dans la leçon suivante, nous allons terminer par l'affichage des crédits du jeu. Je te verrai dans la prochaine leçon. 11. Crédits: Bonjour, mes amis. Dans la leçon précédente, nous avons enregistré et chargé la progression des joueurs. Dans cette leçon, nous allons afficher les crédits du jeu. Commençons par créer une nouvelle scène, la scène du crédit. Comme il ne s'agit généralement que d'un arrière-plan noir avec du texte blanc, je pense qu'un nœud d' interface utilisateur le plus logique en tant que nœud racine. Donnons un script à la note racine et appelons-le Credits Manager. Hériter de Scene Manager et le trier dans le dossier des scripts du gestionnaire Nous pouvons copier la note F de n'importe quelle autre scène et la coller dans la scène du crédit. Attribuez-le ensuite dans l'inspecteur, en ajoutant une piste musicale pour la scène de crédit. Dans le script du gestionnaire de titres, nous pouvons désormais définir le comportement du bouton des crédits dans le menu principal pour passer à la scène des crédits. Nous devons également enregistrer la scène de crédit dans le dossier des scènes. Ensuite, dans le script du gestionnaire de crédits, ajoutons une fonction qui revient à la scène titre. Dans la fonction de saisie. Nous pouvons vérifier si le joueur a appuyé sur un bouton spécifique. Je vais simplement réutiliser le bouton de saut, et si c'est le cas, revenir à la scène titre. Nos scènes sont désormais connectées et peuvent faire des allers-retours. La plupart des jeux encore en développement auront les crédits accessibles depuis le menu principal, car la fin du jeu n'est pas encore terminée. y aura donc aucun moyen d'accéder à la scène des crédits en terminant le jeu. L'inclusion de votre scène de crédit tout au long du développement de votre jeu permet également de suivre tous ceux qui contribué tout au long de son cycle de vie. En parlant de cela, les crédits ne sont généralement qu'une série d'étiquettes de texte organisées verticalement et défilant lentement vers Donc, en ajoutant un conteneur vertical à la scène, appelons-le scroll. Et ancrez-le au bas de l'écran. Mais avec le réglage large. Maintenant, les ancres gauches se trouvent en bas à gauche de l'écran et les ancres droites sont toutes deux en bas à droite de l' C'est généralement de là que proviendront les crédits. Les crédits sont souvent divisés en catégories ou en titres de poste, suivis d'une liste des noms des contributeurs de cette catégorie. Ainsi, dans notre boîte verticale contenant tous les crédits, nous pouvons ajouter d'autres cases verticales pour contenir chaque catégorie. C'est ce que j'appellerai un game design. À l'intérieur de la catégorie, il doit y avoir une étiquette pour le titre de la catégorie. Et je vais dire « game design ». Les crédits sont généralement alignés sur le centre. Je vais faire en sorte que la police soit blanche. Taille 64, et utilisez la plus sophistiquée de mes deux polices pour les titres des catégories Dupliquons cette étiquette non pour ajouter une autre étiquette à notre nom. Réduisez ensuite la taille de police et remplacez-la par une police mettant davantage l'accent sur la lisibilité Nous sommes désormais répertoriés en tant que game designer notre scène de crédit de jeux. Mais les crédits commencent dans la fenêtre de jeu. Ils devraient commencer en bas de l'écran. Revenons à la zone de défilement vertical et changeons ses préréglages d'ancrage en paramètres personnalisés Cela permettra de maintenir les ancres là où elles se trouvent, mais nous permettra de modifier chaque réglage individuellement Nous voulons que la direction de croissance de cet élément de contrôle descende, et non vers le haut, en modifiant le réglage de haut en bas. Réduisons et dupliquons la catégorie game design pour créer notre prochaine catégorie, le développement de jeux. Comme tous les paramètres sont dupliqués, il suffit de modifier les noms des nœuds et les propriétés de texte des nœuds d'étiquette, et d'ajouter des noms supplémentaires à chaque catégorie selon les besoins Et répétez ce processus pour continuer à ajouter autant de catégories que nécessaire pour votre jeu afin de vous assurer que toutes les personnes impliquées soient créditées. Je vais également rendre hommage à l'artiste qui a créé les modèles de personnages, les animations et les modèles d'environnement, K Laberg Penzila, qui a créé les éléments de l'interface utilisateur, et Eric the Funny Baron, qui a produit toute la musique Enfin, terminez par un message de remerciement au joueur. Je vais également agrandir le message de remerciement. Nos crédits sont tous là, mais ils sont tous serrés et difficiles à lire Ajoutons une certaine séparation au conteneur vertical pour séparer les catégories. Je vais placer chaque catégorie à 256 pixels l'une de l'autre pour leur donner beaucoup d'espace. Et nous pouvons constater que le scroll des crédits deviendra très long très rapidement. La dernière chose que je veux faire est de m'assurer que le message de remerciement s'affiche tout seul à la fin. Je vais donc lui donner une valeur y de taille minimale personnalisée correspondant au paramètre de taille de fenêtre de mon jeu, 720 pixels, et centrer le texte verticalement dans cet espace en utilisant la propriété d' alignement vertical des étiquettes. De retour dans le script du gestionnaire de crédits, exportons une variable pour la vitesse de défilement et donnons-lui une valeur par défaut d'environ 32 pixels par seconde. Et saisissez une référence au parchemin en utilisant Add on Ready. Ensuite, dans la fonction de traitement, qui prend Delta comme paramètre flottant représentant les secondes écoulées depuis la dernière image, modifiez la position y du défilement en soustrayant la vitesse multipliée Car lorsque vous travaillez en deux dimensions, zéro se trouve en haut de l'écran, et déplacer quelque chose vers le haut se déplace dans le sens négatif. Nous devons ensuite arrêter le défilement une fois que le message de remerciement atteint l' En regardant dans notre vue en deux D, en sélectionnant le parchemin et en exposant la valeur de la position de transformation dans l'inspecteur, nous pouvons déplacer le parchemin vers le haut jusqu'à ce qu'il atteigne la position souhaitée, où seul le message de remerciement est affiché. En regardant la transformation dans l' inspecteur, nous pouvons constater que la position y du parchemin est désormais égale à la partie y de la taille, mais qu'il s'agit d'un nombre négatif augmenté de la hauteur de l'écran 720. De retour dans le script, nous pouvons vérifier si la position y du parchemin a dépassé cette valeur. Vérifiez si elle est inférieure à la valeur négative du point y plus la hauteur de la fenêtre de 720 pixels Nous pouvons être encore plus précis avec ce calcul en accédant à la classe singleton du serveur d'affichage et en lui demandant la taille de fenêtre actuelle, puis en accédant à la valeur y. Si cela est vrai, la fin du parchemin est atteinte et le message de remerciement est au centre de l'écran. À ce stade, nous aimerions que le défilement cesse de défiler Créons une variable booléenne appelée, qui sera définie par défaut Nous pouvons ensuite le définir sur true lorsque le parchemin répond à cette condition et également définir la position y pour qu'elle corresponde exactement à cette valeur afin qu'il soit parfaitement centré au cas où il dépasserait le repère Comme nous effectuons ce calcul deux fois, changeons-le en variable et calculons-le en utilisant Add on ready. Ensuite, en haut de la fonction de traitement, nous pouvons vérifier si le défilement est à la fin, et si c'est le cas, revenir, empêchant ainsi le comportement de défilement de Cela fonctionne, mais au lieu de simplement sortir lorsque le joueur appuie sur le bouton de saut, je préférerais avoir la vitesse de défilement et ne revenir à l'écran titre qu'à la fin du Dans la fonction de saisie, si le joueur appuie sur le bouton de saut, vérifie également si la fin du parchemin est atteinte avant de passer à la scène titre. exportant deux nouvelles variables, appelons-les vitesse lente et rapide, toutes deux sous forme de flottants avec des valeurs par défaut de 32 et 512 pixels par seconde La vitesse de défilement réelle n'a plus besoin d'être exportée, mais réglons-la sur la vitesse lente à l' aide de la fonction Add-on Nous pouvons ensuite régler la vitesse de défilement sur la vitesse rapide si le joueur appuie sur le bouton de saut avant que le parchemin n'ait atteint sa fin. Et réglez-le sur une vitesse lente s' ils relâchent le bouton. R Essayons-le. En cliquant sur le bouton des crédits, vous passez à la scène des crédits. Les crédits commencent à défiler lentement vers le haut à partir du bas de l'écran Mais nous pouvons l'accélérer en maintenant le bouton de saut enfoncé. Une fois le message de remerciement atteint, le jeu attendra une nouvelle pression sur le bouton Jump pour revenir à la scène titre. Et c'est tout pour l' essentiel du développement de jeux. Vous avez maintenant un projet de squelette entièrement fonctionnel qui pourrait être utilisé pour développer un jeu de n'importe quel genre. 12. Quoi faire ensuite ?: Bienvenue dans mon cours sur les systèmes de dialogue et d'événements à Gado Ce cours est une suite des bases du développement de jeu dans Gado, mais il peut être suivi et appliqué à tout projet impliquant un personnage que le joueur peut contrôler pour interagir avec des PNJ ou des objets en appuyant sur un bouton et en affichant un Vous pouvez rejoindre notre serveur Discord pour travailler sur ce cours aux côtés de vos pairs Dans ce cours, nous aborderons la création de boîtes de dialogue, d'événements et d'interactions. Associez-les ensuite à l' aide d'indicateurs de progression, commandes de caméra et d'animations de personnages. Lorsque vous aurez terminé, vous disposerez d'un système complet de dialogues et d'événements pour votre jeu, qui pourra être utilisé pour produire des cinématiques de haute qualité et des récits complexes qui réagissent aux choix des joueurs et leur permettent de progresser dans le Vous acquerrez également des compétences utiles pour travailler avec le moteur de jeu Gada, organiser et concevoir vos projets de manière à ce qu'ils soient plus évolutifs Vous apprendrez à coder avec le script GD avec tout expliqué en détail Nous appliquerons les principes de conception orientés objet dans nos scripts, héritage, l'encapsulation et l'abstraction, ainsi que d'autres modèles de conception de génie logiciel tels que le modèle Singleton et le modèle composite, afin de les organiser, personnaliser et de les réutiliser pour un projet de toute taille Tous les fichiers du projet sont également disponibles sur Github, si vous devez revoir le projet tel qu' il était après avoir terminé chaque leçon Ces vidéos ont été enregistrées avec la version 4.2 0.2 de Gadot. Le projet commence avec des ressources provenant des packs remasterisés de personnages et de donjons de K Kits créés par K L auberg et du bundle Guy de base Tous sont téléchargeables gratuitement sur point IO.