Programmeur de recrutement Gentleman UE4, partie 1



Pendant longtemps, j'ai voulu faire une liste de compétences et d'outils qui, à mon avis, devraient être inclus dans le "gentleman's set" de tout programmeur sous Unreal Engine 4 . L'autre jour, dans un chat UE4, j'ai vu ceci:

> plans, développement d'animation, art technologique, ai, multijoueur, extensions d'éditeur. la première chose qui m'est venue à l'esprit

> Ce qui me vient à l'esprit: plans, animations, IA, éditeur de matériaux, widgets, ardoise, extensions d'éditeur, plugins ue4, physique, éclairage, rendu, c ++
+ Combien de temps a travaillé avec le moteur et le pays, c'est tout :)

Dans de telles formulations, tout ce qui est dit n'est qu'une collection de mots. Par conséquent, je me suis réuni et j'ai rédigé un questionnaire pour ceux qui veulent être programmeur UE4 et qui peuvent évaluer leur niveau par rapport à ceux qui se considèrent déjà comme programmeur avancé pour UE4.

N'utilisez pas de mots communs


Tous les termes énumérés dans les devis sont un ensemble complet de compétences, de principes et de technologies. En les exprimant en un mot, vous ne transmettez en aucun cas ce qui doit être appliqué exactement et la profondeur de son étude.

Je vais passer en revue les principales catégories, en posant des questions dont vous devriez connaître la réponse pour dire: "Je comprends cela."

Bases de l'architecture du moteur


  • Quelles sont les différences entre les AActor UObject et AActor ? Quelle est la différence fondamentale ? Est-il possible de forcer UObject à exécuter les mêmes fonctions? Pourquoi AGameState et APlayerState ? Une question similaire sur AGameMode et AHUD .
  • En quoi AGameMode est- AGameMode différent de UGameInstance ? À quoi servent-ils tous les deux? Pourquoi APlayerController est- APlayerController nécessaire et pourquoi est-il un ecteur?
  • À quoi sert UPROPERTY ? Puis-je le remplacer par SharedRef ? Comment résoudre la dépendance circulaire dans les secteurs (le parent a un pointeur sur l'enfant, l'enfant sur le parent)? Quand UObject sera-t-il supprimé? Comment protéger une entité contre la suppression par Garbage Collector ? Comment retirer un acteur ?
  • Qu'est-ce qu'un CDO ? Comment puis-je briser la chaîne des cours Reference'ov les uns sur les autres, et pourquoi?
  • Quel est l'ordre d'initialisation des principales entités du moteur (au moins au niveau contrôleur / pavna / état)? Quel est l'ordre d'apparition d'AActor?
  • Composant dans le composant - bon ou mauvais?
  • Qu'est-ce qu'un WorldContextObject ? Est-il possible de l'amener à UObject , et si oui, d'où?
  • Quelle est la différence fondamentale entre Slate et UMG ?

Blueprints


  • En quoi les macros diffèrent-elles des fonctions?
  • En utilisant ce qui mène exactement à la formation de Referenc entre les classes? Des atouts? Comment éviter cela?
  • Qu'est-ce que la nativisation émoussée et quelle est son utilisation? Quels sont les inconvénients de la natalisation incluse?

Réseau


  • Où stocker les données de jeu des utilisateurs (par exemple, l'inventaire ou les points) pendant une session de jeu? APlayerController est- APlayerController bon endroit?
  • Comment PlayerState est-il répliqué sur les clients? Quel est le cycle de vie de PlayerState et PlayerState lors de la reconnexion d'un joueur?
  • Comment distinguer la réplication des données par rôle? Quels sont les rôles réseau ? Par qui et selon quelles règles sont-ils nommés?
  • RPC quelles classes puis-je appeler RPC et pourquoi? Est-il possible d'étendre cette fonctionnalité à une autre classe / entité? Quel est le surcoût d'un appel RPC?
  • Comment les composants d'ector sont-ils répliqués? Comment comprendre que l'ector a été répliqué "entièrement"? Que se passe-t-il si vous voulez répliquer, disons, 3 Mo de données dans un ecteur: comment se comportera cet ecteur? jeu en général?
  • Comment les tableaux sont-ils répliqués? Et comment les propriétés attachées sont-elles répliquées (un champ répliqué est une structure)?
  • Quelles restrictions de réseau existent? ( Figures! ) Comment profiler la charge sur le réseau? Quelles méthodes d'optimisation de réseau sont utilisées? À quoi sert ForceNetUpdate ?

Physique et algorithmes de base


  • Comment fonctionne l'amortissement? Qu'est-ce que le sous- dépassement ? À quoi sert-il? Comment la physique se synchronise-t-elle sur un réseau?
  • Qu'est-ce qu'un quaternion et quels problèmes leur application résout-elle ?
  • Que sont les canaux et les traces de fonctionnalité? Est-il possible de configurer un comportement différent au sein d'un même actif physique? Sinon, pourquoi et comment contourner ce problème?
  • Combien coûte le traçage? De quoi cela dépend-il?

Streams


  • Quels sont les principaux threads dans UE4? Quelles tâches sont effectuées en parallèle et lesquelles ne le sont pas? Comment sont organisés les groupes de tiques?
  • Quelles actions peuvent être effectuées dans ses propres flux parallèles? (Ou quelles actions ne peuvent certainement pas être effectuées?) Comment synchroniser les résultats avec le thread principal?

Code


Je n'ai pas abordé de nombreux aspects du travail avec UE4, mais j'ai suggéré des questions sur des sujets clés qui, à mon avis, sont basiques lorsque je travaille avec le moteur .

Il est normal pour un junior de ne pas en savoir beaucoup sur le moteur, mais d'avoir la tête brillante et de comprendre quelques détails. Au moins le programmeur «moyen» est simplement obligé de connaître les réponses (ou du moins d'avoir sa propre opinion motivée) aux questions du bloc sur l'architecture. Surtout sur les sujets qui sont décrits sur la toute première page de la documentation sur le Gameplay Framework .

Si la communauté est intéressée, un questionnaire similaire peut être compilé sur l'animation, le débogage, les shaders et les matériaux, l'éclairage, la création de projets, la création d'IA, le travail avec Pawn'ami et d'autres. Ecrire :) Je suis toujours uniquement pour une discussion active.

Source: https://habr.com/ru/post/fr427319/


All Articles