Como eu continuo aprendendo UE4 enquanto jogo

Bom Dia a todos


Neste artigo, quero falar sobre os problemas que encontrei enquanto continuava desenvolvendo um simulador de carro e o que descobri ao tentar contorná-los.

Composição mundial


Em um artigo anterior, falei sobre como é simples e rápido criar um grande mundo no UE4, dividido em pedaços para otimizar o carregamento. Como resultado, abandonei esse modo pelos seguintes motivos:

  • Antes de tudo, chamei a atenção para o fato de que em todos os exemplos e vídeos, os próprios Epics (e outros desenvolvedores) fazem cartões de 8 km x 8 km "inteiros". Isso é ainda mais do que eu preciso, então a Composição Mundial para mim é, aparentemente, uma espécie de super otimização.
  • Ao pavimentar estradas com Landscape Splines, notei que o UE4 não as divide pelo tamanho da célula do mapa (nas juntas), mas estende suas bordas pelo tamanho do Spline resultante. Isso causa problemas ao tentar mover o mapa e também parece prejudicar a lógica de carregamento dinâmico, carregando imediatamente tudo o que a estrada percorre (no meu caso, isso é metade do mundo).
  • a borda das partes do mapa é geralmente uma questão interessante. Refiz as estradas para o Blueprint Spline caseiro (mais sobre isso abaixo) e, para não repetir os “erros” dos Landscape Splines, tive que implementar a divisão automática de splines em pedaços nos limites do nível, sincronizando as curvas nesses locais, criando objetos filhos (para que cada um tivesse seu próprio coloque o nível para carregamento automático) ... não tenho certeza de que isso seja possível em princípio e certamente levaria muito tempo (não encontrei referências a funções de limite de nível etc. em Blueprints)
  • caindo pelo mapa. Sobre o desvio desse "recurso" usando BlockTillLevelStreamingCompleted () que eu já falei nesse artigo. No entanto, esta solução levou ao seguinte 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, tornou-se um problema fechar o menu do jogo pressionando Esc. Não houve dificuldade em capturar o Esc no jogo, pausar o jogo e abrir o Menu Widget em tela cheia ... mas ele não se apressou em fechar o Esc novamente, a substituição "On Key Down" começou a funcionar em algumas situações não óbvias, como "ligar para o console" UE4 por ~, feche-o e pressione alguma coisa ... ”A solução acabou sendo extremamente simples - marque a caixa de seleção“ É focável ”no designer de Widget no elemento raiz (no próprio Widget).


Obrigado por sua atenção, se eu conseguir sair do Mount & Blade II: Bannerlord lançado e não cair no Snowrunner de saída, continuarei desenvolvendo meu projeto e escrevendo sobre todas as coisas não óbvias que levaram muitos nervos e tempo.


All Articles