Dieser Artikel lautet: Wie man Blueprints und C++- Kursnotizen in der Spieleentwicklung in Einklang bringt
Der Originalkurs ist sehr gut, leicht verständlich und enthält auch viele Entwicklungstipps. sehr empfehlenswert!
Artikelverzeichnis
Blaupausen vs. C++-Ähnlichkeiten
Beide können zur Implementierung der Gameplay-Logik verwendet werden.
Die folgenden zwei Beispiele sind Beispiele dafür, wie Blueprint und CPP dieselbe Logik implementieren:
Tatsächlich ist ersichtlich, dass die Implementierungsmethoden ähnlich sind
Verschiedene Funktionen von Blueprints vs. C++
C++
- Große Auswahl an Nutzungsszenarien: Hinzufügen neuer Modi zum Editor, Entwicklung unabhängiger Tools, Zugriff auf externe Bibliotheken, Hinzufügen von benutzerdefiniertem Rendering-Code usw.
- Effizient: Benötigt weniger CPU-Anweisungen. Es sind keine zusätzlichen Stack-Operationen und Funktionsaufrufe erforderlich
- Die Entkopplung ist praktisch: Durch die Modulbeschränkung von cpp können relativ unabhängige Funktionen in einem Modul versiegelt werden, und die Module können aus der Syntax nur in eine Richtung referenziert werden
- Die Position und Wirkung des Netzes kann nicht direkt beobachtet werden
- Logikfehler können zu schweren Abstürzen führen
- Unterstützung für den Import externer Bibliotheken
- Einfacherer Diff-Vergleich und Versionszusammenführung: Einfaches Diff und Zusammenführen
Entwurf
- Einzelnutzungsszenario: Es ist für das Gameplay selbst konzipiert und eignet sich daher nur zum Schreiben von Gameplay-Logik
- Ineffizient: Verbraucht mehr CPU-Anweisungen. Im Vergleich zu C++ muss die Ausführung der Blueprint-Logik vor dem Aufruf der nativen Funktion Parameter vom Stapel übernehmen und das zurückgegebene Ergebnis nach dem Aufruf am angegebenen Speicherort der virtuellen Skriptmaschine speichern. Um eine Funktion zu realisieren, kann der Stapelzugriff außerdem mehrmals ausgeführt werden, während Inlining direkt in CPP verwendet wird, um ihn einmal abzuschließen.
- Die Struktur ist relativ zufällig und unterstützt keine Modulteilung.
- Visualisierung: Sie können
视口
den visuellen Designeffekt direkt sehen - Es ist nicht leicht, einen schweren Absturz zu verursachen
- Automatische Zusammenführung nicht möglich. Es können nur lokale und Remote-Versionen unterschieden werden, historische Versionen können jedoch nicht unterschieden werden
Empfehlungen
Effizienz
Wie aus dem folgenden Aufrufdiagramm ersichtlich ist, sind die vom Blueprint und der unteren Ebene von C++ aufgerufenen nativen Funktionen tatsächlich dieselben ( UKismetMathlibrary;:MakeVector()
), aber die Version des Blueprints muss einige Stapeloperationen ausführen, um Daten von der virtuellen Skriptmaschine zu übertragen.
Obwohl die Effizienz des Blueprints relativ gering ist, macht die Erhöhung seines Overheads keinen großen Teil des CPU-Budgets aus, es sei denn, Hunderte oder Tausende von Akteuren führen diese Blueprint-Logik aus . Darüber hinaus können Sie diesen Effizienzunterschied auch beseitigen , indem Sie die Blueprint-Nativeisierungsfunktion aktivieren und den Blueprint direkt in cpp kompilieren. (PS: Aber diese Methode wird dem Projektkonstruktionsprozess einige Schritte und eine instabile Komplexität hinzufügen
Ob und wo die Blueprint-Logik aus Effizienzgründen in cpp geändert werden soll, hängt also auch von der jeweiligen Situation ab. Nur wenn die Systemeffizienz unter der Prämisse, möglichst wenig Inhalt zu ändern, so weit wie möglich verbessert wird, ist eine Änderung erforderlich.
Hier können Sie mit UEprofiler den aktuellen Leistungsengpass quantifizieren und finden
Darüber hinaus wird empfohlen, die Logik des zugrunde liegenden Systems auf niedriger Ebene, eine große Anzahl von Schleifenoperationen, eine große Anzahl von Datenoperationen und die Verarbeitung einer großen Anzahl von Akteuren in CPP zu integrieren.
Architektur-Design
Aufgrund seiner eigenen Syntaxunterstützung kann cpp das Architekturdesign und die Systementkopplung besser durchführen. Blueprints können nicht in Module unterteilt werden.
Daher wird beim Entwurf der Kernmodularchitektur die Verwendung von cpp empfohlen
visuelle Gestaltung
Für dekorative Details auf hoher Ebene ist die Blaupausenvisualisierung besser geeignet als C++
Zum Beispiel: Es wird empfohlen, das Design der Zeitleiste, der Animation, des Netzes, der Materialparameter, des Partikeleffekts, des zu verwendenden Tons und seiner Positionsanpassung im Entwurf zu implementieren
Wenn es für CPP logisch notwendig ist, die Kollision von Netzen usw. dynamisch zu steuern, kann dieses Netz in CPP definiert werden. Wenn das Mesh jedoch nur zur Anzeige dient, kann es direkt im Blueprint definiert werden