So fahren Sie mit dem Erstellen einer Karte in UE4 fort

Guten Tag allerseits


In einem früheren Artikel haben wir beschrieben, wie Sie eine Ebene erstellen, indem Sie den Abschnitt Yandex.Map als Referenz verwenden. Es bleibt zu sprechen über das "Pflastern" von Straßen und über die Nuancen, die ich bei der Verwendung von World Composition als Methode zur Optimierung einer großen Karte festgestellt habe.



Straßen


Natürlich sind die Straßen, die von einer ebenen Textur „gezeichnet“ werden, für die Verwendung gut geeignet (zum Beispiel für einen Luftsimulator), aber für einen Autosimulator ist ein detaillierterer Ansatz erforderlich. Die am besten geeignete Komponente zum Erstellen von Straßen in der UE ist Spline, zumindest „lange durchgehende Abschnitte“. Ich bin noch nicht auf Kreuzungen und Kreuzungen gestoßen, höchstwahrscheinlich müssen sie mit ihren Händen separate Objekte erstellen.


Spline gibt es zwei Arten: Blueprint Splines und Landscape Splines . Die ersteren verfügen über enorme Anpassungsmöglichkeiten und sind gut zerlegt.Epische Spiele auf dem Kanal. Mit ihrer Hilfe können Sie die Erstellung von Objekten entlang der Straße gleichzeitig steuern (Wegweiser, Zäune, Gräben, Stromleitungen), aber ich habe bei Blueprint Splines keine Funktionalität gefunden, die mit der Landschaft kombiniert werden kann, und jeden Meter der Straße mit meinen Händen unter der Landschaft zu befestigen (oder umgekehrt) womit Sie ein Projekt starten möchten. Aus diesem Grund habe ich Landschafts-Splines ausgewählt, um Straßen in der ersten Version des Levels zu erstellen. Ich habe einfach das Werkzeug „Splines bearbeiten“ verwendet und auf die Textur geklickt. Es stellte sich heraus, dass zwei Splines - einer für eine Asphaltstraße, der andere für eine unbefestigte Straße. Kreuzungen werden einfach durch Überlagerung hergestellt. Um Spline zu „materialisieren“, müssen Segmente Mesh setzen. Ich habe das fertige aus Vehicle Game genommen, dort wurde auch der Track wie Landscape Splines (Epic Games Launcher> Unreal Engine> Bibliothek> Vault) erstellt und ein komplexes Stück über die Tracks aus dem Material herausgeschnitten.Es stellte sich heraus, ein großer Feldweg! Es war nicht möglich, einen solchen Trick für Asphalt zu wiederholen, also nahm ich das gleiche Netz und änderte die Textur in Material von der unbefestigten Straße auf die asphaltierte (wie dieses ) und es auf Spline mit Z-Skala = 0,2 angewendet, stellte sich heraus, dass es ziemlich gut war. Am Ende dürfen Sie nicht vergessen, die Landschaft unter Splines zu verformen, was mit nur einem Knopf erfolgt, und die Straßen sind fertig:



Weltkomposition


YouTube , , , . UE : World Composition Level Streaming. «» ( , UE ). «», Level Streaming Volumes ( ), .


World Composition 4 4 16 1 1 . , — «» . , — Scale . .. Z-Scale , Z-Scale, ( 16).


World Composition , . , , , :

  1. Make current. , , ( Levels), \ . «» Persistent Level. PlayerStart «», UE , .
  2. MyGameInstance.cpp UE World Composition: Persistent Level > Persistent Level > > > . , .. , , . , , =) , . Leider erlaubte mir mein Wissen in UE nicht, einen Fix aus diesem Thread einzeln zu reproduzieren. Ich habe gerade eine C ++ - Klasse vom Typ „GameInstance“ erstellt und in den Projekteigenschaften angegeben. MyGameInstance.h bzw. MyGameInstance.cpp:

    #pragma once
    
    #include "CoreMinimal.h"
    #include "Engine/GameInstance.h"
    #include "MyGameInstance.generated.h"
    
    UCLASS()
    class SAMPLE_01_API UMyGameInstance : public UGameInstance
    {
    	GENERATED_BODY()
    	
    public:
    	virtual void LoadComplete(const float LoadTime, const FString& MapName) override;
    };
    

    
    #include "MyGameInstance.h"
    #include "Engine/World.h"
    #include "Engine/WorldComposition.h"
    #include "Engine/LevelStreaming.h"
    
    void UMyGameInstance::LoadComplete(const float LoadTime, const FString & MapName)
    {
    	Super::LoadComplete(LoadTime, MapName);
    	
    	UWorld* World = GetWorld();
    	
    	// WorldComposition won't work in Standalone mode without next statement
    	if ( World->WorldComposition ) {
    		const TArray<ULevelStreaming*> TilesStreaming = World->WorldComposition->TilesStreaming;
    		World->ClearStreamingLevels();
    		World->SetStreamingLevels(TilesStreaming);
    	}
    	
    	// "Pause" game till streaming complete
    	GEngine->BlockTillLevelStreamingCompleted(World);
    }
    


Das ist alles für jetzt. Die Pläne erzählen von der Erstellung des Startmenüs und der Minikarte im Spiel. Danke.


All Articles