Jusqu’à maintenant, nous avons surtout parlé des blueprints liés à un niveau de jeu mais comme je vous l’ai dit au début de la partie sur Blueprint, il existe aussi ce qu’on appelle des classes Blueprint.
C’est un sujet très large et aux variations infinies. Pour commencer, je vous propose de mettre notre nez dans une classe qui existe déjà dans le template FPS : la classe personnage.
Les rudiments de la classe personnage
Bien sûr, elle ne s’appelle pas “classe personnage”, ce serait trop simple. Vous la trouverez sous le nom de FirstPersonCharacter et elle régit le comportement du personnage incarné par le joueur. Quand on s’intéresse à cette classe, il y a un certain nombre de notions qu’il vaut mieux maîtriser avant.
Le Player Start
Pour commencer, j’aimerais vous parler du Player Start. Il permet de faire apparaître le joueur à un endroit donné ; on dit généralement que le joueur “spawn”. Cette fonctionnalité se trouve dans la fenêtre Modes dans la catégorie Basic de l'éditeur.
En plaçant le Player Start dans le niveau, observez bien la flèche bleue claire, elle indique la direction du regard du joueur lorsqu’il apparaîtra.
En s’attaquant au personnage que le joueur incarnera, on touche à ce qu’on appelle le Game mode. Il s’agit d’un ensemble de règles communément acquises mais qui peuvent aussi être adaptées.
Le GameMode
Le GameMode regroupe différentes classes comme le HUD, le PlayerController ou le Pawn :
Le HUD correspond à tout ce qui s'affiche en périphérie de l'écran et qui n'appartient pas à l'environnement du jeu. Par exemple, il s’agit du score du joueur, de la santé de son personnage ou de l’arme qu’il porte : c'est l'interface du jeu.
Le Pawn est la classe de base du jeu pouvant être contrôlés par le joueur ou par une intelligence artificielle (IA). Le Pawn détermine son apparence d’un personnage joueur ou d’une entité IA, mais aussi comment il interagit avec le monde en termes de collisions ou autres interactions physiques.
Le PlayerController représente l'interaction que le joueur a avec son personnage.
Pour trouver le Game Mode, cliquez sur l’icône Blueprints puis suivez ce chemin :
GameMode : Edit FirstPersonGameMode > Pawn : Edit FirstPersonCharacter > Edit FirstPersonCharacter.
L’éditeur Blueprint s’ouvre : ce blueprint est indépendant du Level Blueprint. En effet, il peut être utilisé dans plusieurs niveaux. Le blueprint du personnage est donc une classe Blueprint (ou class Blueprint si vous avez pris le parti de vous exprimer en anglais) !
Les différences entre un level et une class Blueprint
On observe principalement trois différences avec le level Blueprint :
1) On a accès à un nouveau panneau Components situé en haut à gauche de l’éditeur. Pour rappel, quand vous utilisez le level Blueprint et que vous souhaitez faire référence à un mesh se trouvant dans le niveau, vous devez cliquer dessus et ensuite, à partir de l’event Graph, vous devez tapez « reference to …». On fonctionne différemment avec les classes Blueprint.
2) L’onglet Viewport permet de visualiser le rendu graphique de la classe Blueprint c’est-à-dire le look de notre personnage et l’emplacement de la caméra.
3) L’onglet Construction Script qui sert à effectuer des opérations d’initialisation.
Si vous avez lu le chapitre sur les materials, vous savez déjà comment ces onglets fonctionnent. ;)
Ajouter une lampe torche
Pour découvrir le fonctionnement de la classe FirstPersonCharacter, rien de tel que de la modifier ! Nous allons créer une lampe torche à partir de la classe personnage, pour cela il va falloir créer un nouveau component. Depuis l’éditeur Blueprint du FirstPersonCharacter, cliquez sur Add Component en haut à gauche puis cherchez dans la barre de recherche « SpotLight ».
Vous devriez maintenant voir votre SpotLight dans la fenêtre Components en haut à gauche et dans le Viewport. Nous souhaitons que cette lampe soit rattachée (reliée, affectée) au personnage. Pour cela, cliquez sur la SpotLight dans la fenêtre « Components » et glissez-la sur « Mesh2P » qui correspond à l’apparence visuelle du personnage (aussi appelée skin qui signifie peau en anglais).
Un objet est correctement rattaché à un autre quand un triangle est visible devant le composant parent (ou maître). À présent, nous pouvons déplacer la SpotLight dans le Viewport. Nous allons la mettre juste devant la main du personnage. Si vous le souhaitez, vous pouvez en profiter pour modifier quelques paramètres comme la couleur de la lumière, son intensité et l’angle.
Vous êtes libres de mettre vos propres paramètres. Le but de la manœuvre est de pouvoir simuler la projection que pourrait réaliser une lampe torche. Si vous lancez le jeu, vous observerez que votre lumière suivra vos mouvements !
Parfait, c’est le début de la liberté ! Mais modifier une classe existante, c’est bien, créer la sienne, c’est mieux. ;)
Créez une classe de type Actor
Nous allons maintenant créer notre première classe Blueprint. Notre classe comportera un trigger (un déclencheur) et un mesh (objet 3D). Pour résumer l’effet recherché : le trigger sera un cube invisible qui détectera la présence du joueur. Si le joueur rentre dans le trigger alors on multiplie par 2. La taille du blueprint sera donc doublée. Quand le joueur sortira du trigger, le blueprint reprendra sa taille normale.
Cette partie est extrêmement simple, alors c’est parti !
Depuis le content browser, allez dans le dossier FirstPersonBP > Blueprint.
Faites ensuite un clic droit avec votre souris dans le dossier et cliquez sur Blueprint Class. Sélectionnez le type Actor et renommez votre classe Blueprint en SuperScaler.
Double cliquez sur SuperScaler dans le content browser afin d’ouvrir le Blueprint Editor. À partir de la fenêtre Components, ajoutez un Static Mesh et une Box Collision.
Nous souhaitons à présent ajouter un mesh à notre composant static mesh. Sélectionnez votre static mesh dans la fenêtre Components puis dans la fenêtre Details, dans la catégorie Static Mesh, choisissez CubeMesh dans le menu déroulant.
Sélectionnez maintenant votre Box qui fait office de Trigger dans la fenêtre Components. Modifiez ses valeurs de scale si besoin afin que le Mesh soit inclus dans la boite de collision, et non l’inverse. Cliquez ensuite sur le « + » de l’évènement On Component Begin Overlap dans la fenêtre Details.
Rappelons brièvement ce que nous voulons faire :
Pour changer la taille d’un objet, il faut chercher la fonction « Set Actor Scale 3D » qui permet justement de changer la taille d’un Actor.
Comme vous pouvez le constater, il existe deux paramètres : Target (la cible) et New Scale 3D (la nouvelle
échelle de l’objet 3D) qu'il va falloir définir :
Par défaut le paramètre Target à comme valeur Self, c’est-à-dire lui-même. En d’autres termes, par défaut, c’est l’intégralité du blueprint qui changera de dimensions. Dans notre cas le trigger ET le mesh qui se trouve dans la classe.
New Scale 3D accepte un nouveau type de variable : Vector. Le type Vector se caractérise par ses 3 valeurs : X, Y et, Z. Il est donc tout indiqué pour représenter un objet en 3D.
Pour commencer, mettez une valeur de 10 pour X, Y et Z et laissez l’entrée Self vide pour le paramètre Target.
Ensuite, cliquez sur le bouton Find in CB afin de localiser votre SuperScaler dans le content browser.
Depuis le content browser, glissez-déposez votre classe blueprint SuperScaler dans le niveau .
C’est le moment des tests : quand on lance le jeu, le cube a une taille normale. Quand on rentre dans le trigger box, alors sa taille est 10 fois plus grandes sur les 3 axes par rapport à sa taille initiale (la taille initiale est de 1, 1, 1).
Nous allons maintenant faire en sorte de multiplier par 2 la taille initiale du Blueprint à chaque fois qu’on rentre
dans le Trigger.
Pour cela, il faut récupérer la taille du Blueprint puis la multiplier par 2. Imaginons que la taille initiale soit de
1, si on multiplie le vecteur par 2, on obtient :
En résumé, nous avons : (X,Y,Z) = (2,2,2).
Si le joueur rentre une nouvelle fois dans le trigger on aura les valeurs suivantes pour le vecteur :
x=2∗2=4
y=2∗2=4
z=2∗2=4
Soit :
Facile !
Pour vous faire comprendre une dernière chose avec les vecteurs, si on avait les valeurs (5.4, 6.6, 7.09) pour
le vecteur et qu’on le multipliait par deux, on aurait les résultats suivants : (10.8, 13.2, 14.18).
On multiplie chaque valeur (X, Y, Z) par le nombre multiplicateur (5.4*2, 6.6*2, 7.09*2).
Pour récupérer la taille du Blueprint , on utilise la fonction Get Actor Scale 3D. Depuis la valeur de retour de cette fonction, faites une multiplication en cherchant « * » dans la barre de recherche des fonctions (vector * float) puis affectez la valeur 2 à la multiplication.
Enfin, liez le résultat de cette multiplication à la fonction Set Actor Scale 3D :
Voici ce que dit notre algorithme : « SI quelque chose (le joueur ici) rentre dans ce Trigger ALORS on redimensionne le blueprint en multipliant par 2 sa taille actuelle... »
Félicitations ! Vous venez de créer une classe Blueprint dont les composants changent de dimensions à chaque fois que le joueur rentre dans le trigger. Pourquoi ne pas essayez de faire évoluer cette classe ?
Utilisez l’évènement « On Component End Overlap » pour redonner au blueprint sa taille initiale quand le joueur sort du trigger ;
Utilisez l’évènement « OnComponentHit » pour détruire la Classe Blueprint quand un projectile touche le trigger. Utilisez la fonction "Destroy Actor".
Créez ensuite un nouveau Blueprint « Interrupteur ». Ce blueprint basique comprendra deux components : une point light et une box collision.
Si on rentre dans le trigger, la point light s’allume et est donc par défaut éteinte.
Si on sort du trigger, la lumière s’éteint.
Si vous rencontrez des difficultés, n’hésitez pas à lire la documentation d’Unreal Engine, à vous inspirer de vidéos trouvées sur le Net ou bien posez vos questions sur le Forum. La recherche active fait partie intégrante du travail d’un développeur de jeu vidéo. Il n’y a pas de honte à demander conseil ou à s’inspirer du travail des autres, c’est même plus que conseillé si vous voulez réussir dans cette voie !
En résumé
Vous êtes à présent capable de :
Créer votre propre classe ;
Utiliser des fonctions Blueprint ;
Utiliser les événements d'un trigger.