Avant de commencer
Assurez-vous d'avoir effectué les étapes suivantes :
Installer l'Unreal Engine et configurer Visual Studio pour l'Unreal Engine.
Apprendre ce que sont des projets, des acteurs et comment naviguer dans l'Unreal Editor
Commencer à partir d'un modèle
Ce tutoriel débute avec un projet blueprints contenant des exemples de ressources. Vous ajouterez progressivement du code qui reproduit et enrichit les fonctionnalités existantes des blueprints. Vous apprendrez ainsi à créer de nouvelles classes dans un projet C++ vierge tout en utilisant les blueprints comme référence.
Pour créer un projet de jeu à partir d'un modèle, suivez les étapes ci-dessous :
Ouvrez l'Unreal Engine. Dans le navigateur de projets Unreal, accédez à la catégorie de projet Games et sélectionnez le modèle First Person.
Dans Project Defaults, conservez le type de projet défini sur Blueprints. Cela signifie que l'Unreal Engine crée un projet avec des ressources par défaut de type blueprints au lieu de ressources C++.
Pour Variant, sélectionnez Arena Shooter.
Nommez votre projet. Ce tutoriel utilise
AdventureGamecomme nom du projet.Cliquez sur Create pour ouvrir votre nouveau projet dans l'éditeur.
Vérifier les commandes avancées
Avec le système de commandes avancé, vous pouvez contrôler les déplacements d'un personnage en créant des actions de commande personnalisées qui définissent les actions que le personnage peut effectuer, comme le saut ou l'accroupissement. Chaque action de commande existe en tant que ressource de données à laquelle vous pouvez faire référence dans le code pour communiquer entre votre code et votre personnage.
Plus tard dans ce tutoriel, vous combinerez des actions de commande et du code pour permettre à votre personnage de se déplacer et de regarder autour de lui.
Le système de commandes avancé doit déjà être activé dans votre projet. Pour vérifier ce point, procédez comme suit :
Dans le menu principal de l'Unreal Editor, accédez au menu Edit et sélectionnez Plugins.
Recherchez Enhanced Input. Le plug-in devrait être installé et activé.
Pour plus d'informations sur le système de commandes avancé et les actions de commandes, consultez Commandes avancées.
Créer une classe de mode de jeu en C++
Votre projet blueprint ne contient aucun fichier C++ ou projet Visual Studio (VS) sur lequel travailler. Vous allez maintenant créer votre première classe et introduire le C++ dans votre projet. Pour commencer, créez une classe de mode de jeu personnalisée, qui indique à l'Unreal Engine de générer le projet Visual Studio et les fichiers dont vous avez besoin pour coder. Votre classe personnalisée est dérivée de la classe parente AGameModeBase.
Les ressources de mode de jeu définissent les règles d'un jeu, les conditions de victoire et les personnages utilisés. Le mode de jeu définit également les classes de framework de jeu par défaut utilisées par votre projet, notamment le pion, le ContrôleurDeJoueur et l'ATH. Plus tard dans ce tutoriel, vous utiliserez votre mode de jeu pour modifier le personnage joueur par défaut.
Pour créer une nouvelle classe C++ de mode de jeu, suivez les étapes ci-dessous :
Dans le menu principal de l'Unreal Editor, accédez à Tools > New C++ Class.
Dans la fenêtre Choose Parent Class, cherchez et sélectionnez Game Mode Base, puis cliquez sur Next.
Saisissez un nom pour la nouvelle classe, puis cliquez sur Create Class. Ce tutoriel utilise
AdventureGameMode.Deux messages d'avertissement s'affichent pour vous indiquer que vous devez créer ou compiler votre projet depuis VS au moins une fois avant que les classes C++ n'apparaissent dans le navigateur de contenu. Cliquez sur OK, puis cliquez sur Yes au deuxième avertissement pour ouvrir votre code.
Créer votre projet
Avant d'ajouter du code, terminez de préparer votre environnement en générant votre projet dans VS et en actualisant l'Unreal Editor.
Ouvrir le projet dans Visual Studio
Si le moteur ne vous a pas automatiquement invité à ouvrir votre projet dans VS après avoir créé la classe de mode de jeu, dans le menu principal de l'Unreal Editor, accédez à Tools et sélectionnez Open Visual Studio.
Vous pouvez aussi rechercher le fichier .sln de votre projet dans /Documents/Unreal Projects/[NomProjet] par défaut.
L'Unreal Engine suit les modifications que vous apportez à votre projet, comme l'ajout de nouvelles classes, de modules, de plug-ins ou la modification des paramètres de compilation. Toutefois, les fichiers du projet VS ne reflètent pas automatiquement ces mises à jour. Utilisez Refresh Visual Studio Project (également dans le menu Tools ) pour regénérer la solution et les fichiers du projet en fonction de l'état actuel du projet pour que tout soit à jour.
Quand vous ouvrez Visual Studio, les fichiers de votre projet sont organisés dans l'explorateur de solutions.
Lorsque vous ouvrez votre premier projet C++ Unreal Engine dans Visual Studio, il se peut qu'un avertissement concernant des composants manquants apparaisse dans l'explorateur de solutions. Cliquez sur Install pour permettre à VS d'installer des composants supplémentaires qui pourraient s'avérer utiles dans votre projet.
Dans l'explorateur de solutions, développez Games > [NomProjet] > Source > [NomProjet]. C'est ici que se trouvent les fichiers principaux de votre jeu, dont deux fichiers correspondant à votre nouveau mode de jeu, [NomModeJeu].cpp et [GameModeName].h.
Générer le projet et actualiser l'Unreal Editor
Pour que l'Unreal Editor reconnaisse votre projet de code et affiche vos classes C++ dans le navigateur de contenu, générez votre projet à partir de VS et redémarrez l'éditeur.
Pour générer votre projet pour que ses classes apparaissent dans l'Unreal Editor, suivez les étapes ci-dessous :
Dans l'explorateur de solutions, sélectionnez Games > [NomProjet], faites un clic droit sur votre projet et sélectionnez Build.
Une fois la génération terminée, retournez dans l'Unreal Editor et vérifiez si le bouton Compile est apparu dans la barre d'outils inférieure et si un nouveau dossier "C++ Classes" est apparu dans le navigateur de contenu.
Si ce n'est pas le cas, fermez l'éditeur et ouvrez à nouveau votre projet. L'ouverture de l'éditeur recompile votre projet et indique à l'UE que vos classes C++ existent. Si l'Unreal Engine vous demande de regénérer votre projet, cliquez sur Yes.
Désactiver le Live Coding
Avant de compiler votre code, désactivez le Live Coding dans l'Unreal Editor. Avec le Live Coding, vous pouvez modifier ou regénérer du code C++ dans les fichiers d'implémentation (.cpp) pendant que le moteur est en cours d'exécution. Toutefois, il suit un flux de travail de compilation différent et peut produire des erreurs lors de la modification des fichiers d'en-tête (.h) ou lorsque vous essayez d'effectuer une compilation à partir de Visual Studio. Le Live Coding est utile pour itérer sur une base de code développée, mais nous recommandons de le désactiver au début d'un nouveau projet.
Pour désactiver le Live Coding, dans la barre d'outils inférieure de l'éditeur, cliquez sur les trois points à côté du bouton Compile et désactivez Enable Live Coding.
Étendre une classe C++ aux blueprints
Maintenant que vous avez créé votre mode de jeu personnalisé, transformez-le en blueprint pour exposer ses propriétés dans l'éditeur, puis définissez ce nouveau blueprint comme mode de jeu par défaut de votre projet.
En étendant votre classe mode de jeu aux blueprints, vous exposez les valeurs de classe directement dans l'éditeur au lieu de tout faire via le code. Le blueprint fait office d'enfant de la classe C++, héritant de toutes ses fonctionnalités.
Pour obtenir une ressource de blueprints de votre classe mode de jeu, suivez les étapes ci-dessous :
Dans l'arborescence de ressources du navigateur de contenu, accédez à C++ Classes > [NomProjet] pour trouver les classes C++ que vous avez créées.
Faites un clic droit sur votre classe Game Mode Base et sélectionnez Create Blueprint class based on [NomBaseModeJeu].
Dans la fenêtre Add Blueprint Class, nommez votre blueprint avec le préfixe
BP_pour l'identifier facilement ultérieurement. Ce tutoriel utilise le nomBP_AdventureGameMode.Pour Path, sélectionnez All > Content > FirstPerson > Blueprints, puis cliquez sur Create Class.
L'Unreal Engine ouvre automatiquement le blueprint dans une nouvelle fenêtre de l'Éditeur de blueprint.
Vous pouvez ancrer la nouvelle fenêtre dans la fenêtre principale de l'éditeur en faisant glisser l'onglet du blueprint en regard de l'onglet de mappage (Lvl_FirstPerson) dans la fenêtre principale de l'éditeur.
Modifier le mode de jeu du projet
Par défaut, les nouveaux projets dans l'Unreal Engine utilisent un mode de jeu d'exemple. Pour le remplacer par votre mode de jeu personnalisé, modifiez les paramètres de votre projet.
Pour modifier le mode de jeu par défaut, suivez les étapes ci-dessous :
Dans le menu principal de l'éditeur, ouvrez Edit > Project Settings.
Dans la section Project du panneau de gauche, sélectionnez Maps & Modes.
En haut du tableau des paramètres, remplacez Default GameMode par le blueprint de votre mode de jeu.
Fermez Project Settings.
Dans le menu principal, accédez à Fenêtre > Paramètres du monde. Par défaut, le panneau Paramètres du monde est ancré à côté du panneau Détails. Ces paramètres déterminent le comportement du niveau actuel.
Dans la section Mode de jeu, définissez Remplacement de mode de jeu sur votre nouveau blueprint Mode de jeu.
Il vous suffit de modifier le paramètre Remplacement de mode de jeu pour tous les niveaux d'échantillons. Si vous créez un nouveau niveau vierge, le paramètre Remplacement de mode de jeu est par défaut défini sur Aucun.
Ajouter un message de débogage à l'écran
Une très bonne façon de commencer à ajouter du code à votre projet consiste à ajouter un message "Hello World !" à l'écran.
Ajoutez un message de débogage pour vérifier que vous utilisez votre nouveau mode de jeu au lieu du mode de jeu par défaut fourni par l'Unreal Engine. Les messages de journal et de débogage sont utiles pour vérifier et déboguer le code pendant le développement.
Remplacer la fonction Default StartPlay()
AGameModeBase inclut une fonction StartPlay() que l'UE appelle lorsque le jeu est prêt à se lancer. Vous remplacerez généralement cette fonction dans vos classes mode de jeu personnalisées pour ajouter une logique de démarrage de jeu globale. Ici, vous allez la remplacer pour afficher un message de débogage au lancement du jeu.
Pour remplacer StartPlay() dans votre classe mode de jeu personnalisée, suivez les étapes ci-dessous :
Dans VS, ouvrez le fichier d'en-tête
.hde votre classe mode de jeu. Les extraits de code de ce tutoriel utilisent une classe appeléeAdventureGameMode.Le code par défaut devrait ressembler à ceci :
C++UCLASS() class ADVENTUREGAME_API AAdventureGameMode : public AGameModeBase { GENERATED_BODY() };GENERATED_BODY()est une macro utilisée par l'outil Unreal Header qui génère automatiquement le code requis pour que cette classe et les autres UObjects fonctionnent avec l'Unreal Engine. Pour plus d'informations sur l'outil Unreal Header, consultez la documentation UHT.La classe
AAdventureGameModeexpose différents états de mode de jeu à votre code, tels que le lancement ou la fin d'un jeu, l'entrée dans une map ou l'exécution d'un jeu. Lorsqu'un état est déclenché, il exécute une fonction associée commeStartPlay()ouResetLevel().Ajoutez une déclaration de remplacement pour la fonction
StartPlay()à votre classeAAdventureGameModeBase.C++UCLASS() class ADVENTUREGAME_API AAdventureGameMode : public AGameModeBase { GENERATED_BODY() virtual void StartPlay() override; };Enregistrez le fichier
.h.
Les préfixes des classes et des fonctions de l'Unreal Engine indiquent à l'outil Unreal Header le type de classe. Par exemple, le préfixe A est pour les acteurs, U pour les UObjects et F pour les structures. Pour en savoir plus sur les préfixes de classe C++ de l'Unreal Engine, consultez la page
Ajouter un message de débogage à StartPlay()
Implémenter votre remplacement StartPlay() avec un code personnalisé qui affiche un message de débogage.
Pour afficher un message de débogage à l'écran au lancement du jeu, suivez les étapes ci-dessous :
Ouvrez le fichier
.cppde votre mode de jeu pour implémenter la fonction que vous venez de déclarer.Ajoutez une nouvelle définition de fonction pour
StartPlay(). Cette fonction est déclarée dansAAdventureGameMode, alors définissez-la dansAAdventureGameMode::StartPlay().C++void AAdventureGameMode::StartPlay() { }Dans
AMyGameModeBase::StartPlay(), ajoutezSuper::StartPlay()pour appeler la fonctionStartPlay()de la classe parentAAdventureGameMode. Cela permet de gérer l'autre logique qui doit être exécutée lorsque le jeu démarre.Ensuite, ajoutez une
vérificationpourGEngine != nullptrpour vous assurer que le pointeur global du moteur est valide.C++void AAdventureGameMode::StartPlay() { Super::StartPlay(); check(GEngine != nullptr); }Il s'agit d'un pointeur vers la classe UEngine utilisée par l'Unreal Engine. Le fait de vérifier sa validité permet de s'assurer que votre jeu fonctionne correctement avant que le code ne continue. Si le pointeur global du moteur n'est pas valide, votre jeu plante.
Utilisez
GEnginepour accéder à la fonction membreAddOnScreenDebugMessage()de l'UE, qui affiche un message à l'écran lorsque le jeu est en cours d'exécution.Cette fonction accepte quatre valeurs :
Une clé int unique qui identifie le message et empêche que le même message soit ajouté plusieurs fois. Utilisez
-1si l'unicité n'a pas d'importance.Un nombre float représentant la durée d'affichage du message, en secondes.
Un
FColorqui définit la couleur du texte.Un message
FStringà afficher.
Utilisez les valeurs suivantes pour afficher un message "Hello world !" en texte jaune à l'écran pendant 5 secondes au début du jeu :
C++GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello World, this is AdventureGameMode!"));Enregistrez le fichier
.cpp.
Maintenant, AAdventureGameMode::StartPlay() devrait ressembler à ceci :
#include "AdventureGameMode.h"
void AAdventureGameMode::StartPlay()
{
Super::StartPlay();
check(GEngine != nullptr);
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello World!"));
}UE_LOG est une autre fonction utile pour afficher les messages de débogage. Au lieu d'afficher un message à l'écran, elle enregistre les messages dans le journal de sortie ou la console de l'Unreal Engine à l'exécution. C'est utile pour le suivi ou l'enregistrement des informations détaillées sur ce qui se passe dans votre jeu. Vous pouvez classer les journaux en différents canaux et définir le type de message (par exemple, informationnel, erreur ou avertissement). Par exemple :UE_LOG(LogTemp, Warning, TEXT("Ceci est un message d'avertissement !"));
Compiler et tester votre code
Vous pouvez cliquer sur le bouton Compiler dans l'Unreal Editor pour regénérer votre projet. Toutefois, il est recommandé de passer par VS. Une fois la compilation effectuée, vous pouvez voir les modifications apportées à votre code dans l'éditeur et en jeu.
Pour voir vos modifications en jeu, cliquez sur Jouer dans la barre d'outils principale pour lancer le mode Play in Editor (PIE). Votre message de débogage s'affiche dans le coin supérieur gauche.
Pour quitter le mode PIE, cliquez sur Maj+Échap ou cliquez sur Stop dans la barre d'outils de l'éditeur de niveau.
Suivant
Maintenant que vous disposez d'un projet de base avec un nouveau mode de jeu, vous pouvez commencer à créer votre personnage joueur ! Dans la prochaine section, vous allez créer une nouvelle classe de personnage et apprendre à utiliser des actions de commande pour ajouter des contrôles de déplacement à votre personnage.
Créer un personnage joueur avec des actions de commandes
Apprenez à créer un personnage en C++ avec des actions de commandes.
Finaliser le code
Voici le code complet généré dans cette section :
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "AdventureGameMode.generated.h"
UCLASS()
class ADVENTUREGAME_API AAdventureGameMode : public AGameModeBase
{
GENERATED_BODY()
#include "AdventureGameMode.h"
void AdventureGameMode::StartPlay()
{
Super::StartPlay();
check(GEngine != nullptr);
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello World!"));
}