Comment continuer à créer une carte dans UE4

Bonne journée à tous


Dans un article précédent, nous avons décrit comment créer un niveau en prenant la section Yandex.Map comme référence. Reste à parler des routes "pavées" et des nuances que j'ai rencontrées en utilisant World Composition, comme méthode d'optimisation d'une grande carte.



Routes


Bien sûr, les routes "tracées" par une texture étirée de niveau sont tout à fait adaptées à l'utilisation (par exemple, pour un simulateur d'air), mais pour un simulateur de voiture, une approche plus détaillée est requise. Le composant le plus approprié pour créer des routes dans l'UE est Spline, au moins «longues sections continues». Je n'ai pas encore rencontré d'intersections et de jonctions, très probablement ils devront créer des objets séparés avec leurs mains.


Spline Il existe deux types: Splines Blueprint et Splines Paysage . Les premiers ont d'énormes capacités de personnalisation et sont bien démontés.Epic Games sur la chaîne. Avec leur aide, vous pouvez contrôler la création d'objets le long de la route à la fois (panneaux, clôtures, fossés, lignes électriques), mais je n'ai pas trouvé de fonctionnalité à combiner avec le paysage chez Blueprint Splines, et adapter chaque mètre de la route avec mes mains sous le paysage (ou vice versa) n'est pas avec quoi vous voulez démarrer un projet. Par conséquent, j'ai choisi Landscape Splines pour créer des routes sur la première version du niveau, en prenant simplement «Edit Splines Tool» et en cliquant sur la texture. Il s'est avéré deux cannelures - une pour une route goudronnée, l'autre pour un chemin de terre. Les carrefours se font simplement en se superposant. Pour «matérialiser» Spline, il est nécessaire que les segments définissent le maillage. J'ai pris celui fini de Vehicle Game, là aussi la piste était faite comme Landscape Splines (Epic Games Launcher> Unreal Engine> Bibliothèque> Vault), découpant une pièce complexe sur les pistes du matériau.Il s'est avéré un grand chemin de terre! Il n'était pas possible de répéter une telle astuce pour l'asphalte, j'ai donc pris le même maillage, changé la texture du matériau du chemin de terre à l'asphalte (comme celui-ci ) et appliqué sur Spline avec une échelle Z = 0,2, cela s'est plutôt bien passé. Au final, il ne faut pas oublier de déformer le paysage sous Splines, ce qui se fait avec un seul bouton, et les routes sont prêtes:



Composition mondiale


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 > > > . , .. , , . , , =) , . Malheureusement, mes connaissances en UE ne m'ont pas permis de reproduire un correctif à partir de ce thread en tête-à-tête, je viens de créer une classe C ++ de type «GameInstance» et de le spécifier dans les propriétés du projet. MyGameInstance.h et MyGameInstance.cpp respectivement:

    #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);
    }
    


C'est tout pour le moment. Les plans parlent de la création du menu de démarrage et de la mini-carte dans le jeu. Remercier.


All Articles