In diesem Artikel wird das Erstellen einer Inventarkomponente und das Verbinden mit dem erforderlichen Akteur erläutert. Da diese Komponente lediglich ein Repository von Objekten und die Logik ihres Ladens / Entladens ist, besteht kein Unterschied darin, sie auf ein Zeichen oder eine Art Box anzuwenden.
Sie können eine Komponente sowohl mit Blueprint als auch mit C ++ erstellen. Ich bevorzuge die zweite Methode, da ich die C ++ - Funktionalität aktiv nutzen werde.
Zunächst erstellen wir eine Zellstruktur zum Speichern eines Elements. Ich bevorzuge es, es in einer separaten .h- Datei zu speichern, um bei Bedarf eine freie Verbindung herzustellen :
Ja, unsere Inventarzelle enthält nur 3 Variablen: Kennung, Menge und eindeutige Parameter. Nichts Überflüssiges. Alle Daten können problemlos kopiert, gespeichert und heruntergeladen werden. Keine Texturen, Verweise auf Schauspieler usw. nicht hier. Alle zusätzlichen Informationen können aus der Datenbank des DataAsset heruntergeladen werden , über die wir bereits gesprochen haben.
Höchstwahrscheinlich haben Sie bereits eine andere StructItemFactors.h- Struktur bemerkt, die am Anfang verbunden war. Dies ist nichts weiter als ein Aufbewahrungsort für eindeutige Eigenschaften des Objekts (in Form eines Schwimmers ) wie Verschleiß, Beschädigung usw. Das heißt, Eigenschaften, die nur dieser Kopie des Betreffs eigen sind, und keine andere ist dieselbe. Diese Struktur ist sehr einfach:
Es ist erwähnenswert, dass in der obigen Struktur eine sehr interessante Funktion enthalten ist, die unser Leben erheblich vereinfachen soll:
friend bool operator==(const FItemFactor & Lhs, const FItemFactor & Rhs) { return Lhs.ItemFactorTag == Rhs.ItemFactorTag && Lhs.ItemFactor == Rhs.ItemFactor; }
Dies ist nichts weiter als ein Vergleichsoperator == , den wir für diese Struktur verwenden können, um nicht jedes Mal Elemente dafür zu extrahieren. Sehr bequem.
Also, mit den Strukturen fertig. Wir fahren mit der Erstellung der Komponente fort:
DreampaxContainerComponent.h Wenn im obigen Code, aktivieren Sie die Zeile
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
Anschließend können Sie diese Komponente direkt mit Blueprint verbinden . Ich mache das lieber in C ++ . Für Character sieht es so aus:
Inventory = CreateDefaultSubobject<UDreampaxContainerComponent>(TEXT("Inventory"));
Nun, für eine Truhe wie diese:
ADreampaxActorContainer::ADreampaxActorContainer(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { Container = CreateDefaultSubobject<UDreampaxContainerComponent>(TEXT("Container")); }
Wie Sie sehen können, liegt der Unterschied nur in den Namen der Variablen.
Im nächsten Artikel werde ich über die Funktionen der Replikation sprechen (einfach an den Fingern ), die unser Inventar zu einem echten Multiplayer-Modus machen.