Part 02 – Atompunk Projekt

Modular und Random Charakter | Wechsel von Kleidung und Materialen

In diesem Video geht Hauptsächlich um den Austausch des Charakters. Zum Einsatz kommt das kostenlose “Stylized Character Kit: Casual 01“, es hat etliche Assets und Materialen dabei, es bietet sich deshalb an, einen modularen Charakter aufzubauen. Wir werden dazu ein Custom Event und drei Funktionen anlegen, mit deren Hilfe bei jedem Neustart zufällig Kleidungstücke ausgewählt werden. Dazu zählt auch, das zufällig die Materialen gesetzt werden.

Im Spiel kann dann per Tastendruck die Kleidung erneut geändert werden. Außerdem können die Materialen per Taste der Reihe nach durchgeschaltet werden.

Zudem wird die Steuerung des Charakters geändert und das Tutorial Widget vom Superhero Flight wird ausgeblendet.

Steuerung anpassen

Los geht es mit der Anpassung der Steuerung, WASD ist doch etwas unpraktisch. Die Datei (IMC_SuperheroFlight) dazu findest Du im Input-Ordner von SuperheroFlight. Die Steuerung erfolgt dann mit den Pfeiltasten und der linken Maustaste.

Der Editor-Text aus dem Video:

In die Zwischenablage kopieren

Download des neuen Charakters

Der Charakter ist für die UE4 angelegt und lässt sich nicht ohne weiteres in der UE5 nutzen. Man kann ihn zwar schon direkt in ein UE5 Projekt laden, dann werden aber Schatten beim bewegen in die Landschaft “gemalt”. Um das zu umgehen, muss zuerst ein Projekt in der UE 4.27 angelegt werden, dieses kann dann im Ordner auf 5.0 “geswitcht” werden.

Beim starten des Projekts werden alle Umstellungen von der Engine vorgenommen. Der Ordner  “SCK_Casual01” kann dann in den “Atompunk” Ordner kopiert werden.

Der Editor-Text aus dem Video:

In die Zwischenablage kopieren

Charakter einrichten

Lege eine Kopie des UE4 SuperheroFlight Charakters an: “BP_Player_UE4_SCK“. UE5 können wir nicht verwenden, da der SCK-Charakter nicht auf UE5 geriggt ist. Das wäre etwas aufwendiger, mache ich vielleicht in einem extra Video. Die Fuss-KI ist dann halt nicht perfekt, wie bei Manny. Ich denke aber, damit kann man leben.

Tausche nun das Haupt-Mesh (CharacterMesh0) mit “MESH_H_A1” aus und lade die Meshes der Kleidung und des Körpers darunter. Wichtig, sie müssen unterhalb des Haupt-Meshes sein. Benenne sie um, damit man besser weiß, was dahinter steckt. Die Meshes sind zuerst falsch ausgerichtet, das ändert sich sobald Du die Location und die Rotation auf ‘0,0‘ setzt.

Gehe nun in des “Construction Script” und lade mit der Node “Set Leader Pose Component(Mesh)” alle Meshes. Compilen / Speichern und der neue Charakter sollte einsetzbar sein. Ziehe ihn in den Viewport und stelle den Pawn auf Player 0.

Der Editor-Text aus dem Video:

In die Zwischenablage kopieren

Zufälliges Outfit

Wir wechseln zum EventGraph und legen dort das Custom Event “RandomizeOutfit” an. Die Blueprint dazu legen wir in die Funktion “RandomPart“. Damit was ausgewählt werden kann, muss zuvor aber noch die Outfits in Arrays gespeichert werden.

Folgende Array bzw. Variablen mit Variable Type “Skeletal Mesh” werden benötigt:

UpperBodyParts:

  • MESH_T_00
  • MESH_T_03
  • MESH_T_01
HairParts:

  • MESH_A_02
  • MESH_A_03
GlassesParts:

  • MESH_A_01
BeardParts:

  • MESH_A_04

