Dans cette série de tutoriels, vous avez utilisé la conception de niveau et les mécaniques de jeu pour créer une expérience de jeu pour vos joueurs. Les énigmes, les clés et les portes que vous avez créées font toutes partie d'une boucle de gameplay.
Une boucle de gameplay est une série d'actions que le joueur répète et qui constituent le cœur de votre jeu.
Vous devez maintenant boucler la boucle pour le niveau que vous avez construit. Dans ce tutoriel, vous allez créer un écran de victoire pour indiquer au joueur qu'il a terminé le niveau actuel. Vous allez également créer un point de transition pour vérifier la condition de victoire et faire passer le joueur au niveau suivant.
Une fois votre niveau terminé, vous analyserez des moyens d'approfondir tout ce que vous avez appris dans ce cours.
Une condition de victoire est un objectif que le joueur doit remplir pour terminer une tâche, une quête, un niveau ou un jeu. Votre boucle de jeu doit fournir les moyens de remplir cette condition de victoire. Les jeux non linéaires peuvent comporter plusieurs conditions de victoire.
Avant de commencer
Dans ce tutoriel, nous supposons que vous maîtrisez les sujets suivants, abordés dans les sections précédentes de la page Concevoir une aventure de type énigme :
Blueprints de widget
Blueprints ;
Variables
Volume de collision
Mode Play in Editor
Ressources parentes et enfants
Vous aurez besoin des ressources suivantes de la page Pièges et dégâts :
Blueprint de widget
WBP_EliminatedScreenClasse de blueprint
BP_KeyÉnumération
Enum_KeyType
Créer la fin du niveau
Même si vous avez terminé la conception du gameplay principal de votre niveau, le point de transition est une bonne occasion d'offrir aux joueurs un moyen intéressant de terminer votre niveau. Dans ce cas, vous allez créer un tremplin pour propulser les joueurs sur une plateforme surélevée. Vous placerez ensuite le point de transition de niveau sur la plateforme.
Créer une plateforme
Pour créer une plateforme surélevée dans l'une de vos salles, utilisez les maillages statiques SM_Cube et SM_Cylinder dans le dossier LevelPrototyping > Maillages.
Dans l'exemple de niveau de ce tutoriel, nous utilisons une plateforme carrée de 3,5 m avec quatre colonnes semblables à ceci :
Si vous souhaitez copier ces éléments d'exemple dans votre niveau, copiez l'extrait ci-dessous. Si vous avez suivi le niveau de l'exemple, ces formes apparaissent dans le coin arrière de la pièce 3. Vous pouvez les déplacer à votre guise.
Pour copier la plateforme, procédez comme suit :
Cliquez sur Copier l'extrait complet.
Command LineBegin Map Begin Level Begin Actor Class=/Script/Engine.StaticMeshActor Name=StaticMeshActor_785 Archetype="/Script/Engine.StaticMeshActor'/Script/Engine.Default__StaticMeshActor'" ExportPath="/Script/Engine.StaticMeshActor'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.StaticMeshActor_785'" Begin Object Class=/Script/Engine.StaticMeshComponent Name="StaticMeshComponent0" Archetype="/Script/Engine.StaticMeshComponent'/Script/Engine.Default__StaticMeshActor:StaticMeshComponent0'" ExportPath="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.StaticMeshActor_785.StaticMeshComponent0'" End Object Begin Object Name="StaticMeshComponent0" ExportPath="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.StaticMeshActor_785.StaticMeshComponent0'" StaticMesh="/Script/Engine.StaticMesh'/Game/LevelPrototyping/Meshes/SM_Cylinder.SM_Cylinder'" StaticMeshImportVersion=1 bUseDefaultCollision=False StaticMeshDerivedDataKey="STATICMESH_FD1BFC73B5510AD60DFC65F62C1E933E_228332BAE0224DD294E232B87D83948FQuadricMeshReduction_V2$2e1_6D3AF6A2$2d5FD0$2d469B$2dB0D8$2dB6D9979EE5D2_CONSTRAINED0_100100000000000000000000000100000000000080FFFFFFFFFFFFFFFFFFFFFFFF000000000000803F00000000000000803F0000803F00000000000000003D19FC1626C9B2485E57DB4B8EC731318B8215AE8D46FAD400000000010000000100000000000000010000000100000000000000000000000100000001000000400000000000000001000000000000000000F03F000000000000F03F000000000000F03F0000803F00000000050000004E6F6E65000C00000030000000803FFFFFFFFF0000803FFFFFFFFF0000000000000041000000000000A0420303030000000000000000_RT00_0"Dans l'Unreal Editor, assurez-vous que le hublot ou l'organiseur est le panneau actif et appuyez sur Ctrl + V.
Vous allez ensuite ajouter un tremplin qui propulse le joueur sur la plateforme.
Utiliser le tremplin
Vous pouvez créer un tremplin de toutes pièces, mais cela risque de prendre du temps. Dans un environnement de développement, où le temps est limité, il peut s'avérer utile d'importer des ressources préfabriquées plutôt que de créer les vôtres. Choisir des éléments préfabriqués qui correspondent au style visuel de votre jeu peut accélérer le développement sans pour autant se démarquer.
Dans ce tutoriel, vous utiliserez une ressource fournie dans le modèle à la première personne BP_JumpPad.
Pour intégrer BP_JumpPad, procédez comme suit :
Dans le navigateur de contenu, accédez à LevelPrototyping > Interactif > Tremplin.
Faites glisser une instance de
BP_JumpPaddans votre niveau, devant la plateforme. Pour utiliser la même position que dans ce tutoriel, définissez l'option Emplacement deBP_JumpPadsur1 790,-1 460,10.
Votre niveau doit maintenant ressembler à ceci :
Testez maintenant votre travail. Vérifiez que l'option Vitesse maximale de BP_Enemy est définie sur 0. Ainsi, aucun ennemi ne se déplacera pendant le test.
Faites un clic droit dans le hublot et sélectionnez Jouer à partir d'ici pour tester votre niveau depuis votre emplacement actuel. Montez sur le tremplin et essayez d'atteindre la plateforme.
Notez que même avec l'aide du tremplin, votre personnage ne peut pas atteindre la plateforme. Vous pouvez résoudre ce problème en ajustant le paramètre Vitesse du tremplin.
À l'instar des nombreuses variables modifiables que vous avez créées dans vos blueprints, le paramètre Vitesse est une variable prédéfinie et modifiable pour la ressource de tremplin.
Procédez comme suit pour ajuster la vitesse :
Sélectionnez
BP_JumpPaddans le hublot.Dans le panneau Détails, définissez l'option Vitesse (Z) sur
1 000.
Retestez votre niveau. Vous devriez désormais pouvoir sauter sur la plateforme.
Vous allez maintenant créer un écran de victoire qui s'affiche lorsque le joueur termine le niveau.
Créer un écran de victoire
Utilisez pour cela un blueprint de widget, similaire à l'écran de fin de partie WBP_EliminatedScreen que vous avez créé dans le tutoriel Pièges et dégâts. Étant donné que ces deux écrans sont similaires, vous allez utiliser WBP_EliminatedScreen comme point de départ.
Pour créer un écran de victoire en dupliquant votre écran de fin de partie, procédez comme suit :
Dans le navigateur de contenu, accédez à AdventureGame > Concepteur > Blueprints > Widgets.
Faites un clic droit sur
WBP_EliminatedScreenet cliquez sur Dupliquer.Nommez le nouveau blueprint de widget
WBP_WinScreenet double-cliquez dessus pour l'ouvrir dans l'éditeur de widget. Votre dossier Widgets doit maintenant ressembler à ceci :Pour modifier le message, cliquez sur le widget Texte dans la hiérarchie.
Dans le panneau Détails, accédez à l'en-tête Contenu en regard de Texte, puis tapez
Niveau terminé ! …Chargement du niveau suivant.dans le champ de texte.Sous l'en-tête Apparence, en regard de Couleur et de Opacité, cliquez sur le nuancier. Choisissez une couleur ou définissez la valeur sRVB hexadécimal sur
FFE000FFpour suivre le tutoriel.Le texte de l'écran de victoire étant plus court, vous pouvez augmenter sa taille pour remplir l'écran. Sous l'en-tête Police, définissez l'option Taille sur
72ou sur une taille qui vous semble la plus lisible.Enregistrez, compilez et fermez l'éditeur de widget.
Vous allez ensuite créer un point de transition entre les niveaux.
Créer une transition de niveau
Une transition de niveau permet de charger le niveau suivant. Vous pouvez déclencher une transition de niveau de différentes façons : lorsque le joueur termine une scène cinématique, ramasse un objet ou atteint la fin d'un niveau.
Dans ce tutoriel, la transition de niveau est un blueprint qui se déclenche lorsque deux événements se produisent :
Le joueur chevauche la transition de niveau.
La condition de victoire est remplie.
Pour créer un nouveau blueprint, procédez comme suit :
Dans le navigateur de contenu, sélectionnez AdventureGame > Concepteur > Blueprints.
Faites un clic droit et sélectionnez Nouveau dossier. Nommez ce dossier
LevelTransition.Faites un clic droit sur le dossier de transition de niveau, puis sélectionnez Classe de blueprint pour créer un nouveau blueprint.
Sélectionnez Acteur comme classe parente.
Nommez ce nouveau blueprint
BP_LevelTransitionet double-cliquez dessus pour l'ouvrir dans l'éditeur de blueprint.
Votre dossier de transition de niveau doit maintenant ressembler à ceci :
Comme dans le cas des autres blueprints que vous avez créés, votre transition de niveau nécessite les éléments suivants :
Un maillage statique que le joueur peut voir au moment de l'exécution.
Une forme de collision qui détecte quand le joueur entre en collision avec elle.
La logique qui sous-tend l'interaction.
Commencez par créer le maillage et la collision de boîte, puis passez à la logique.
Pour créer un maillage statique et une forme de collision, procédez comme suit :
Dans l'onglet Composants de
BP_LevelTransition, cliquez sur le bouton Ajouter et recherchezcubepour créer un nouveau maillage statique.Nommez ce maillage statique
TransitionPoint.Après avoir sélectionné TransitionPoint, dans le panneau Détails, définissez l'option Échelle sur
3,0,3,0,0,1. Sa taille est adaptée à la plateforme finale de l'exemple de niveau ; vous pouvez redimensionner la vôtre pour qu'elle s'adapte au mieux à votre niveau.Dans l'onglet Composants, sélectionnez DefaultSceneRoot. Cliquez sur le bouton Ajouter et recherchez
collision de boîtepour créer une forme de collision.Nommez la collision de boîte
LevelTrigger.Après avoir sélectionné LevelTrigger, dans le panneau Détails, définissez son paramètre Échelle sur
4,0,4,0,2,0. Définissez son emplacement Z sur55,0.Si la forme de collision de boîte est incorrecte, assurez-vous qu'il ne s'agit pas d'un enfant de TransitionPoint.
Enregistrez et compilez le blueprint.
Créer avec une logique
BP_LevelTransition doit effectuer cinq actions dans l'ordre suivant :
Vérifier le chevauchement.
Vérifier la condition de victoire.
Désactiver les entrées du joueur.
Afficher l'écran de victoire.
Charger le niveau suivant.
Vous allez désormais créer la logique qui sous-tend ces interactions.
Vérifier le chevauchement
Pour créer une logique qui contrôle le chevauchement, procédez comme suit :
Dans l'onglet MyBlueprint de
BP_LevelTransition, dans la section Variables, cliquez sur le bouton + pour créer une nouvelle variable et nommez-laOtherActor.Définissez le type de broche sur Acteur (Référence d'objet).
Dans le graphique d'événements, supprimez les trois nœuds d'événement existants. Vous n'en aurez pas besoin.
Dans l'onglet Composants, faites un clic droit sur LevelTrigger et cliquez sur Ajouter un événement > Ajouter OnComponentBeginOverlap. Cette fonction vérifie quand un objet chevauche la forme de collision.
Faites glisser la broche d'exécution et créez un nœud Set Other Actor.
Connectez les deux broches Autre acteur.
Vous allez ensuite créer une logique qui vérifie la condition de victoire.
Vérifier la condition de victoire
Dans ce tutoriel, la condition de victoire consiste à collecter les trois clés. La raison pour laquelle cette condition particulière a été choisie est d'anticiper et d'empêcher les actions des joueurs susceptibles de perturber le jeu.
Par exemple, si la condition de victoire était que "le joueur chevauche la transition de niveau" et qu'un joueur trouvait un moyen de passer par-dessus les murs de la pièce, il pourrait contourner l'ensemble de votre niveau. En utilisant les clés comme condition de victoire, le joueur doit terminer sa boucle de jeu, même s'il trouve un moyen de franchir les murs et les portes.
S'il est impossible de prévoir tous les bogues, une conception anticipée peut empêcher les joueurs de perturber votre jeu.
Pour créer une matrice en vue d'y stocker les données de clés, procédez comme suit :
Dans l'onglet MyBlueprint de
BP_LevelTransition, cliquez sur le bouton + pour créer une nouvelle variable et nommez-laHeldKeys.Définissez le type de broche sur Type de clé d'énumération et le type du conteneur sur Matrice.
Faites glisser la broche d'exécution du nœud Set, puis créez fnBPIGetKeys.
Faites glisser la broche Cible et créez le nœud Get Other Actor.
Faites glisser la broche d'exécution de fnBPIGetKeys, puis créez le nœud Set Held Keys.
Connectez les deux broches de la matrice Held Keys.
Pour créer un type de clé d'énumération afin de définir une condition de victoire, procédez comme suit :
Créez une variable et nommez-la
RequiredKeys. Il s'agit de la condition de victoire.Assurez-vous que la broche est de type Type de clé d'énumération et que le conteneur est de type Matrice.
Dans le panneau Détails, activez l'option Instance modifiable et définissez la catégorie sur
Configuration.Compilez le blueprint pour accéder à la valeur par défaut. Cliquez sur le bouton + pour ajouter trois nouveaux éléments à la matrice.
Cliquez sur les menus déroulants d'index et définissez les index sur Jaune, Bleu et Rouge.
Vous allez créer une variable booléenne pour vérifier si la condition est remplie ou non. Un nœud For Each Loop with Break examine la matrice HeldKeys pour vérifier chaque clé et interrompre la logique s'il en manque une.
Pour créer une logique qui recherche les clés manquantes, procédez comme suit :
Créez une variable et nommez-la
FoundAllKeys.Définissez le type de broche sur Booléen et le type du conteneur sur Unique.
Faites glisser la broche d'exécution de SetHeldKeys et créez un nœud For Each Loop with Break.
Faites glisser la broche Matrice de For Each Loop, puis créez un nœud Get Required Keys.
Faites glisser la broche Corps de boucle de la boucle, puis créez un nœud Branch.
Faites glisser la broche Condition, puis créez un nœud Contains Item (Array).
Faites glisser la broche Matrice cible du nœud Contains, puis créez un nœud Get Held Keys.
Reliez la broche Objet à trouver du nœud Condition à la broche Élément de matrice du nœud Loop.
Faites glisser la broche True du nœud Branch, puis créez le nœud Set Found All Keys. Cliquez sur la case en regard de FoundAllKeys pour la définir sur true.
Faites glisser la broche False du nœud Branch, puis créez un nœud Set Found All Keys. Laissez la case vide et reliez la broche d'exécution à la broche Interrompre du nœud For Each Loop.
Il vous reste trois étapes à effectuer dans la séquence que nous avons examinée précédemment, mais uniquement si le joueur possède toutes les clés :
Désactiver les entrées du joueur.
Afficher l'écran de victoire.
Charger le niveau suivant.
Pour utiliser le résultat FoundAllKeys en vue de lancer une séquence de logique, procédez comme suit :
Faites glisser la broche Terminé du nœud For Each Loop, puis créez un nœud Branch.
Faites glisser la broche Condition, puis créez un nœud Get FoundAllKeys.
Faites glisser la broche True du nœud Branch et créez un nœud Sequence.
Étant donné que vous devez créer trois actions dans cette séquence, cliquez sur le bouton Ajouter une broche.
Passez à l'étape suivante de la séquence pour désactiver les entrées du joueur.
Désactiver les entrées du joueur
Lorsqu'un écran de victoire s'affiche, vous devez désactiver les entrées du joueur pour l'empêcher de se déplacer et de subir des dégâts involontaires.
Pour désactiver les entrées du joueur, procédez comme suit :
Faites glisser la broche Transformation 0 du nœud Sequence et créez un nœud Disable Input.
Depuis la broche Cible du nœud Disable Input, créez un nœud Get Other Actor.
Faites glisser la broche Contrôleur de joueur et créez un nœud Get Player Controller.
Vous allez ensuite créer une logique pour afficher l'écran de victoire.
Afficher l'écran de victoire
Pour afficher votre widget WBP_Winscreen, procédez comme suit :
Faites glisser la broche Transformation 1 du nœud Sequence et créez un nœud Create Widget.
Définissez la classe sur WBP_WinScreen.
Faites glisser la broche d'exécution du nœud Create Widget, puis créez un nœud Add to Viewport.
Reliez la broche Valeur de retour du nœud Create Widget à la broche Cible du nœud Add to Viewport.
Cette logique entraîne un problème ? À ce stade, vous pouvez continuer et créer l'étape finale sans résoudre le problème. Vous testerez ultérieurement le niveau pour identifier le problème et trouver une solution.
Charger le niveau suivant
Dans ce tutoriel, vous utiliserez votre niveau actuel comme espace réservé pour le niveau suivant. Lorsque vous concevez votre propre jeu, cette étape doit permettre aux joueurs de passer au niveau suivant.
Pour créer une logique qui charge le niveau actuel, procédez comme suit :
Faites glisser la broche Then 2 du nœud Sequence, puis créez un nœud Open Level (by Object Reference).
Faites glisser la broche Niveau du nœud Open Level et recherchez Promouvoir vers la variable. Une variable de type monde est ainsi créée.
Vous pouvez également créer cette variable à partir de l'onglet MyBlueprints, mais le type de broche Monde peut être difficile à trouver.
Une fois la variable Monde sélectionnée, dans le panneau Détails, renommez-la
Niveau suivant.Ajoutez-la à la catégorie Configuration et activez l'option Instance modifiable.
Compilez votre blueprint pour pouvoir accéder à la valeur par défaut de la variable et définir le niveau que vous souhaitez charger. Si vous suivez ce tutoriel, choisissez
Lvl_Adventurepour jouer le niveau en boucle.Enregistrez et compilez le blueprint.
Testez maintenant votre travail. Faites glisser une instance de BP_LevelTransition sur la plateforme surélevée. Ensuite, donnez-vous facilement accès aux clés pour remplir les conditions de victoire. Pour ce faire, vous pouvez placer dans la même pièce les instances des clés jaune, bleue et rouge créées à la rubrique Créer une clé.
Votre niveau doit maintenant ressembler à ceci :
Faites un clic droit dans le hublot et sélectionnez Jouer à partir d'ici pour tester votre niveau depuis votre emplacement actuel. Si vous sautez sur la plateforme et activez la transition de niveau, vous constatez que l'écran se fige et que le niveau suivant s'ouvre sans que le joueur ait le temps de lire le message de victoire.
Vous allez résoudre ce problème dans la prochaine section.
Créer un délai
Dans ce tutoriel, nous utilisons la fonction Ouvrir un niveau pour fermer le niveau actuel et ouvrir le niveau suivant en tant que nouvelle instance de jeu. Pendant le chargement, le jeu se fige après l'activation de la fonction Ouvrir un niveau. Selon le système qu'utilise le joueur, ce phénomène peut être trop court (pour lire l'écran de victoire) ou trop long (comme s'il s'agissait d'un plantage).
De nombreux jeux, même ceux qui utilisent le chargement de niveau en temps réel, font appel aux écrans de chargement pour indiquer au joueur que le jeu fonctionne correctement et qu'il doit attendre. Les écrans de chargement permettent aussi de résoudre un autre problème : des temps d'attente longs, fréquents ou ennuyeux peuvent rompre l'immersion et générer de la frustration. Les écrans de chargement incluent généralement des conseils, des animations ou du son pour retenir l'attention du joueur lorsqu'il n'est pas en train de jouer.
Pour résoudre ce problème de conception technique, il vous suffit de créer un délai intentionnel qui permet d'obtenir les résultats suivants :
Harmoniser les délais de chargement pour tous les joueurs.
S'assurer que le joueur a suffisamment de temps pour lire l'écran de victoire.
Dévier l'attention du joueur sur un contenu à regarder pendant le chargement.
Pour insérer un délai, procédez comme suit :
Ouvrez
BP_LevelTransition. Dans l'onglet MyBlueprint, cliquez sur le bouton + pour ajouter une nouvelle variable et nommez-laLevelLoadDelay.Choisissez le type de broche Float.
Dans le panneau Détails, activez l'option Instance modifiable et définissez la catégorie sur Configuration.
Compilez le blueprint pour accéder à la valeur par défaut. L'option Délai de chargement du niveau définit la durée souhaitée pour le délai. Pour suivre le tutoriel, définissez-la sur
5,0secondes.Dans le graphique d'événements, accédez au nœud Sequence. Pour insérer un délai, faites glisser la broche Then 2 et créez un nœud Delay.
Faites glisser la broche Durée et créez un nœud Get LevelLoadDelay.
Enregistrez, compilez et fermez votre blueprint.
Le graphique d'événements de votre BP_LevelTransition final doit ressembler à ceci :
Retestez votre niveau. Lorsque vous chevauchez le point de transition de niveau, l'écran de victoire doit s'afficher, l'arrière-plan doit devenir flou et les entrées du joueur doivent être désactivées pendant cinq secondes avant que votre personnage joueur apparaisse dans le niveau suivant.
Avant de tester votre niveau pour la dernière fois, n'oubliez pas de retirer les clés de la salle 3 et de rétablir la vitesse maximale du BP_Enemy sur 200.
Du concept à la création
Comparons l'ébauche de niveau que nous avons créée dans la rubrique Configuration du projet et ébauche de niveau au niveau final. Depuis sa conception initiale, notre conception de niveau et notre boucle de gameplay ont été modifiées pour résoudre les bogues, créer de nouvelles fonctionnalités ou trouver une solution temporaire aux limitations que les testeurs ont découvertes pendant la phase de développement.
Pour rester flexible lorsque des contraintes ou de nouvelles fonctionnalités modifient le cours du développement de votre jeu, vous devez créer une ébauche de votre niveau, adopter une approche modulaire, résoudre les problèmes de conception technique et organiser vos ressources.
Grâce à ce cours, vous êtes passé du concept à une démonstration jouable. Vous disposez désormais des blocs de construction nécessaires pour concevoir de nombreux niveaux. Vous pouvez combiner des interrupteurs, des pièges, des clés, des portes et des ennemis de façon illimitée pour créer de nouvelles boucles de gameplay selon votre propre style. Une fois les niveaux reliés entre eux, chaque niveau fait partie d'un projet beaucoup plus vaste pour créer un jeu complet.
Exemple de projet
Vous trouverez ci-dessous un lien de téléchargement du projet final que vous pouvez créer grâce à cette série de tutoriels. Vous pouvez utiliser cet exemple de projet pour voir à quoi pourrait ressembler votre projet final ou comme références pour voir comment nous avons créé et conçu le projet.
(Taille du téléchargement : 75 Mo)
Pour ouvrir le projet, décompressez le fichier et déplacez le dossier adventuredesigner dans le répertoire Projets Unreal (par défaut, celui-ci se trouve à l'emplacement suivant : C:\Utilisateurs\Nom d'utilisateur\Documents\Projets Unreal).
Suivant
Pour continuer à travailler sur votre niveau en ajoutant des matériaux, de l'éclairage, des effets de post-traitement, des sons et des effets visuels, consultez la série de tutoriels Parcours Concepteur :
Art Pass for a Puzzle Adventure Game
Learn how you can apply art workflows with materials, sounds, and visual effects to the Puzzle Adventure game.
Si vous souhaitez en savoir plus sur la création d'un autre blueprint, poursuivez ce module de la série de tutoriels Parcours Concepteur :
Bonus : faire apparaître de nouveaux cubes
Ajoutez une nouvelle mécanique à votre jeu d'aventure et d'énigme avec des acteurs BP_Cube qui apparaissent jusqu'à une limite définie.
Si vous souhaitez empaqueter votre projet en tant que programme autonome pour le tester et le partager, consultez la page suivante :
Empaquetage des projets Unreal Engine
Empaqueter les projets de jeu Unreal Engine pour la distribution.