Save up to 70% on our assets during the Black Friday sale in the Unreal Marketplace

Erstelle INT und BOOL Matrizen in der Unreal Engine 5

Nutze DataMatrix in der Unreal Engine 5 um deine eigene Matrix Variable zu erstellen. Egal ob 2-, 3-Dimensional oder anderes, speichere deine BOOL oder INT Variablen als Matrix.

DataMatrix - Create INT and BOOL Matrices

Beschreibung

Das DataMatrix-Plugin für Unreal Engine ermöglicht die effiziente Verwaltung und Verarbeitung mehrdimensionaler Matrizen (int32 und bool). Es bietet umfassende Unterstützung für Blueprints, C++ und DataTables, sowie Multi-Threading-Funktionen zur Leistungsoptimierung bei großen Datenmengen.

Screenshots

DataMatrix - Create INT and BOOL Matrices

DataMatrix: Showcase

Nutze mehrdimensionale Matrizen in Unreal Engine direkt über Blueprint-Nodes oder C++-Funktionen. Das DataMatrix-Plugin ist ideal für Projekte auf Windows, macOS und Linux und bietet effiziente Verwaltung großer Datenmengen sowie einfache Integration. Mit Unterstützung für DataTables und Multi-Threading ermöglicht DataMatrix flexible und performante Datenstrukturen. Dank umfassender Dokumentation und benutzerfreundlicher Blueprints ist der Einstieg sowohl für Anfänger als auch für erfahrene Entwickler mühelos möglich.

Dokumentation & News

Table of Contents

Installation und Einrichtung (für Source)

  1. Projektdateien neu generieren: Rechtsklicke auf die .uproject-Datei und wähle „Generate Visual Studio project files“ (oder das entsprechende Tool für deine IDE).

  2. Projekt kompilieren: Öffne dein Projekt in Unreal Engine. Der Editor sollte das Plugin automatisch erkennen und kompilieren.

  3. Plugin aktivieren: Gehe zu Settings > Plugins, suche nach „DataMatrix“ und stelle sicher, dass es aktiviert ist.

  4. Plugin aktivieren: Gehe zu Edit > Plugins, suche nach „DataMatrix“ und stelle sicher, dass es aktiviert ist.

				
					YourProject/
└── Plugins/
    └── DataMatrix/

				
			

Datenstrukturen

FDataMatrixInt

FDataMatrixInt ist eine USTRUCT, die eine mehrdimensionale Matrix für int32-Werte repräsentiert.

				
					USTRUCT(BlueprintType)
struct DATAMATRIX_API FDataMatrixInt
{
    GENERATED_BODY()

public:
    UPROPERTY(BlueprintReadWrite, Category = "DataMatrix")
    TArray<int32> IntMatrix;

    UPROPERTY(BlueprintReadWrite, Category = "DataMatrix")
    TArray<int32> Dimensions;
};

				
			

FDataMatrixInt

FDataMatrixBool ist eine USTRUCT, die eine mehrdimensionale Matrix für bool-Werte repräsentiert.

				
					USTRUCT(BlueprintType)
struct DATAMATRIX_API FDataMatrixBool
{
    GENERATED_BODY()

public:
    UPROPERTY(BlueprintReadWrite, Category = "DataMatrix")
    TArray<bool> BoolMatrix;

    UPROPERTY(BlueprintReadWrite, Category = "DataMatrix")
    TArray<int32> Dimensions;
};

				
			

Verwendung in Blueprints

Initialisierung der Matrix

Synchronisierte Initialisierung

 

  1. InitializeMatrixInt / InitializeMatrixBool
    • Beschreibung: Initialisiert eine FDataMatrixInt oder FDataMatrixBool Struktur mit den angegebenen Dimensionen.
    • Eingaben:
      • Matrix (Referenz): Die zu initialisierende Matrix.
      • In Dimensions (Array von int32): Die Dimensionen der Matrix, z.B. [2, 2] für eine 2×2 Matrix.
    • Beispiel:
      • Erstelle eine Variable MyMatrix vom Typ FDataMatrixInt.
      • Verwende den Node InitializeMatrixInt und verbinde MyMatrix mit dem Matrix-Pin.
      • Erstelle ein Make Array mit [2, 2] und verbinde es mit In Dimensions.

 

Asynchrone Initialisierung mit Multi-Threading

 

  1. InitializeMatrixIntAsync / InitializeMatrixBoolAsync
    • Beschreibung: Initialisiert eine FDataMatrixInt oder FDataMatrixBool Struktur asynchron und ruft einen Callback auf.
    • Eingaben:
      • Matrix: Die zu initialisierende Matrix.
      • In Dimensions (Array von int32): Die Dimensionen der Matrix.
      • On Completed (Delegate): Das Event, das nach der Initialisierung aufgerufen wird.
    • Beispiel:
      • Erstelle eine Variable MyMatrix vom Typ FDataMatrixInt.
      • Verwende den Node InitializeMatrixIntAsync und verbinde MyMatrix, [2, 2] und ein Custom Event OnInitializeMatrixIntCompleted.