Damit die Funktion aufgerufen wird, verbinde sie mit dem Custom Event “RandomizeOutfit“. Das ganze 4mal mit den entsprechenden Outfits. Im “Construction Script” muss nun noch das Custom Event eingefügt werden, damit es aufgerufen wird. Im Moment werden die Meshes noch von den Components vorgegeben und müssen gelöscht werden.

Nun sollte bei jedem “Play” des Spieles bzw. bei Klicken auf “Compile” das Outfit zufällig ausgewählt werden. Es wird aber nicht berücksichtigt, das die Outfits Harre, Bart und Brille auch nicht gesetzt werden können. Dazu fügen wir noch in der Funktion den Input “AllowNoting” ein und setzen den hacken bei Aufruf der Funktion.

Der Editor-Text aus dem Video:

In die Zwischenablage kopieren

Im Spiel neues Outfit auswählen

Soweit so gut, aber was ist, wenn das Outfit nicht gefällt. Es im Spiel zu ändern, wäre nicht schlecht. Wir fügen dazu im “Event Graph” einen Aufruf des Events “Randomize Outfit” mit der Taste M ein. Kann natürlich auch jede andere Taste sein.

Zuvor laden wir aber noch einen Sound für den Wechsel herunter. Auf der Seite https://sonniss.com/gameaudiogdc wird jedes Jahr jede Menge kostenlose Sounds zur Verfügung gestellt. Hier kann man immer mal schauen, ob was dabei ist. Ich fand Sound “Organic_Whoosh_14” ganz passend. Ziehe ihn in den Sound-Ordner und starte ihn bei jeden Wechsel mit dem Note “Play Sound at Location“.

Der Editor-Text aus dem Video:

In die Zwischenablage kopieren

Material zufällig tauschen

Das mit den zufälligen Outfits klappt soweit ganz gut, was noch fehlt, sind die Materialen. Hier erstellen wir die Funktion “RandomMaterial” mit den Inputs “PartMesh” (Skinned Mesh) und “MaterialOptionen” (Material Interface). Bitte beachten, es muss “Material Interface” gewählt werden, sonst klappt es nicht mit der Zuordnung. Es wird zuerst die Länge des Array ermittelt und “1” abgezogen, da Arrays immer mit “0” anfangen zu zählen. Aus der Anzahl wird zufällig ein Material-Index gezogen und das Material gesetzt.

Nun müssen die Materialien in Arrays gespeichert werden, das kennst Du ja bereits von den Outfits. Mit dem Unterschied das als Variable Type “Material Interface” genommen wird. Folgende Arrays werden angelegt:

TrousersMaterials:

  • Mi_L_01_1
  • Mi_L_01_2
  • Mi_L_01_3
  • Mi_L_01_4
  • Mi_L_01_5
JacketMaterials:

  • Mi_T_01_1
  • Mi_T_01_2
  • Mi_T_01_3
  • Mi_T_01_4
  • Mi_T_01_5
GlassesMaterials:

  • Mi_A_01_1
  • Mi_A_01_2
  • Mi_A_01_3
  • Mi_A_01_4
  • Mi_A_01_5
TShirtMaterials:

  • Mi_T_03_1
  • Mi_T_03_2
  • Mi_T_03_3
  • Mi_T_03_4
  • Mi_T_03_5
BeardMaterials:

  • Mi_A_04_1
  • Mi_A_04_2
  • Mi_A_04_3
  • Mi_A_04_4

ACHTUNG: Im Video werden die falschen Materialen zugeordnet!

HairLureMaterials:

  • Mi_A_02_1
  • Mi_A_02_2
  • Mi_A_02_3
  • Mi_A_02_4
HairGridMaterials:

  • Mi_A_03_1
  • Mi_A_03_2
  • Mi_A_03_3
  • Mi_A_03_4

