【UE】Blueprints vs. C++: Wie sie zusammenpassen und warum Sie beide verwenden sollten

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!


Fügen Sie hier eine Bildbeschreibung ein

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:
Fügen Sie hier eine Bildbeschreibung ein

Tatsächlich ist ersichtlich, dass die Implementierungsmethoden ähnlich sind

Fügen Sie hier eine Bildbeschreibung ein

Verschiedene Funktionen von Blueprints vs. C++

Fügen Sie hier eine Bildbeschreibung ein

C++

  1. 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.
  2. Effizient: Benötigt weniger CPU-Anweisungen. Es sind keine zusätzlichen Stack-Operationen und Funktionsaufrufe erforderlich
  3. 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
  4. Die Position und Wirkung des Netzes kann nicht direkt beobachtet werden
  5. Logikfehler können zu schweren Abstürzen führen
  6. Unterstützung für den Import externer Bibliotheken
  7. Einfacherer Diff-Vergleich und Versionszusammenführung: Einfaches Diff und Zusammenführen

Entwurf

  1. Einzelnutzungsszenario: Es ist für das Gameplay selbst konzipiert und eignet sich daher nur zum Schreiben von Gameplay-Logik
  2. 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.
  3. Die Struktur ist relativ zufällig und unterstützt keine Modulteilung.
  4. Visualisierung: Sie können 视口den visuellen Designeffekt direkt sehen
  5. Es ist nicht leicht, einen schweren Absturz zu verursachen
  6. 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.
Fügen Sie hier eine Bildbeschreibung ein

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

Fügen Sie hier eine Bildbeschreibung ein

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

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44559752/article/details/127184515
conseillé
Classement