Setzen und Abrufen von Werten

SetValueInt / SetValueBool
  • Beschreibung: Setzt einen Wert (int32 oder bool) an den angegebenen Indizes.
  • Eingaben:
    • Matrix (Referenz): Die Zielmatrix.
    • Indices (Array von int32): Die Position, z.B. [0, 1].
    • Value: Der zu setzende Wert, z.B. 42 oder True.
  • Beispiel:
    • Verwende SetValueInt, verbinde MyMatrix, [0, 1] und den Wert 42.
GetValueInt / GetValueBool
  • Beschreibung: Holt einen Wert (int32 oder bool) von den angegebenen Indizes.
  • Eingaben:
    • Matrix: Die Quellmatrix.
    • Indices (Array von int32): Die Position, z.B. [0, 1].
  • Ausgabe:
    • Return Value: Der abgerufene Wert, z.B. 42 oder True.
  • Beispiel:
    • Verwende GetValueInt, verbinde MyMatrix und [0, 1], und verbinde den Return-Wert zu einem Print String.

Beispiele: 2x2 und 2x2x2 Matrizen

2×2 Matrix
  1. Initialisierung:
    • Dimensionen: [2, 2]
  2. Setzen von Werten:
    • [0,0] = 1
    • [0,1] = 2
    • [1,0] = 3
    • [1,1] = 4
  3. Abrufen von Werten:
    • Werte von [0,0] bis [1,1] abrufen und anzeigen.
2x2x2 Matrix
  1. Initialisierung:
    • Dimensionen: [2, 2, 2] (Layer, Zeilen, Spalten)
  2. Setzen von Werten:
    • [0,0,0] = 1
    • [0,0,1] = 2
    • [0,1,0] = 3
    • [0,1,1] = 4
    • [1,0,0] = 5
    • [1,0,1] = 6
    • [1,1,0] = 7
    • [1,1,1] = 8
  3. Abrufen von Werten:
    • Werte von [0,0,0] bis [1,1,1] abrufen und anzeigen.

Hinweis: Bei einer 2x2x2 Matrix sind die Indizes [Layer, Zeile, Spalte] relevant, z.B. [1,1,1] ist die zweite Layer, zweite Zeile, zweite Spalte.

DataMatrix - Create INT and BOOL Matrices
DataMatrix - Create INT and BOOL Matrices - EXAMPLE

Verwendung in C++

Initialisierung der Matrix

Synchronisierte Initialisierung

 

1.  Header einbinden:

				
					#include "DataMatrixFunctionLibrary.h"

				
			

2.  Matrix deklarieren und initialisieren:

				
					FDataMatrixInt MyMatrix;
TArray<int32> Dimensions = {2, 2};
UDataMatrixFunctionLibrary::InitializeMatrixInt(MyMatrix, Dimensions);
				
			
Asynchrone Initialisierung mit Callbacks

1.  Callback-Funktion erstellen:

				
					UCLASS()
class YOURPROJECT_API AYourActor : public AActor
{
    GENERATED_BODY()

public:
    virtual void BeginPlay() override;

    UFUNCTION()
    void OnInitializeMatrixIntCompleted(FDataMatrixInt Matrix);
};

				
			

2. Implementierung der Callback-Funktion:

				
					void AYourActor::OnInitializeMatrixIntCompleted(FDataMatrixInt Matrix)
{
    TArray<int32> Indices = {1, 0};
    UDataMatrixFunctionLibrary::SetValueInt(Matrix, Indices, 42);
    int32 Value = UDataMatrixFunctionLibrary::GetValueInt(Matrix, Indices);
    UE_LOG(LogTemp, Log, TEXT("Wert an Position [1,0]: %d"), Value);
}

				
			

3. Asynchrone Initialisierung starten:

				
					void AYourActor::BeginPlay()
{
    Super::BeginPlay();

    FDataMatrixInt MyMatrix;
    TArray<int32> Dimensions = {2, 2};

    UDataMatrixFunctionLibrary::InitializeMatrixIntAsync(MyMatrix, Dimensions, FOnInitializeMatrixIntCompleted::CreateUObject(this, &AYourActor::OnInitializeMatrixIntCompleted));
}

				
			

Setzen und Abrufen von Werten

Setzen von Werten
				
					TArray<int32> Indices = {1, 0};
UDataMatrixFunctionLibrary::SetValueInt(MyMatrix, Indices, 42);

				
			
Anrufen von Werten
				
					int32 Value = UDataMatrixFunctionLibrary::GetValueInt(MyMatrix, Indices);
