Das Geometrie-Scripting bietet ihnen Blueprint- und Python-Funktionen zur Erstellung benutzerdefinierter Modellierungswerkzeuge und Workflows. Diese Anleitung behandelt die Grundlagen des Geometrie-Scriptings mit Blueprints. Die folgenden Schritte umfassen die Erstellung eines prozeduralen Mesh-Werkzeugs für das Level-Design, ähnlich den Geometrie-Werkzeugen, die für das Lyra-Beispielprojekt erstellt wurden.
Diese Anleitung zeigt Ihnen, wie Sie:
- Eine prozedurale Geometrie für das schnelle Blockieren von Levels generieren.
- Boolean-Operationen verwenden, um ein Mesh dynamisch auszuschneiden.
- Eine Statisches Mesh-Baken-Funktion erstellen.
Das Werkzeug, das Sie entwickeln, ist ein kleines Beispiel für die prozedurale Mesh-Generierung und Werkzeuge, die Sie mit Geometrie-Scripting erstellen können. Ein erweitertes Beispiel ist das Procedural Content Generation Framework, das Geometrie-Scripting als Basis benutzt. Weiter Informationen zu diesem Werkzeugsatz finden Sie unter Übersicht über die prozedurale Inhaltsgenerierung.
Weitere Workflows, die Sie neben der prozeduralen Generierung erstellen können, umfassen Folgendes:
- Zuweisen mehrerer Materialien an Assets.
- Mesh-Booleans mit Python anwenden.
- Generieren von Blocking-Volumes basierend auf Konvex-Hüllen.
Vorausgesetzte Kenntnisse
Um die Inhalt dieser Seite zu verstehen und zu nutzen, müssen Sie:
- Ein grundlegendes Verständnis von Blueprints haben.
- Mit dem Einführungsthema von Geometrie-Scripting vertraut sein, insbesondere mit den neuen Objekttypen.
Diese Anleitung verwendet die Third Person-Vorlage. Sie können jedoch ein beliebiges Projekt verwenden, um mitzumachen.
Aktivieren des Plugins
Die Verwendung des Geometrie-Scripting erfordert das Aktivieren des entsprechenden Plugins.
So aktivieren Sie das Plugin oder überprüfen, ob es bereits aktiviert ist:
-
Wählen Sie in der Menüleiste Edit > Plugins aus.
-
Geben Sie in der Suchleiste „geometry script“ ein.
- Aktivieren Sie das Geometry Scripting-Plugin und wählen Sie Yes im Popup-Dialog aus.
- Starten Sie die Engine neu.
Erstellen einer Blueprint-Klasse
Um loszulegen, müssen Sie sicherstellen, dass Sie die richtige Blueprint-Klasse haben. Da das Ziel ist, ein prozedurales Mesh für das Level-Design zu erstellen, müssen Sie die Klasse GeneratedDynamicMeshActor verwenden.
So wählen Sie eine Blueprint-Klasse aus:
- Klicken Sie mit der rechten Maustaste im Content Browser und wählen Sie Blueprint Class aus.
-
Suchen Sie nach GeneratedDynamicMeshActor und wählen Sie die Option aus.
- Geben Sie dem Blueprint den Namen BP_ProceduralGen.
Wenn Sie GeneratedDynamicMeshActor nicht als Option sehen, ist das Geometrie-Scripting-Plugin nicht aktiviert.
Event-Einrichtung
Nachdem Sie die Klasse erstellt haben, müssen Sie das spezifische Event einrichten, um das dynamische Mesh zu füllen, das Sie zur Erstellung Ihres Werkzeug verwenden werden.
So erstellen Sie das Event:
- Doppelklicken Sie im Inhaltsbrowser auf die Blueprint-Klasse.
- Öffnen Sie den EventGraph.
-
Klicken Sie mit der rechten Maustaste in das Diagramm und gen Sie „generated Mesh“ ein, um die verfügbaren Knoten zu filtern. Wählen Sie dann Event on Rebuild Generated Mesh aus. Dieses Event wird jedes Mal ausgelöst, wenn Sie die Parameter des dynamischen Mesh aktualisieren, wodurch das Mesh neu erstellt wird.
-
Machen Sie den Target Mesh-Output zu einer lokalen Variablen, indem Sie mit der rechten Maustaste auf seinen Pin klicken und Promote to Variable auswählen.
(w:600) - Geben Sie der Variable den Namen DynamicMesh, legen Sie den Typ auf Dynamic Mesh fest und lassen Sie ihn privat. Diese Variable repräsentiert das dynamische Mesh, das Sie bearbeiten.
Erzeugen von Geometrie
Nachdem Sie die Blueprint-Klasse und das Event erstellt haben, können Sie damit beginnen, Geometrie-Scripting-Funktionen hinzuzufügen. Das Ziel dieser Anleitung ist es, Blockout-Formen zu erstellen, die Sie transformieren und ausschneiden können. Dafür müssen Sie zuerst das Mesh erstellen, das Sie bearbeiten möchten.
So erstellen Sie ein Mesh:
- Ziehen Sie den Ausführungs-Pin der DynamicMesh-Variable und suchen und wählen Sie dann den Append Box-Knoten aus. Dadurch fügen Sie dem dynamischen Mesh einen Box-Grundkörper hinzu.
-
Verbinden Sie den Output-Pin der DynamicMesh-Variablen mit dem Target Mesh-Input-Pin.
Mit diesen ersten Knoten haben Sie ein prozedurales Mesh erstellt. Sie können den Blueprint testen, indem Sie ihn kompilieren und in Ihr Level ziehen. Weitere Formen, die Sie sofort erstellen können, finden Sie im Abschnitt Grundkörper-Generierung des Geometrie-Scripting-Referenzdokuments.
Hinzufügen von Transformations-Widgets
Um Ihre Transformation Ihres Mesh dynamisch anzupassen, können Sie interaktive Steuerelemente hinzufügen.
So fügen Sie interaktive Steuerelemente hinzu:
-
Erstellen Sie eine neue öffentliche Variable mit dem Namen BoxSize und legen Sie den Typ auf „Vector“ fest.
-
Aktivieren Sie im Details-Panel dieser Variable Instance Editable und Show 3D Widget. Legen Sie Default Value auf 200, 200, 200 fest. Das Aktivieren von „3D Widget“ erstellt einen Manipulator zur interaktiven Steuerung der X-, Y- und Z-Transformationen.
- Ziehen Sie die Variable und wählen Sie Get BoxSize aus.
- Klicken Sie mit der rechten Maustaste auf die Variable und wählen Sie Split Struct Pin aus. Die X-, Y- und Z-Werte der Variablen bestimmen die Dimensionen der Box.
-
Verbinden Sie die entsprechenden X-, Y- und Z-Werte mit den jeweiligen Dimensionswerten von Append Box.
- Kompilieren (Strg + Alt) und Speichern (Strg + S) Sie.
Sie können nun ein Würfel-Mesh erstellen und die Dimensionen dynamisch anpassen. Jede Anpassung im Widget generiert ein neues dynamisches Mesh der festgelegten Größe im Gegensatz zur Skalierung des Mesh.

