Macro USTRUCT()
Struktura to typ danych złożonych, który umożliwia grupowanie zmiennych różnych typów w jeden typ. USTRUCT () makro pozwala na tworzenie struktur, które mogą być wykorzystane w edytorze Unreal i Blueprints.
W Unreal Engine struktury mają przedrostek F w języku C ++. Aby zaimplementować strukturę w C ++, utwórz plik nagłówkowy ( .h ) z nazwą struktury, na przykład StructExample.h . Poniższy kod przedstawia przykład USTRUCT (), którego można użyć w Blueprints.
#pragma once
#include "CoreMinimal.h"
#include "StructExample.generated.h"
USTRUCT(BlueprintType)
struct FStructExample
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 IntegerVariable;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float FloatVariable;
//Other variables...
};
Specyfikator BlueprintType umożliwia użycie struktury jako typu zmiennej w Blueprint. Na tym obrazku zmienna o nazwie MyStruct jest tworzona przy użyciu struktury StructExample jako typu:

Poniższy obraz pokazuje, jak zmienne struktury są wyświetlane na karcie details instancji.

Unreal Engine tworzy funkcje Make and Break struktury, które mają być użyte w EventGraph of a Blueprint:

Przykładowe użycie:
Stwórzmy FItemShop strukturę, która zawiera informacje na temat pozycji, które mogą być sprzedawane do odtwarzacza. Utwórz plik nagłówkowy ItemShop.h i dodaj ten kod
#pragma once
#include "CoreMinimal.h"
#include "Engine/Texture.h"
#include "ItemShop.generated.h"
USTRUCT(BlueprintType)
struct FItemShop
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FString Name;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool bShow;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float Value;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 Amount;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
UTexture* Image;
};
Użyjemy strukturę FItemShop w klasie C ++. W edytorze Unreal utwórz klasę C ++ z nazwą Seller, używając klasy Actor jako klasy nadrzędnej. Plik Seller.h musi mieć następującą zawartość:
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "ItemShop.h"
#include "Seller.generated.h"
UCLASS()
class TUTOPROJECT_API ASeller : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
ASeller();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UPROPERTY(EditAnywhere, Category=Seller)
TArray<FItemShop> Inventory;
UPROPERTY(VisibleAnywhere)
USceneComponent* RootScene;
UPROPERTY(VisibleAnywhere)
UStaticMeshComponent* StaticMesh;
};
Stworzyliśmy TArray do przechowywania elementów FItemShop . TArray to kontener przechowujący sekwencję elementów. Przyjrzymy się TArray bardziej szczegółowo w innym artykule.
W pliku Seller.cpp musisz utworzyć komponenty w konstruktorze. StaticMesh wykorzystywane przez Seller zostaną określone w Unreal Editor.
#include "Seller.h"
ASeller::ASeller()
{
// Set this actor to call Tick() every frame.
PrimaryActorTick.bCanEverTick = true;
RootScene = CreateDefaultSubobject<USceneComponent>("RootScene");
RootComponent = RootScene;
StaticMesh = CreateDefaultSubobject<UStaticMeshComponent>("StaticMesh");
StaticMesh->SetupAttachment(RootScene);
}
...
Skompiluj kod C ++ i dodaj instancje Seller na poziomie. Możesz wybrać StaticMesh, który będzie reprezentował Sprzedawcę w zakładce Szczegóły instancji:

Nasz TArray o nazwie Inventory jest również dostępny w zakładce Details instancji. Elementy tego TArray są typu FItemShop . Możesz dodawać elementy i definiować zawartość każdego elementu.

Źródło:https://romeroblueprints.blogspot.com/2020/11/the-ustruct-macro.html