Configurer votre projet C++

Programmation en C++, Scripting Unreal C++, Visual Studio et Xcode
Avatar de l’utilisateur
Poppy
Messages : 203
Inscription : 17 sept. 2022, 16:17

Dans ce guide de démarrage rapide, vous apprendrez à configurer un projet C++ dans le moteur Unreal et à programmer votre première classe de jeu C++ dans Visual Studio. À l'issue de ce tutoriel, vous saurez comment effectuer les opérations suivantes :

Créer un nouveau projet C++
Créer une nouvelle classe Acteur en C++
Modifier cette classe C++ dans votre environnement de développement, en ajoutant une représentation visuelle et des fonctionnalités
Compiler votre projet
Tester votre nouvel acteur dans l'éditeur Unreal.

Ce guide suppose que vous avez déjà configuré Visual Studio comme environnement de programmation. Si ce n'est pas le cas, veuillez vous reporter à la section Configuration de Visual Studio pour le moteur Unreal pour obtenir des instructions sur la façon de l'installer et de le configurer pour la programmation avec le moteur Unreal. Nous supposons également que vous avez une certaine familiarité avec l'utilisation de l'éditeur Unreal avant de commencer ce guide, mais pour votre commodité, nous allons parcourir toutes les étapes nécessaires pour créer et gérer des classes C++ à partir de l'éditeur. Le produit final de ce guide sera un cube qui flotte doucement dans l'air et tourne continuellement, vous donnant un objet simple à tester pendant que vous apprenez à utiliser l'environnement de développement pour la programmation.



1. Configuration requise

Lancez l'éditeur Unreal. Lorsque le navigateur de projets s'affiche, cliquez sur la catégorie Projet de jeux et sélectionnez un modèle vierge. Assurez-vous que les options C++ et Starter Content sont activées, choisissez l'emplacement d'enregistrement et le nom de votre choix pour ce projet, puis cliquez sur Create Project. Dans notre cas, nous allons nommer notre projet QuickStart.

Cela créera automatiquement un projet simple et vierge avec uniquement le code C++ essentiel dans la solution, et il s'ouvrira automatiquement dans l'éditeur Unreal et Visual Studio. Pour plus d'informations sur la gestion et la création de projets, veuillez vous reporter à la page du navigateur de projets.



2. 2. Créer une nouvelle class C++

1 - Dans l'éditeur Unreal, cliquez sur le menu déroulant Fichier, puis sélectionnez la commande Nouvelle classe C++....



2 - Le menu Choose Parent Class s'affiche. Vous pouvez choisir une class existante à étendre, en ajoutant ses fonctionnalités aux vôtres. Choisissez Acteur, car il s'agit du type d'objet le plus basique pouvant être placé dans le monde, puis cliquez sur Suivant.



3 - Dans le menu Nommez votre nouvel acteur, nommez votre acteur FloatingActor et cliquez sur Créer une classe.



Le moteur Unreal se compile et se recharge automatiquement avec notre nouvelle classe sélectionnée dans le navigateur de contenu, et votre environnement de programmation s'ouvre automatiquement avec FloatingActor.cpp.



3. Modifiez votre Class C++

Maintenant que nous avons créé notre classe C++, nous allons passer à Visual Studio et modifier notre code.

1 - Dans Visual Studio, localisez l'Explorateur de solutions, qui se trouve par défaut sur le côté gauche de la fenêtre, puis utilisez-le pour localiser FloatingActor.h. Dans notre projet, il sera situé sous Jeux > QuickStart > Source > QuickStart.



2 - Double-cliquez sur FloatingActor.h pour l'ouvrir et le mettre en évidence dans l'éditeur de texte.



Il s'agit d'un fichier d'en-tête. On peut le considérer comme une sorte de table des matières d'une classe C++. Avant de commencer à construire une nouvelle fonctionnalité, nous devons déclarer toutes les nouvelles variables ou fonctions que nous utilisons dans ce fichier.