Damit das Widget erscheint, müssen Sie sich im Selection Mode befinden.
Bearbeitung mit Booleans
Boolean-Operationen subtrahieren oder addieren Mesh-Paare. Diese sind nützlich, um schnell Detail- und Verschiebungseffekte zu Ihrem Mesh hinzuzufügen. Um das zweite Mesh für die Boolean-Funktion zu erstellen, können Sie ein temporäres Mesh aus einem Mesh-Pool allokieren. Durch das temporäre Mesh wird unnötige Geometrie im Editor vermieden, wodurch die Rechenleistung weniger beansprucht wird.
So erstellen Sie eine Boolean-Operation:
- Klicken Sie mit der rechten Maustaste auf das Diagramm und suchen und wählen Sie dann Get Compute Mesh Pool aus. Dadurch wird ein temporäres Mesh allokiert, um eine Boolean-Operation durchzuführen.
- Verbinden Sie den Append Box-Ausführungs-Pin mit Get Compute Mesh Pool.
-
Ziehen Sie den Return Value-Pin und suchen und wählen Sie dann Request Mesh aus. Verbinden Sie die Ausführungs-Pins.
- Ziehen Sie den Return Value-Pin und suchen und wählen Sie dann Append Cylinder aus. Dieser Knoten fügt ein Zylinder-Mesh hinzu, den Sie verwenden, um es vom Box-Mesh zu subtrahieren.
-
Machen Sie den Output Target Mesh zu einer Variable namens BoolMesh. Legen Sie den Typ auf Dynamic Mesh fest und lassen Sie ihn privat.
- Ziehen Sie den Ausführungs-Pin von BoolMesh und suchen und wählen Sie dann Apply Mesh Boolean aus. Sie werden diesen Knoten verwenden, um die Boolean-Operation auf Ihr Mesh anzuwenden.
- Ziehen Sie die DynamicMesh-Variable und verbinden Sie sie mit dem Target Mesh-Input von Apply Mesh Boolean.
-
Verbinden Sie BoolMesh mit dem Tool Mesh-Pin von Apply Mesh Boolean. Tool Mesh stellt das Mesh dar, mit dem Sie den Boolean ausführen möchten. Dieser Parameter ist der Grund, warum Sie den Knoten Append Cylinder hinzugefügt haben.
- Legen Sie den Operationstyp im „Apply Mesh Boolean“-Knoten auf Subtract fest.
- Nachdem Sie die benötigten Operationen angewendet haben, müssen Sie das temporäre Mesh in den Pool zurückgeben, damit dessen Speicher wiederverwendet werden kann. Verbinden Sie den Ausführungs-Pin von „Apply Mesh Boolean“ mit „Release All Compute Meshes“. Wenn das Event ausgelöst wird, werden alle im Pool allokierten Berechnungs-Meshs freigegeben.
- Kompilieren (Strg + Alt) und Speichern (Strg + S) Sie.
Wenn Sie den Blueprint kompilieren und im Level-Editor anzeigen, sehen Sie den booleschen Effekt möglicherweise nicht, weil er zu klein ist. Um den Effekt zu sehen, können Sie die Größe des Boolean-Mesh manuell festlegen oder sie mithilfe von Widgets dynamisch anpassen.
Hinzufügen von Widgets
Ebenso wie Sie ein Widget für den Box-Grundkörper erstellt haben, können Sie dasselbe für das Boolean-Mesh und die Position tun.
So erstellen Sie ein Widget:
-
Erstellen Sie im Panel Variables eine öffentliche Variable für die Position des Boolean-Mesh, benennen Sie sie BoolLocation und legen Sie den Typ auf Vector fest.
-
Aktivieren Sie im Details-Panel die Optionen Instance Editable und Show 3D Widget.
-
Klicken Sie mit der rechten Maustaste auf den Transform-Pin des Append Cylinder-Knotens, wählen Sie Split Struct Pin aus und verbinden Sie die BoolLocation-Variable mit Transform Location.
- Erstellen Sie eine weitere öffentliche Variable, benennen Sie sie BoolSize und legen Sie den Typ auf „Vector“ fest. Damit können Sie die Größe des Boolean-Mesh anpassen.
- Aktivieren Sie im Details-Panel die Option Instance Widget und Show 3D Widget, und legen Sie dann Standard Value auf 1, 1 und 5 fest.
- Ziehen Sie die Variable in das Diagramm und wählen Sie Get Bool Size aus.
- Klicken Sie mit der rechten Maustaste auf den Pin und wählen Sie Split Struct Pin aus.
-
Verbinden Sie die Bool Size-Pins mit den entsprechenden Transform Scale-Pins des Append Cylinder-Knotens.
- Kompilieren (Strg + Alt) und Speichern (Strg + S) Sie.
Nun haben Sie ein Mesh, das Sie dynamisch in verschiedene Formen transformieren können.

