Comment je continue d'apprendre UE4 tout en créant mon jeu

Bonne journée à tous


Dans cet article, je veux parler des problèmes que j'ai rencontrés tout en continuant à développer un simulateur de voiture et de ce que j'ai trouvé en essayant de les contourner.

Composition mondiale


Dans un article précédent, j'ai expliqué comment il est simple et rapide de créer un grand monde dans UE4, divisé en morceaux pour optimiser le chargement. En conséquence, j'ai abandonné ce mode pour les raisons suivantes:

  • Tout d'abord, j'ai attiré l'attention sur le fait que dans tous les exemples et vidéos, les Epics eux-mêmes (et d'autres développeurs) rendent les cartes 8 km x 8 km «entières». C'est encore plus que ce dont j'ai besoin, donc World Composition est pour moi une sorte de suroptimisation.
  • pavage de routes avec Landscape Splines, j'ai remarqué que UE4 ne les décompose pas par la taille de la cellule de carte (au niveau des joints), mais étend ses bordures par la taille de la spline résultante. Cela provoque des problèmes lorsque vous essayez de déplacer la carte, et cela semble également gâcher la logique de chargement dynamique, chargeant immédiatement tout ce que la route traverse (dans mon cas, c'est la moitié du monde).
  • la bordure des morceaux de la carte est généralement une question intéressante. J'ai refait les routes pour le Blueprint Spline fait maison (plus de détails ci-dessous) et, afin de ne pas répéter les «erreurs» des Landscape Splines, j'ai dû implémenter le spline splitting automatique en morceaux aux limites du niveau, synchroniser les virages dans ces endroits, créer des objets enfants (pour que chacun ait son propre placer le niveau pour le chargement automatique) ... Je ne suis pas sûr que cela soit possible en principe, et cela prendrait certainement beaucoup de temps (je n'ai pas trouvé de références aux fonctions de limites de niveau, etc. dans Blueprints)
  • tomber à travers la carte. À propos du contournement de cette "fonctionnalité" à l'aide de BlockTillLevelStreamingCompleted () dont j'ai déjà parlé dans cet article. Cependant, cette solution a conduit au problème suivant:
  • . ( ) 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, .



Soudain, il s'est avéré difficile de fermer le menu du jeu en appuyant sur Echap. Il n'y avait aucune difficulté à attraper l'Esc dans le jeu, à mettre le jeu en pause et à ouvrir le Menu Widget en plein écran ... mais il ne s'est pas empressé de refermer Esc, la priorité "On Key Down" a commencé à fonctionner dans certaines situations non évidentes, telles que "appeler la console UE4 par ~, puis fermez-le, puis appuyez sur quelque chose ... »La solution s'est avérée être extrêmement simple - cochez la case« Is Focusable »dans le concepteur de widget sur l'élément racine (sur le widget lui-même).


Merci de votre attention, si je réussis à sortir du Mount & Blade II: Bannerlord et à ne pas tomber dans le Snowrunner sortant, je continuerai à développer mon projet et à écrire sur toutes les choses non évidentes qui ont pris beaucoup de nerfs et de temps.


All Articles