Um das richtig zu verstehen.
Pawn -> MyCharacter (Actor)?
Ja. Ein Character ist eine Art Pawn, ein Pawn ist aber nicht unbedingt ein Character (z.B. könnte ein Pawn auch ein Spectator Pawn sein).
Ich glaube das könnte das Problem dabei sein.
Den PlayerController brauche ich vor dem laden der ganzen Widgets (Menüs), damit diese entsprechend zugeteilt werden können.
An der Stelle wüsste ich auch nicht wie ich die ganzen Menüs auslagern sollte, denn die werden eben zum spielen gebraucht.
Also du solltest unbedingt mal recherchieren wie das Gameplay Framework von UE4 abläuft:
Ganz grob gesagt:
Ganz oben ist die GameEngine diese existiert ab dem Start des Spiels, genauso die GameInstance, diese könnt nach der Engine. Beim Start wird eine Map/World geladen, die World lebt solange wie das Level existiert. Die Welt halt einen GameMode, welcher erzeugt wird nachdem die Settings der Welt verfügbar sind. Auch wird für jeden Spieler ein PlayerController erzeugt (+ das was noch so dazugehört), basierend darauf was im GameMode eingestellt ist. Der PlayerController spawnt dann einen Pawn und wenn der Pawn fertig gespawnt ist, dann wird dieser Possessed.
Jetzt muss man sich das mal anschauen:
1) Controller spawnt einen Pawn
2) Pawn ist fertig gespawnt => Pawn->BeginPlay
3) Controller übernimmt pawn d.h. der Controller des Pawns wird gesetzt => Pawn->Possessed
D.h. wie ich gesagt habe, nimm das Possessed Event. Es gibt hier auch keine echte Verzögerung, das das ganze normalerweise im selben Frame stattfindet.
Folgendes:
Der Player Controller existiert vor dem Pawn. Der Pawn wird zuerst sauber gespawned inklusive BeginPlay Event. Erst danach wird der Pawn possessed, da erst hier alles was beim Spawn passieren soll passiert ist.
Das heißt benutze nur Begin Play für Dinge die gemacht werden sollen nachdem der Pawn gespawnt ist und nur das innere des Pawns betrifft. An diesem Punkt hat der Pawn noch kaum Infos.
Das mit den Breakpoints habe ich überall getestet.
Wenn ich den Breakpoint auf CastToPlayerController setzte, wird dieser sofort ausgelöst.
Setze ich den Breakpoint auf SetPlayerController dann lädt der bis zur unendlichkeit (das Problem was ich derzeit habe).
Dann ist es doch klar. Der Cast schlägt fehl und du kommst nicht weiter. Also ist der Input des Casts Null oder ein PlayerController mit falscher Klasse. Da du in Begin Play bist, ist der Player Controller wahrscheinlich null, da dein Pawn noch nicht Possessed wurde. Also schieb die ganze Logik in das Possessed Event.
Gibt es eine Möglichkeit eine Art "STOP" einzubauen bei der etwas ausgeführt und dann gestoppt wird, bis etwas anderes geladen ist, damit dann wenn geladen, nach dem Stop weiter geladen wird?
Wenn du das machen musst machst du etwas falsch. Informiere dich über die Events die es gibt und den generellen Ablauf des Gameplay Frameworks. Was du vorschlägst ist eine riesige Verschwendung von Performance.
PS: Könnt ihr mir eine grobe Auflistung schreiben, also von der Logik her, wie genau ein perfekter Start aussieht?
Z.B.
Wenn du den Perfekten Start eines Levels selbst programmieren musst, machst du etwas falsch. Wie gesagt die UE4 bietet schon ein Gameplay Framework, du musst nur wissen welche Events du Implementieren musst und welche Funktionen du überladen und erweitern musst.
Von daher, wie ich schon öfter sage. Recherchier genau wie die Unreal Engine funktioniert, das kann auch paar Wochen/Monate dauern. Am einfachsten ist es natürlich einfach den C++ Code grob anzuschauen, aber es sollte auch z.T. erklärt ein. Wüsste aber nicht wie gut Epics Doku ist.
BTW falls du Multiplayer machst:
Das Possessed Event läuft nur auf dem Server. D.h. du musst für Client seitige Dinge auch Client Funktion aufrufen. In vielen Fällen geht auch das Restart Event, dort ist 100% klar dass alles abgehandelt wurde, aber wenn ich mich richtig erinnere feuert es nur beim Spawn des Pawns aber nicht, falls dieser mitten in seiner Lebenszeit possessed und unpossessed wird. Man könnte ja ein Spiel so programmieren, dass Spieler andere Pawns übernehmen oder die Kontrolle abgeben, etc. dann wird natürlich kein Restart Event gefeuert, weil der Pawn ja schon "gestartet" wurde.