Baken zur Statisches Mesh-Funktion
Da Sie nun Ihr dynamisch generiertes Mesh haben, können Sie dieses auf bestehende Statisches Meshs für schnelles Level-Design anwenden. Dazu können Sie eine Funktion erstellen und sie im Details-Panel des Level-Editors verfügbar machen.
So steuern Sie, wann Statisches Meshs aktualisiert werden:
-
Erstellen Sie eine neue Funktion mit dem Namen Bake Static Mesh.
-
Aktivieren Sie im Details-Panel der Funktion Call in Editor, um das Event aus dem Level-Editor zu aktivieren.
- Ziehen Sie den Ausführungs-Pin der Funktion und suchen und wählen Sie dann Get Dynamic Mesh aus. Die Funktion zieht das aktuell verwendete dynamische Mesh.
-
Ziehen Sie den Get Dynamic Mesh-Ausführungs-Pin und suchen und wählen Sie dann Copy Mesh to Static Mesh aus. Verbinden Sie außerdem Return Value mit From Dynamic Mesh. Bei Ausführung der Funktion wird das dynamische Mesh auf das ausgewählte Statisches Mesh gebakt.
- Um das Statisches Mesh auszuwählen, das Sie baken möchten, müssen Sie den Parameter im Editor verfügbar machen. Erstellen Sie eine öffentliche Variable, benennen Sie sie TargetMesh und legen Sie den Typ auf Static Mesh fest.
- Ziehen Sie die Variable in das Diagramm und wählen Sie Get TargetMesh aus.
- Klicken Sie mit der rechten Maustaste auf den Variablen-Pin und wählen Sie Convert to Validated Get aus. Diese Konvertierung richtet die Funktion so ein, dass der Code nur ausgeführt wird, wenn Sie ein Mesh ausgewählt haben.
-
Verbinden Sie den Target Mesh-Pin mit To Static Mesh Asset.
Endgültiges Bake-Script.
- Kompilieren und Speichern Sie.
-
Die Schaltfläche Bake to Static Mesh erscheint nun im Details-Panel des Level-Editors. Bevor Sie die Schaltfläche verwenden, aktualisieren Sie das Ziel-Mesh auf das Statisches Mesh, das Sie baken möchten.
Überprüfen der Endergebnisse
Mit der Funktion „Statisches Mesh baken“ und dem prozeduralen Mesh-Script können Sie das dynamische Mesh verwenden, um die statischen Meshs in Ihrem Level kontinuierlich zu aktualisieren.
Das endgültige prozedurale Mesh-Script. Zum Vergrößern klicken.
Aufgaben für Sie
Versuchen Sie anhand Ihrer Erkenntnisse die folgenden Anpassungen vorzunehmen:
- Ändern Sie das Box-Mesh zu einer Kugel.
- Fügen Sie ein zweites Boolean-Mesh für zusätzliche Modellierungssteuerung hinzu.
- Verwenden Sie Create New Static Mesh Asset From Mesh, um das dynamische Mesh zu einem neuen Statisches Mesh zu baken anstatt zu einem bestehenden.