Rekrutierungsprogrammierer für Herren UE4, Teil 1



Lange wollte ich eine Liste von Fähigkeiten und Werkzeugen erstellen, die meiner Meinung nach in das "Gentleman-Set" eines jeden Programmierers unter Unreal Engine 4 aufgenommen werden sollten . Erst neulich habe ich in einem UE4-Chat Folgendes gesehen:

> Blaupausen, Animationsentwickler, Tech Art, AI, Multiplayer, Editor-Erweiterungen. das erste, was mir in den Sinn kam

> Was mir in den Sinn kommt: Blaupausen, Animationen, KI, Materialeditor, Widgets, Slate, Editorerweiterungen, ue4-Plugins, Physik, Beleuchtung, Rendering, C ++
+ Wie viel Zeit mit dem Motor und dem Land gearbeitet hat, das war's :)

In solchen Formulierungen ist alles, was gesagt wird, nur eine Sammlung von Wörtern. Aus diesem Grund habe ich einen Fragebogen für diejenigen zusammengestellt, die UE4-Programmierer werden möchten, und die ihr Niveau für diejenigen beurteilen können, die sich bereits als fortgeschrittene Programmierer für UE4 betrachten.

Verwenden Sie keine gebräuchlichen Wörter


Alle in den Zitaten aufgeführten Begriffe sind ein ganzer Komplex von Fähigkeiten, Prinzipien und Technologien. Wenn Sie sie in einem Wort ausdrücken, vermitteln Sie in keiner Weise, was genau angewendet werden muss und wie „tief“ es studiert werden muss.

Ich werde die Hauptkategorien durchgehen und Fragen stellen, bei denen Sie die Antwort wissen sollten, um zu sagen: "Ich verstehe das."

Grundlagen der Motorarchitektur


  • Was sind die Unterschiede zwischen den AActor UObject und AActor ? Was ist der grundlegende Unterschied? Ist es möglich, UObject zu zwingen, dieselben Funktionen auszuführen? Warum sind AGameState und APlayerState ector? Eine ähnliche Frage zu AGameMode und AHUD .
  • Wie unterscheidet sich AGameMode von UGameInstance ? Wofür werden beide verwendet? Warum wird APlayerController benötigt und warum ist es ein Ektor?
  • Wofür wird UPROPERTY verwendet? Kann ich es durch SharedRefs ersetzen? Wie löse ich die zirkuläre Abhängigkeit in Ektoren (der Elternteil hat einen Zeiger auf das Kind, das Kind auf den Elternteil)? Wann wird UObject gelöscht? Wie kann eine Entität vor dem Löschen durch Garbage Collector geschützt werden? Wie entferne ich einen Schauspieler ?
  • Was ist ein CDO ? Wie kann ich die Kette der Reference'ov-Klassen untereinander durchbrechen und warum?
  • Wie ist die Reihenfolge der Initialisierung der Hauptentitäten des Motors (zumindest auf Controller- / Pavna- / State-Ebene)? Was ist die Spawn-Reihenfolge von AActor?
  • Komponente in Komponente - gut oder schlecht?
  • Was ist ein WorldContextObject ? Ist es möglich, es zu UObject zu UObject , und wenn ja, von wo?
  • Was ist der grundlegende Unterschied zwischen Slate und UMG ?

Blaupausen


  • Wie unterscheiden sich Makros von Funktionen?
  • Was genau führt zur Bildung von Referenc zwischen Klassen? Vermögenswerte? Wie vermeide ich das?
  • Was ist Blunts Nativization und wozu dient sie? Was sind die Nachteile der enthaltenen Nativeisierung?

Netzwerk


  • Wo können Benutzer-Gameplay-Daten (z. B. Inventar oder Punkte) während einer Spielsitzung gespeichert werden? Ist APlayerController richtige Ort?
  • Wie werden PlayerState auf Clients repliziert? Wie ist der Lebenszyklus von PlayerController und PlayerState beim erneuten PlayerState eines Players?
  • Wie kann man die Replikation von Daten nach Rollen unterscheiden? Was sind Netzwerkrollen ? Von wem und nach welchen Regeln werden sie ernannt?
  • In welchen Klassen kann ich RPC aufrufen und warum? Ist es möglich, diese Funktion auf eine andere Klasse / Entität zu erweitern? Was ist der Overhead eines RPC-Aufrufs?
  • Wie werden Ektorkomponenten repliziert? Wie kann man verstehen, dass der Ektor "vollständig" repliziert wurde? Was passiert, wenn Sie beispielsweise 3 MB Daten in einem Ektor replizieren möchten: Wie verhält sich dieser Ektor? Spiel im Allgemeinen?
  • Wie werden Arrays repliziert? Und wie werden angehängte Eigenschaften repliziert (ein repliziertes Feld ist eine Struktur)?
  • Welche Netzwerkeinschränkungen gibt es? ( Zahlen! ) Wie kann die Last im Netzwerk profiliert werden? Welche Netzwerkoptimierungsmethoden werden verwendet? Wofür ist ForceNetUpdate ?

Physik und grundlegende Algorithmen


  • Wie funktioniert die Dämpfung? Was ist Substeping ? Wofür wird es verwendet? Wie synchronisiert sich die Physik über ein Netzwerk?
  • Was ist eine Quaternion und welche Probleme löst ihre Anwendung ?
  • Was sind Feature-Kanäle und Traces? Ist es möglich, unterschiedliche Verhaltensweisen innerhalb desselben Physik-Assets zu konfigurieren? Wenn nicht, warum und wie kann man das umgehen?
  • Wie teuer ist die Rückverfolgung? Wovon hängt es ab?

Streams


  • Was sind die Hauptthreads in UE4? Welche Aufgaben werden parallel ausgeführt und welche nicht? Wie sind Zeckengruppen angeordnet?
  • Welche Aktionen können in eigenen parallelen Flüssen ausgeführt werden? (Oder welche Aktionen können definitiv nicht ausgeführt werden?) Wie synchronisiere ich die Ergebnisse mit dem Haupt-Thread?

Code


Ich habe nicht viele Aspekte der Arbeit mit UE4 angesprochen, sondern Fragen zu Schlüsselthemen vorgeschlagen, die meiner Meinung nach bei der Arbeit mit der Engine grundlegend sind.

Es ist normal, dass ein Junior nicht viel über den Motor weiß, sondern einen hellen Kopf hat und einige Details versteht. Zumindest der „durchschnittliche“ Programmierer muss lediglich die Antworten (oder zumindest seine eigene begründete Meinung) auf Fragen aus dem Block über Architektur kennen. Insbesondere zu den Themen, die auf der ersten Seite der Dokumentation zum Gameplay Framework beschrieben werden .

Wenn die Community Interesse hat, kann ein ähnlicher Fragebogen zu Animation, Debugging, Shadern und Materialien, Beleuchtung, Projektverpackung, KI-Erstellung und Zusammenarbeit mit Pawn'ami und anderen erstellt werden. Schreiben :) Ich bin immer nur für eine aktive Diskussion.

Source: https://habr.com/ru/post/de427319/


All Articles