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