UE_LOG(LogTemp, Log, TEXT("Wert an Position [1,0]: %d"), Value);

				
			

Beispiele: 2x2 und 2x2x2 Matrizen

2×2 Matrix

1.  Initialisierung:

				
					FDataMatrixInt MyMatrix;
TArray<int32> Dimensions = {2, 2};
UDataMatrixFunctionLibrary::InitializeMatrixInt(MyMatrix, Dimensions);

				
			

2. Setzen von Werten:

				
					UDataMatrixFunctionLibrary::SetValueInt(MyMatrix, {0, 0}, 1);
UDataMatrixFunctionLibrary::SetValueInt(MyMatrix, {0, 1}, 2);
UDataMatrixFunctionLibrary::SetValueInt(MyMatrix, {1, 0}, 3);
UDataMatrixFunctionLibrary::SetValueInt(MyMatrix, {1, 1}, 4);

				
			

3. Abrufen von Werten:

				
					int32 Value00 = UDataMatrixFunctionLibrary::GetValueInt(MyMatrix, {0, 0});
int32 Value01 = UDataMatrixFunctionLibrary::GetValueInt(MyMatrix, {0, 1});
int32 Value10 = UDataMatrixFunctionLibrary::GetValueInt(MyMatrix, {1, 0});
int32 Value11 = UDataMatrixFunctionLibrary::GetValueInt(MyMatrix, {1, 1});

UE_LOG(LogTemp, Log, TEXT("Wert [0,0]: %d"), Value00);
UE_LOG(LogTemp, Log, TEXT("Wert [0,1]: %d"), Value01);
UE_LOG(LogTemp, Log, TEXT("Wert [1,0]: %d"), Value10);
UE_LOG(LogTemp, Log, TEXT("Wert [1,1]: %d"), Value11);

				
			
2x2x2 Matrix

1.  Initialisierung:

				
					FDataMatrixInt My3DMatrix;
TArray<int32> Dimensions3D = {2, 2, 2};
UDataMatrixFunctionLibrary::InitializeMatrixInt(My3DMatrix, Dimensions3D);

				
			

2. Setzen von Werten:

				
					UDataMatrixFunctionLibrary::SetValueInt(My3DMatrix, {0, 0, 0}, 1);
UDataMatrixFunctionLibrary::SetValueInt(My3DMatrix, {0, 0, 1}, 2);
UDataMatrixFunctionLibrary::SetValueInt(My3DMatrix, {0, 1, 0}, 3);
UDataMatrixFunctionLibrary::SetValueInt(My3DMatrix, {0, 1, 1}, 4);
UDataMatrixFunctionLibrary::SetValueInt(My3DMatrix, {1, 0, 0}, 5);
UDataMatrixFunctionLibrary::SetValueInt(My3DMatrix, {1, 0, 1}, 6);
UDataMatrixFunctionLibrary::SetValueInt(My3DMatrix, {1, 1, 0}, 7);
UDataMatrixFunctionLibrary::SetValueInt(My3DMatrix, {1, 1, 1}, 8);

				
			

3. Abrufen von Werten:

				
					UE_LOG(LogTemp, Log, TEXT("Wert [0,0,0]: %d"), UDataMatrixFunctionLibrary::GetValueInt(My3DMatrix, {0,0,0}));
UE_LOG(LogTemp, Log, TEXT("Wert [0,0,1]: %d"), UDataMatrixFunctionLibrary::GetValueInt(My3DMatrix, {0,0,1}));
// ... bis [1,1,1]

				
			

Verwendung mit DataTables

Erstellen einer DataTable

  • 1. Struktur wählen:
    • Erstelle eine Struktur kompatibel mit FDataMatrixInt oder FDataMatrixBool, z.B.:
				
					USTRUCT(BlueprintType)
struct DATAMATRIX_API FDataMatrixIntStruct
{
    GENERATED_BODY()

public:
    UPROPERTY(BlueprintReadWrite, Category = "DataMatrix")
    TArray<int32> Dimensions;

    UPROPERTY(BlueprintReadWrite, Category = "DataMatrix")
    TArray<int32> Data;
};

				
			
  • 2. DataTable erstellen:
    • Rechtsklicke im Content Browser und wähle Miscellaneous > DataTable.
    • Wähle die erstellte Struktur (FDataMatrixIntStruct) aus.
  • 3. DataTable benennen und bearbeiten:
    • Benenne die DataTable, z.B. DT_MyDataMatrixInt.
    • Füge neue Zeilen hinzu:
      • Dimensions: [2, 2] für eine 2×2 Matrix.
      • Data: [1, 2, 3, 4] für die Werte.