Damit die Funktion aufgerufen wird, muss sie im EventGraph eingefügt werden. Gehe zum letzten “Random Part” und setze “Random Material” ein, verknüpfe Sie noch mit den Mesh und der Material-Array.
Das machen wir bei der Hose, der Brille und dem Bart [1]. Beim Oberköper ist es nicht ganz so einfach, hier gibt es 3 Möglichkeiten: T-Shirt, Jacke und Body. Ebenso bei der Frisur, hier haben wir 2 Möglichkeiten. Deshalb teilen wir den Pfad erst einmal mit “Sequence” (Then 0, Then 1).

Dann splitten wir anhand des Namens des Meshes, das der Oberkörper erhalten hat, auf. Den Namen erhalten wir über die Notes “Get Display Name” und “Get Skinned Asset“. Mit einem “Switch on String” verzweigen wir entsprechend. Wobei der Body als Default gesetzt ist und auch nur ein Material hat [2].

Das gleiche machen wir so bei den Harren, hier gibt es nur 2 Möglichkeiten [3]. Sollte ein Mesh nicht gesetzt sein, erfolgt kein Material-Wechsel da der Switsch auch nicht reagiert.

Der Editor-Text aus dem Video:

In die Zwischenablage kopieren

Material durchschalten

So könnte man es eigentlich lassen, aber mir reicht es noch nicht. Schön wäre, wenn die Materialen der Reihe nach geändert würden. Dazu lege die Funktion “NextMaterial” an, mit dem Input “PartMesh” (Skinned Mesh). Wir benötigen zum zwischen speichern, zwei lokale Variablen:

  • MaterialArray – Variable Typ: Material Interface -> Array
  • MaterialIndex – Variable Typ: Integer -> Single

ACHTUNG: Im Video wird der Integer “MaterialIndex” als “Array” angelegt, muss aber als “Single” angelegt werden!

Zunächst wird ermittelt, welches Mesh geändert werden soll und die dazu gehörige Material-Array wird gesetzt (Set Material Array). Dann wird der derzeitige Material-Index abgefragt und Lokal gespeichert (Get Index). Jetzt wird der Material-Index um “1” hochgezählt und überprüft ob die Länge der Material-Array überschritten ist, sollte das der Fall sein, wird der Index auf “0” gesetzt. Das Ergebnis wird Lokal gespeichert (Next Material).

Da wird nun alle nötigen Daten ermittelt haben, können wir diese mit “GET” abfragen und das Material mit “Set Material” setzen. Zu guter Letzt spielen wir mit “Spawn Sound at Location” noch den Wechsel-Sound ab.

Die Funktion steht, sie muss nur noch im EventGraph aufgerufen werden. Als Event nehmen wir eine Key-Eingabe, ich verwende hier die Nummernblock Tasten 1-5. Du kannst hier natürlich andere Tasten nehmen. Mit der Funktion “NextMaterial” verbinden und das jeweilige Mesh verknüpfen. Fertig.

Der Editor-Text aus dem Video:

In die Zwischenablage kopieren

Tutorial Widget ausblenden

Bevor wir zum Ende des (doch etwas längeren) Videos kommen, blenden wir noch das Tutorial Widget aus und entfernen den bisherigen Charakter (Sorry Quinn).

Wie man den Charakter entfernt muss ich sicher nicht umschreiben. Um das Widget auszublenden, sucht ihr im EventGraph nach dem Event “BeginnPlay” und kappt mit Rechtsklick und “Break This Link” die Verbindung. Dann verschiebt ihr das Event “BeginnPlay” eine Box nach rechts in die Comment-Box “Add Input Mapping“. Dort dann noch mit “Cast to PlayerController” verlinken. Compile und Save. Das wars…

Der Editor-Text aus dem Video:

In die Zwischenablage kopieren

Das Video zum Tutorial auf YouTube:

Aus datenschutzrechlichen Gründen benötigt YouTube Ihre Einwilligung um geladen zu werden. Mehr Informationen finden Sie unter Datenschutzerklärung.
Akzeptieren