UDK Tutorial : Basic HUD

Francais | English

Introduction :

Je vais vous présenter dans ce petit tutoriel la méthode que j'utilise pour faire des HUD basiques. Je vais considérer que vous connaissez les bases de la programmation sur ce moteur (configuration de l'espace de travail, compilation).

I – Emplacement des classes

Dans cet exemple, nous allons placer nos classes dans le dossier dans un dossier «UDK\UDK-XXXX-XX\Development\Src\MyFolder\Classes».

II – Classe «MyGame»

Pour commencer, avant de fabriquer notre HUD, on va spécifier à notre classe de jeu d'utiliser ce nouveau HUD. Pour cela, modifiez vos propriétés de base de votre classe de jeu, ou bien créez une classe telle :

class MyGame extends UTDeathmatch
config(MyGame);

defaultproperties
{
    HUDType=class'MyFolder.MyHUD'
}

En sachant que notre classe de HUD s'appellera « MyHud », on indique sa référence dans les propriétés de base de notre jeu (qui est un simple Deathmatch de UT ici).

III – Classe «HUD»

Je vais commencer par décrire les fonctions et variables que j'utilise couramment dans mes classes de HUD et qui permettent déjà de faire pas mal de choses. Libre à vous d'aller jeter un œil à la classe « Canvas » si vous voulez en savoir un peu plus !

Voilà pour la présentation des différentes fonctions. Il faut bien savoir que ces fonctions ne sont pas directement disponible dans la classe « HUD » mais dans l'attribut « Canvas » de cette classe (comme vous l'avez peut être déjà remarqué). Il faudra donc a chaque fois mettre « Canvas.LaFonction() ». Pour résumer, on peut donc créer notre classe de HUD de base :

class MyHUD extends UTHUD;

function DrawGameHud()
{
    // C'est ici que vous placerez les fonctions vues avant de la manière suivante :
    // Canvas.LaFonction()

}

defaultproperties
{
}

La fonction « DrawGameHud() » est appelée à chaque rafraichissement d'image pour redessiner le HUD. C'est ici que l'on va donc redéfinir ce qui va être afficher.

Par exemple pour écrire un simple « Hello World » au centre de l'écran.

class MyHUD extends UTHUD;

function DrawGameHud()
{
    Canvas.SetPos(Canvas.ClipX/2,Canvas.ClipY/2);
    Canvas.SetDrawColor(255,255,255,255);
    Canvas.Font = class'Engine'.static.GetMediumFont();
    Canvas.DrawTextCentered("Hello World");
}

defaultproperties
{
}

IV – Exemple plus concret

Alors, maintenant que l'on a tous les éléments, on va réaliser une petite fonction utile a un HUD. En fait, notre fonction va nous permettre d'afficher la valeur d'une variable sur l'écran, sous forme de barre a paliers. On va essayer de réaliser cela :

Notre bar comporte donc :

Voilà ce que l'on peut par exemple faire (les commentaires devraient vous aider) :

function DrawBar(String Title, float Value, float MaxValue,int X, int Y, int R, int G, int B)
{

    local int PosX,NbCases,i;

    PosX = X; // Endroit où l'on doit dessiner le prochain rectangle
    NbCases = 10 * Value / MaxValue; // Nombre de cases actives à dessiner
    i=0; // Nombre de cases déjà dessinées

    /* Affichage des cases actives
    Tant que le nombre de cases déjà dessinées est inférieur au nombre de cases à dessiner on continue a dessiner des cases actives de la couleur souhaitée. A chaque fois que l'on affiche un rectangle on fait un décalage de PosX pour avoir l'emplacement de la prochaine case. On vérifie que le nombre de cases déjà dessinées est inférieur à dix au cas ou la valeur serait supérieur à la valeur maximum.
    */

    while(i < NbCases && i < 10)
    {
        Canvas.SetPos(PosX,Y);
        Canvas.SetDrawColor(R,G,B,200);
        Canvas.DrawRect(8,12);

        PosX += 10;
        i++;

    }

    /* Affichage des cases désactivées
    Maintenant que les cases actives sont affichées il faut afficher le reste des case. Donc tant que le nombre de cases dessinées est inférieur à dix, on dessine des cases désactivées.
    */

    while(i < 10)
    {
        Canvas.SetPos(PosX,Y);
        Canvas.SetDrawColor(255,255,255,80);
        Canvas.DrawRect(8,12);

        PosX += 10;
        i++;

    }

    /* Affichage du titre
    On affiche ensuite le titre de la barre en fin de barre en couleur souhaitée.
    */

    Canvas.SetPos(PosX + 5,Y);
    Canvas.SetDrawColor(R,G,B,200);
    Canvas.Font = class'Engine'.static.GetSmallFont();
    Canvas.DrawText(Title);

}

On va donc afficher de cette manière la vie et les munitions par exemple :

class MyHUD extends UTHUD;

function DrawGameHud()
{

    if ( !PlayerOwner.IsDead() && !UTPlayerOwner.IsInState('Spectating'))
    {
        DrawBar("Health",PlayerOwner.Pawn.Health, PlayerOwner.Pawn.HealthMax,20,20,200,80,80);         DrawBar("Ammo",UTWeapon(PawnOwner.Weapon).AmmoCount, UTWeapon(PawnOwner.Weapon).MaxAmmoCount ,20,40,80,80,200);     }

}

defaultproperties
{
}

Ce qui nous donne :

Tutorial écrit le 13/01/2010 par Shad