3 - Ajoutez le code suivant sous la déclaration de AFloatingActor() :

Code : Tout sélectionner

UPROPERTY(VisibleAnywhere)
UStaticMeshComponent* VisualMesh;
Nous déclarons ici un StaticMeshComponent, qui servira de représentation visuelle de notre objet. Notez qu'il utilise une macro UProperty, ce qui le rend visible dans l'éditeur Unreal.

4 - Ouvrez maintenant FloatingActor.cpp et ajoutez le code suivant à l'intérieur de AFloatingActor::AFloatingActor(), juste avant le crochet fermant :

Code : Tout sélectionner

VisualMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh"));
VisualMesh->SetupAttachment(RootComponent);

static ConstructorHelpers::FObjectFinder<UStaticMesh> CubeVisualAsset(TEXT("/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube"));

if (CubeVisualAsset.Succeeded())
{
    VisualMesh->SetStaticMesh(CubeVisualAsset.Object);
    VisualMesh->SetRelativeLocation(FVector(0.0f, 0.0f, 0.0f));
}
Cette fonction est le constructeur, et elle indique à la classe comment s'initialiser lors de sa première création. Le code que nous avons ajouté va remplir notre référence VisualMesh avec un nouveau StaticMeshComponent, l'attacher à notre Actor et le définir sur le cube mesh des actifs du Starter Content.

5 - Ajoutez le code suivant à l'intérieur de AFloatingActor::Tick(float DeltaTime), juste avant le crochet de fin :

Code : Tout sélectionner

FVector NewLocation = GetActorLocation();
FRotator NewRotation = GetActorRotation();
float RunningTime = GetGameTimeSinceCreation();
float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
NewLocation.Z += DeltaHeight * 20.0f;       //Scale our height by a factor of 20
float DeltaRotation = DeltaTime * 20.0f;    //Rotate by 20 degrees per second
NewRotation.Yaw += DeltaRotation;
SetActorLocationAndRotation(NewLocation, NewRotation);
La fonction Tick est l'endroit où nous ajoutons le code que nous voulons exécuter en temps réel. Dans ce cas, elle fera tourner notre cube simultanément tout en le faisant flotter de haut en bas.



4. Compilez et testez votre code C

1 - Enregistrez votre travail dans les fichiers FloatingActor.h et FloatingActor.cpp. Ensuite, dans l'explorateur de solutions, cliquez avec le bouton droit de la souris sur le projet, cliquez sur la commande Build dans le menu contextuel et attendez que le projet termine sa compilation.



Vous devriez voir un message indiquant "Succeeded" dans le journal de sortie au bas de la fenêtre.



Vous pouvez également retourner dans l'éditeur Unreal et cliquer sur le bouton Compiler dans la barre d'outils en haut de l'écran.



2 - Dans l'Unreal Editor, retournez dans le navigateur de contenu, dépliez les classes C++, puis localisez FloatingActor. Il sera situé dans le dossier qui porte le même nom que votre projet, dans notre cas, QuickStart.



3 - Cliquez et faites glisser FloatingActor dans la fenêtre d'observation en perspective pour créer une instance de FloatingActor. Elle sera sélectionnée dans le World Outliner sous le nom de "FloatingActor1" et ses propriétés seront visibles dans le panneau Détails.



Pour plus d'informations sur la navigation dans la fenêtre d'affichage et le placement des acteurs dans le monde, reportez-vous au Démarrage rapide du concepteur de niveau.

4 - Dans le panneau Détails de FloatingActor1, réglez l'emplacement de votre acteur sur (-180, 0, 180). Cela le placera directement au-dessus de la table dans la scène par défaut.



Vous pouvez également utiliser le gadget Déplacer pour le déplacer manuellement.

5 - Appuyez sur le bouton Play dans l'éditeur en haut de l'écran.



5. Résultat final

Vous devriez maintenant voir votre cube flotter doucement de haut en bas au-dessus de la table pendant qu'il tourne lentement.



