
Há muito tempo, queria fazer uma lista de habilidades e ferramentas que, na minha opinião, deveriam ser incluídas no "conjunto de cavalheiros" de qualquer programador no
Unreal Engine 4 . Outro dia, em um
bate-papo na
UE4, vi o seguinte:
> projetos, animação dev, tech art, ai, multiplayer, extensões de editor. a primeira coisa que veio à mente
> O que vem à sua mente: projetos, animações, IA, editor de materiais, widgets, slate, extensões de editor, plugins ue4, física, iluminação, renderização, c ++
+ Quanto tempo trabalhou com o motor e o país, é isso :)
Nessas formulações, tudo o que é dito é apenas uma coleção de palavras. Por isso, reuni-me e compilei um
questionário para aqueles que desejam ser programadores da UE4 e que podem avaliar seu nível para aqueles que já se consideram programadores avançados da UE4.
Não use palavras comuns
Todos os termos listados nas citações são um conjunto de habilidades, princípios e tecnologias. Expressando-os em uma palavra, você não transmite de maneira alguma o que exatamente precisa ser aplicado e o quão "profundamente" ele precisa ser estudado.
Vou percorrer as principais categorias, fazendo perguntas que você deve saber a resposta para dizer: "Eu entendo isso".
Noções básicas de arquitetura do mecanismo
- Quais são as diferenças entre as
AActor
e AActor
? Qual é a diferença fundamental ? É possível forçar o UObject
a executar as mesmas funções? Por que AGameState
e APlayerState
? Uma pergunta semelhante sobre o AGameMode
e o AHUD
. - Qual a diferença entre o
UGameInstance
e o UGameInstance
? Para que eles são usados? Por que o APlayerController
é necessário e por que é um ector? - Para que é utilizado o
UPROPERTY
? Posso substituí-lo por SharedRef 's? Como resolver a dependência circular em outros setores (o pai ou mãe tem um ponteiro para o filho, o filho para o pai)? Quando o UObject
será excluído? Como proteger uma entidade de ser excluída pelo Garbage Collector ? Como remover um ator ? - O que é um CDO ? Como posso quebrar a cadeia de classes Reference'ov e por quê?
- Qual é a ordem de inicialização das principais entidades do motor (pelo menos no nível do controlador / pavna / estado)? Qual é a ordem de reprodução do AActor?
- Componente em componente - bom ou ruim?
- O que é um
WorldContextObject
? É possível levá-lo ao UObject
e, em caso afirmativo, de onde? - Qual é a diferença fundamental entre Slate e UMG ?
Projetos
- Como as macros diferem das funções?
- Usando o que exatamente leva à formação de Referenc entre classes? Ativos? Como evitar isso?
- O que é nativização embotada e para que serve? Quais são as desvantagens da natividade incluída?
Rede
- Onde armazenar dados de jogabilidade do usuário (por exemplo, inventário ou pontos) durante uma sessão de jogo?
APlayerController
é APlayerController
lugar certo? - Como o
PlayerState
é replicado para os clientes? Qual é o ciclo de vida do PlayerController
e do PlayerState
ao reconectar um jogador? - Como distinguir a replicação de dados por função? O que são funções de rede ? Por quem e por quais regras eles são nomeados?
- Em quais classes posso chamar
RPC
e por quê? É possível estender esse recurso para outra classe / entidade? Qual é a sobrecarga de uma chamada RPC? - Como os componentes do ector são replicados? Como entender que o ector foi replicado "inteiramente"? O que acontece se você deseja replicar, digamos, 3 MB de dados em um setor: como esse setor se comportará? jogo em geral?
- Como as matrizes são replicadas? E como as propriedades anexadas são replicadas (um campo replicado é uma estrutura)?
- Quais restrições de rede existem? ( Figuras! ) Como perfilar a carga na rede? Quais métodos de otimização de rede são usados? Para que serve o
ForceNetUpdate
?
Física e algoritmos básicos
- Como funciona o amortecimento? O que é sub - etapa ? Para que é utilizado? Como a física sincroniza através de uma rede?
- O que é um quaternion e quais problemas sua aplicação resolve ?
- O que são canais e rastreamentos de recursos? É possível configurar comportamentos diferentes dentro do mesmo ativo físico? Se não, então por que e como contornar isso?
- Qual é o preço do rastreamento? Do que isso depende?
Streams
- Quais são os principais tópicos no UE4? Quais tarefas são executadas em paralelo e quais não são? Como são organizados os grupos de ticks?
- Quais ações podem ser executadas em próprios fluxos paralelos? (Ou que ações definitivamente não podem ser executadas?) Como sincronizar os resultados com o thread principal?
Código
Não toquei em muitos aspectos do trabalho com o UE4, mas sugeri perguntas sobre os principais tópicos que, na minha opinião, são
básicos ao trabalhar com o mecanismo .
É normal que um júnior não saiba muito sobre o motor, mas tenha uma cabeça brilhante e entenda alguns detalhes. Pelo menos o programador “médio” é simplesmente obrigado a saber as respostas (ou pelo menos ter sua própria opinião fundamentada) para perguntas do bloco sobre arquitetura. Especialmente nos tópicos
descritos na primeira página da documentação no Gameplay Framework .
Se a comunidade tiver interesse, um questionário semelhante pode ser compilado em animação, depuração, shaders e materiais, iluminação, embalagem do projeto, criação de IA, trabalho com Pawn'ami e outros. Escreva :) Estou sempre apenas
para uma discussão ativa.