Cómo sigo aprendiendo UE4 mientras hago mi juego

Buen día a todos


En este artículo quiero hablar sobre los problemas que encontré mientras seguía desarrollando un simulador de automóviles y lo que se me ocurrió al tratar de solucionarlos.

Composición mundial


En un artículo anterior, hablé sobre cómo es simple y rápido crear un mundo grande en UE4, dividido en partes para optimizar la carga. Como resultado, abandoné este modo por las siguientes razones:

  • En primer lugar, llamé la atención sobre el hecho de que en todos los ejemplos y videos, los Epics (y otros desarrolladores) hacen que las tarjetas de 8km x 8km sean "completas". Esto es incluso más de lo que necesito, por lo que World Composition para mí es, aparentemente, una especie de sobre optimización.
  • pavimentando caminos con la ayuda de Landscape Splines, noté que UE4 no los rompe por el tamaño de la celda del mapa (en las uniones), sino que extiende sus bordes por el tamaño de la Spline resultante. Esto causa problemas al intentar mover el mapa, y también parece estropear la lógica de carga dinámica, cargando inmediatamente todo lo que atraviesa el camino (en mi caso, esto es la mitad del mundo).
  • El borde de las piezas del mapa es generalmente una pregunta interesante. Rehice las carreteras para la Blueprint Spline casera (más sobre eso a continuación) y, para no repetir los "errores" de Landscape Splines, tuve que implementar la división automática de spline en pedazos en los límites de nivel, sincronizando curvas en estos lugares, creando objetos secundarios (para que cada uno tenga su propio coloque el nivel para la carga automática) ... No estoy seguro de que esto sea posible en principio, y ciertamente tomaría mucho tiempo (no encontré referencias a funciones de límite de nivel, etc. en Blueprints)
  • cayendo a través del mapa. Sobre la omisión de esta "característica" usando BlockTillLevelStreamingCompleted () ya hablé en ese artículo. Sin embargo, esta solución condujo al siguiente problema:
  • . ( ) 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, .



De repente resultó ser un problema cerrar el menú en el juego presionando Esc. No hubo dificultad para atrapar el Esc en el juego, pausar el juego y abrir el widget de menú en pantalla completa ... pero no se apresuró a cerrar Esc nuevamente, la anulación "On Key Down" comenzó a funcionar en algunas situaciones no obvias, como "llamar a la consola UE4 por ~, luego ciérrelo, luego presione algo ... "La solución resultó ser muy simple: marque la casilla de verificación" Es enfocable "en el diseñador de widgets en el elemento raíz (en el propio widget).


Gracias por su atención, si logro salir de Mount & Blade II: Bannerlord y no caer en el Snowrunner saliente, continuaré desarrollando mi proyecto y escribiendo sobre todas las cosas obvias que tomaron muchos nervios y tiempo.


All Articles