Félicitations ! Vous avez créé votre première classe Actor entièrement en C++ ! Bien qu'il s'agisse d'un objet très simple et qu'il ne fasse qu'effleurer la surface de ce que vous pouvez faire avec le code source C++, vous avez à ce stade abordé tous les éléments essentiels de la création, de l'édition et de la compilation du code C++ pour votre jeu. Vous êtes maintenant prêt à relever des défis de programmation de jeu plus complexes, et nous vous en proposons quelques-uns ci-dessous.



6. A vous de jouer !

Maintenant que vous savez comment construire un acteur C++ simple, essayez de le rendre plus configurable. Par exemple, vous pouvez ajouter des variables pour contrôler son comportement :

Dans FloatingActor.h :

Code : Tout sélectionner

...
public: 
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="FloatingActor")
    float FloatSpeed = 20.0f;

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="FloatingActor")
    float RotationSpeed = 20.0f;
...
Dans FloatingActor.cpp:

Code : Tout sélectionner

...
NewLocation.Z += DeltaHeight * FloatSpeed;          //Scale our height by FloatSpeed
float DeltaRotation = DeltaTime * RotationSpeed;    //Rotate by a number of degrees equal to RotationSpeed each second
...
En ajoutant ces variables dans l'en-tête et en remplaçant les valeurs flottantes que nous utilisions pour mettre à l'échelle DeltaHeight et DeltaRotation dans le fichier .cpp, nous pouvons maintenant modifier le flottement et la vitesse de rotation dans le panneau Détails lorsque nous sélectionnons notre acteur.



Vous pouvez expérimenter en ajoutant d'autres types de comportement à la fonction Tick à l'aide de Location, Rotation et Scale.

Vous pouvez également essayer d'attacher d'autres types de composants en C++ pour créer un objet plus complexe. Consultez le guide Création et fixation de composants pour obtenir des exemples des différents types de composants disponibles, et essayez d'ajouter un composant de système de particules pour donner un peu d'éclat à votre objet flottant.



Enfin, si vous cliquez avec le bouton droit de la souris sur votre propre classe d'acteur dans le navigateur de contenu, vous trouverez l'option de l'étendre, soit en C++, soit en Blueprint, ce qui vous permettra de créer de nouvelles variations de cette class.



Vous pouvez avoir toute une bibliothèque de FloatingActors, chacun substituant des maillages ou des paramètres différents selon votre choix.





Exemple de code

FloatingActor.h

Code : Tout sélectionner


UCLASS()
class QUICKSTART_API AFloatingActor : public AActor
{
    GENERATED_BODY()

public: 
    // Sets default values for this actor's properties
    AFloatingActor();

    UPROPERTY(VisibleAnywhere)
    UStaticMeshComponent* VisualMesh;

protected:
    // Called when the game starts or when spawned
    virtual void BeginPlay() override;

public: 
    // Called every frame
    virtual void Tick(float DeltaTime) override;

};
FloatingActor.cpp

Code : Tout sélectionner

// Called when the game starts or when spawned
void AFloatingActor::BeginPlay()
{
    Super::BeginPlay();

}

// Called every frame
void AFloatingActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

    FVector NewLocation = GetActorLocation();
    FRotator NewRotation = GetActorRotation();
    float RunningTime = GetGameTimeSinceCreation();
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 20.0f;       //Scale our height by a factor of 20
    float DeltaRotation = DeltaTime * 20.0f;    //Rotate by 20 degrees per second
    NewRotation.Yaw += DeltaRotation;
    SetActorLocationAndRotation(NewLocation, NewRotation);
}

Avatar de l’utilisateur
Elon
Messages : 249
Inscription : 21 oct. 2022, 12:43

On est au bord du décès sur ces threads, le C++ ça fait pas rêver les foules :lol: :lol:
Avatar de l’utilisateur
Poppy
Messages : 203
Inscription : 17 sept. 2022, 16:17

C'est vrai mais a une certain niveau de développement et d'optimisation c'est nécessaire ;)
Répondre