Wie ich UE4 lerne, während ich mein Spiel mache

Guten Tag allerseits


In diesem Artikel möchte ich über die Probleme sprechen, auf die ich bei der Weiterentwicklung eines Autosimulators gestoßen bin, und darüber, was ich mir ausgedacht habe, als ich versucht habe, sie zu umgehen.

Weltkomposition


In einem früheren Artikel habe ich darüber gesprochen, wie einfach und schnell es ist, in UE4 eine große Welt zu erstellen, die zur Optimierung des Ladens in Teile unterteilt ist. Aus diesem Grund habe ich diesen Modus aus folgenden Gründen verlassen:

  • Zunächst machte ich darauf aufmerksam, dass die Epics selbst (und andere Entwickler) in allen Beispielen und Videos 8 km x 8 km große Karten „ganz“ machen. Dies ist sogar mehr als ich brauche, daher ist World Composition für mich anscheinend eine Art Überoptimierung.
  • Beim Pflastern von Straßen mit Hilfe von Landscape Splines habe ich festgestellt, dass UE4 sie nicht um die Größe der Kartenzelle (an den Fugen) bricht, sondern ihre Ränder um die Größe des resultierenden Spline erweitert. Dies verursacht Probleme beim Versuch, die Karte zu verschieben, und es scheint auch die dynamische Ladelogik zu beeinträchtigen, indem sofort alles geladen wird, was die Straße durchläuft (in meinem Fall ist dies die halbe Welt).
  • Der Rand der Kartenstücke ist im Allgemeinen eine interessante Frage. Ich habe die Straßen für den hausgemachten Blueprint Spline überarbeitet (mehr dazu weiter unten). Um die „Fehler“ von Landscape Splines nicht zu wiederholen, musste ich an den Ebenengrenzen eine automatische Spline-Aufteilung in Teile implementieren, Biegungen an diesen Stellen synchronisieren und untergeordnete Objekte erstellen (sodass jedes seine eigenen Objekte hat) Platzieren Sie die Ebene für das automatische Laden) ... Ich bin mir nicht sicher, ob dies im Prinzip möglich ist, und es würde sicherlich viel Zeit in Anspruch nehmen (ich habe in Blueprints keine Verweise auf Ebenengrenzenfunktionen usw. gefunden).
  • durch die Karte fallen. Über die Umgehung dieser "Funktion" mit BlockTillLevelStreamingCompleted () habe ich bereits in diesem Artikel gesprochen. Diese Lösung führte jedoch zu folgendem Problem:
  • . ( ) OpenLevel ( World Composition), «» -, .. spawn , , . , ++, «StreamingPauseRendering» override «BeginLoadingScreen». , , .
  • , World Composition ++

    void UMyGameInstance::OnWorldChanged(UWorld * OldWorld, UWorld * NewWorld)
    {
    	Super::OnWorldChanged(OldWorld, NewWorld);
    
    	if (NewWorld) {
    		if (NewWorld->WorldComposition) {
    			const TArray<ULevelStreaming*> TilesStreaming = NewWorld->WorldComposition->TilesStreaming;
    			NewWorld->ClearStreamingLevels();
    			NewWorld->SetStreamingLevels(TilesStreaming);
    		}
    	}
    }
    

Blueprints Spline


, Blueprints Spline «» ( , , «» ), Landscape Splines «Deform Landscape to Splines». , «», "Editor Apply Spline" Landscape + Spline! «Call In Editor» Blueprint Spline ( ) . .


Widgets


, Vehicle Variety Pack , , , , , . 3D , Widget, , ! Workaround' «Render Target», 3 , «» , , , Widget. , « » .



, UE4, ( , ). Udemy , , , , , \ . , , , «» ( PlayerController) . AI Controller Class «dummy» AIController, .



Plötzlich stellte sich heraus, dass es ein Problem war, das Menü im Spiel durch Drücken von Esc zu schließen. Es gab keine Schwierigkeiten im Spiel, Esc zu fangen, das Spiel anzuhalten und das Menü-Widget im Vollbildmodus zu öffnen ... aber er beeilte sich nicht, Esc wieder zu schließen. Die Überschreibung "On Key Down" begann in einigen nicht offensichtlichen Situationen zu funktionieren, z. B. beim Aufrufen der Konsole UE4 von ~, dann schließen, dann etwas drücken ... “Die Lösung erwies sich als schmerzlich einfach - aktivieren Sie das Kontrollkästchen„ Ist fokussierbar “im Widget-Designer für das Stammelement (für das Widget selbst).


Vielen Dank für Ihre Aufmerksamkeit. Wenn es mir gelingt, aus dem veröffentlichten Mount & Blade II: Bannerlord auszubrechen und nicht in den ausgehenden Snowrunner zu fallen, werde ich mein Projekt weiterentwickeln und über all die nicht offensichtlichen Dinge schreiben, die viel Nerven und Zeit gekostet haben.


All Articles