Optimisation de la Communication entre C++ et Blueprints via les Structures et Énumérations dans Unreal Engine

Déclaration et Exposition des Structures (USTRUCT)

Lors de la définition d'une structure destinée à être utilisée dans l'éditeur Unreal, il est impératif de respecter certaines conventions de nommage et de placement. La structure doit obligatoirement être préfixée par la lettre F et déclarée avant toute macro UCLASS() dans le fichier d'en-tête pour éviter les erreurs de compilation du moteur.

USTRUCT(BlueprintType)
struct FCharacterAttributes
{
    GENERATED_BODY()

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attributes")
    int32 MaxStamina;

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attributes")
    FString CharacterAlias;
};

UCLASS()

Une fois la structure définie, vous pouvez instancier une variable de ce type dans votre classe. Cette variable sera driectement éditable et utilisable dans l'éditeur de Blueprints.

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attributes")
FCharacterAttributes PlayerAttributes;

Intégration avec les Tables de Données (Data Tables)

Les structures sont également fondamentales pour la création de tables de données. Pour qu'une structure soit compatible avec le système de Data Table, elle doit hériter de FTableRowBase. L'IDE proposera généralement d'inclure automatiquement le fichier d'en-tête nécessaire.

USTRUCT(BlueprintType)
struct FEquipmentData : public FTableRowBase
{
    GENERATED_BODY()

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Equipment")
    float Durability;

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Equipment")
    FString EquipmentName;
};

Après la compilation, vous pouvez créer une nouvelle Data Table dans le navigateur de contenu et sélectionner cette structure comme type de ligne. Il est également possible d'importer des données externes : en glissant-déposant un fichier CSV contenant des colonnes correspondant exactement aux noms des variables de la structure, l'éditeur générera automatiquement la table et remplira les données.

Déclaration et Exposition des Énumérations (UENUM)

Il existe deux approches principales pour définir des énumérations exposées aux Blueprints dans Unreal Engine.

Première approche : Énumération fortement typée (enum class)

C'est la méthode reocmmandée. L'uitlisation de enum class combinée à UMETA permet de personnaliser les noms affichés dans l'éditeur tout en conservant la sécurité du typage fort en C++.

UENUM(BlueprintType)
enum class ECombatState : uint8
{
    Idle UMETA(DisplayName = "Idle State"),
    Attacking UMETA(DisplayName = "Attacking State"),
    Defending UMETA(DisplayName = "Defending State")
};

La déclaration de la variable s'effectue de manière standard :

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Combat")
ECombatState CurrentCombatState;

Deuxième approche : Énumération via espace de noms (namespace)

Cette méthode plus ancienne encapsule l'énumération dans un espace de noms. Elle est souvent utilisée pour maintenir la compatibilité avec d'anciens systèmes ou pour des raisons d'architecture spécifique.

UENUM(BlueprintType)
namespace EInteractionCategory
{
    enum Type
    {
        Interact_Pickup,
        Interact_Examine,
        Interact_Drop
    };
}

Puisque l'énumération est encapsulée, l'utilisation du template TEnumAsByte est requise pour la déclaration de la variable :

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interaction")
TEnumAsByte<EInteractionCategory::Type> CurrentInteraction;

Exposition des Variables lors du Spawn (ExposeOnSpawn)

Pour permettre la modification de certaines propriétés au moment précis de l'instanciation d'un acteur (Spawn) depuis un Blueprint, il est nécessaire d'utiliser le spécificateur meta. Cela équivaut à cocher l'option "Expose on Spawn" directement dans l'éditeur de Blueprints.

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spawning", meta = (ExposeOnSpawn))
float InitialSpawnHealth;

Lorsqu'un Blueprint de cette classe sera instancié via le nœud Spawn Actor from Class, cette variable apparaîtra automatiquement dans les paramètres du nœud, permettant d'injecter une valeur spécifique lors de la création de l'objet dans le monde.

Étiquettes: Unreal-Engine C++ Blueprint USTRUCT UENUM

Publié le 30 juillet à 12h02