Initialisieren der Matrix aus einer DataTable

  • DataTable Row abrufen:

    • Verwende den Node „Get Data Table Row“.
    • Wähle die DataTable DT_MyDataMatrixInt aus.
    • Gib den Row-Namen ein, z.B. Row1.
  • Struktur aufbrechen:

    • Verwende „Break FDataMatrixIntStruct“, um auf Dimensions und Data zuzugreifen.
  • Matrix initialisieren:

    • Verwende den Node „InitializeMatrixWithDataInt“.
    • Eingaben:
      • Matrix: Deine Matrix-Variable (MyMatrix).
      • In Dimensions: Verbinde mit Dimensions aus der DataTable.
      • In Data: Verbinde mit Data aus der DataTable.

Erklärung der Blueprint Nodes

InitializeMatrixInt

  • Beschreibung: Initialisiert eine FDataMatrixInt-Struktur mit den angegebenen Dimensionen.
  • Eingaben:
    • Matrix (Referenz): Die zu initialisierende Matrix.
    • In Dimensions (Array von int32): Die Dimensionen der Matrix.
  • Ausgabe: Keine.

InitializeMatrixWithDataInt

  • Beschreibung: Initialisiert eine FDataMatrixInt-Struktur mit Dimensionen und vorgegebenen Daten.
  • Eingaben:
    • Matrix (Referenz): Die zu initialisierende Matrix.
    • In Dimensions (Array von int32): Die Dimensionen der Matrix.
    • In Data (Array von int32): Die Daten für die Matrix.
  • Ausgabe: Keine.

SetValueInt

  • Beschreibung: Setzt einen int32-Wert an den angegebenen Indizes.
  • Eingaben:
    • Matrix (Referenz): Die Matrix, in die der Wert gesetzt werden soll.
    • Indices (Array von int32): Die Indizes der Position.
    • Value (int32): Der zu setzende Wert.
  • Ausgabe: Keine.

GetValueInt

  • Beschreibung: Holt einen int32-Wert von den angegebenen Indizes.
  • Eingaben:
    • Matrix: Die Matrix, aus der der Wert geholt werden soll.
    • Indices (Array von int32): Die Indizes der Position.
  • Ausgabe:
    • Return Value (int32): Der abgerufene Wert.

ResizeMatrixInt

  • Beschreibung: Ändert die Dimensionen einer bestehenden FDataMatrixInt-Struktur.
  • Eingaben:
    • Matrix (Referenz): Die zu ändernde Matrix.
    • New Dimensions (Array von int32): Die neuen Dimensionen.
  • Ausgabe: Keine.

ClearMatrixInt

  • Beschreibung: Leert die Matrixdaten und Dimensionen einer FDataMatrixInt-Struktur.
  • Eingaben:
    • Matrix (Referenz): Die zu leere Matrix.
  • Ausgabe: Keine.

GetDimensionsInt

  • Beschreibung: Gibt die Dimensionen einer FDataMatrixInt-Struktur zurück.
  • Eingaben:
    • Matrix: Die Matrix, deren Dimensionen abgefragt werden.
  • Ausgabe:
    • Return Value (Array von int32): Die Dimensionen der Matrix.

GetDimensionsAsStringInt

  • Beschreibung: Gibt die Dimensionen einer FDataMatrixInt-Struktur als kommagetrennten String zurück.
  • Eingaben:
    • Matrix: Die Matrix, deren Dimensionen abgefragt werden.
  • Ausgabe:
    • Return Value (String): Die Dimensionen als String, z.B. "2,2".

InitializeMatrixIntAsync

  • Beschreibung: Initialisiert eine FDataMatrixInt-Struktur asynchron mit den angegebenen Dimensionen und ruft einen Callback auf, wenn die Initialisierung abgeschlossen ist.
  • Eingaben:
    • Matrix: Die Matrix, die initialisiert werden soll.
    • In Dimensions (Array von int32): Die Dimensionen der Matrix.
    • On Completed (Delegate): Das Event, das nach der Initialisierung aufgerufen wird.
  • Ausgabe: Keine.

Für FDataMatrixBool

Die Nodes sind analog zu den FDataMatrixInt-Versionen, ersetzen jedoch int32 durch bool.

Troubleshooting & Common Issues

Delegate-Typen nicht unterstützt: Stelle sicher, dass Delegates mit DECLARE_DYNAMIC_DELEGATE_OneParam deklariert sind und als const& in den Funktionen übergeben werden.

Kopierfehler bei TArray: Achte darauf, dass TArray-Zuweisungen korrekt sind und keine const-Qualifizierer verletzt werden. Verwende mutable in Lambda-Funktionen, wenn notwendig.

Compiler-Fehler bei Lambda-Funktionen: Deklariere Lambdas als mutable, um Änderungen an erfassten Kopien zu ermöglichen.

Thread-Sicherheitsprobleme: Implementiere geeignete Synchronisierungsmechanismen, wenn mehrere Threads auf dieselben Daten zugreifen.

Roadmap

Nach oben scrollen