Page 1 sur 1

Le mythe du Cast dans Unreal Engine

Publié : 09 oct. 2024, 10:27
par Poppy




Lors de l'Unreal Fest 2024, Ari Arnbjornsson ingénieur senior chez Epic Games a donné une conférence sur le mythe des meilleures pratiques dans Unreal Engine.

Vous entendrez souvent des affirmations comme "'n'utilisez pas le Cast" ! Le Cast est-ils vraiment si problématique ? Vous avez probablement déjà entendu parler des Cast et de leurs consommation. Mettons-les à l'épreuve et découvrons ce qu'il en est vraiment.



N'utilisez pas le Cast ?

Cast est un node qui convertit un type de données en un autre type de données, avec vérification du type.





Parlons du Cast

Certains disent que le « Cast est lent », ou que le « Cast charge des assets » comme raisons pour lesquelles vous ne devriez jamais utiliser la fonction Cast. Mais le Cast fait partie intégrante du codage, aussi bien en Blueprints qu'en C++.

L'appel de la fonction n'est en fait pas si lente, elle ne dure qu'environ 0,5 microseconde (μs) en C++ et environ 3,5 μs en Blueprints dans l'éditeur sur mon ordinateur (2,69GHz Threadripper). À peu près le même temps qu'une fonction Tick.



Le problème avec le Cast

Mais il y a une chose dont il faut se méfier. Le Cast vers un type de Blueprint le référencera également, ce qui l'ajoutera comme une dépendance. Et les dépendances doivent être chargées avant que votre propre Blueprint ne soit chargé.

Les dépendances restent également chargées tant que quelque chose les référence. Ainsi, si vous avez un BP_PlayerCharacter qui, par exemple, référence le boss final de votre jeu dans un cast node parce que vous avez besoin d'une fonctionnalité spéciale lorsque le boss vous attrape, alors cet asset boss doit être chargé avant que nous puissions finir de charger BP_PlayerCharacter, et l'asset boss restera chargé en mémoire aussi longtemps que BP_PlayerCharacter sera chargé, c'est à dire tout le temps ! :?

Mais cela ne ralentit pas l'opération du Cast elle-même.

Si nous en sommes conscients, nous pouvons utiliser le node Cast là où c'est utile et d'autres méthodes dans d'autres cas. Et j'ai créé cet organigramme pour vous aider à savoir quand utiliser le Cast.



Quand faire un Cast ?



Si vous voulez appeler une fonction ou obtenir une propriété à partir d'une référence d'acteur, vous devriez toujours essayer de faire un cast vers une classe mère C++ et l'appeler et l'obtenir à partir de là. Le BP peut alors la charger. Si la fonction n'existe pas dans une classe mère C++, il faut la définir dans cette classe.

Si le BP est toujours censé être chargé, alors vous pouvez simplement l'appeler. Comme pour le personnage du joueur, le Game Mode ou le Game Instance. Pourquoi ne pas le faire ? Vous ne payez pas le coût d'avoir à la charger puisqu'elle est déjà chargée. Allez-y à fond !

S'il n'est pas prévu qu'il soit toujours chargé, et que vous ne pouvez pas ou ne voulez pas définir des choses en C++, alors utilisez simplement une interface, c'est à cela qu'elles servent.

Si vous avez juste besoin de faire une vérification de type sans appeler une fonction / obtenir une propriété, alors vous n'avez pas besoin du node Cast. Vous pouvez appeler « IsA (Soft) », qui est nouveau dans UE 5.5, pour vérifier le type sans ajouter de dépendance. Ou vérifier si l'acteur contient un tag actor ou un tag gameplay.

Si vous ne voulez pas appeler une fonction, obtenir une propriété ou vérifier le type de la référence de l'acteur, alors je ne sais pas vraiment ce que vous essayez de faire, mais je suis presque sûr que vous n'avez pas besoin de la fonction Cast.



"N'utilisez pas le Cast", alors vrai ou faux ?

C'est évidement FAUX ! Vous pouvez utiliser le Cast librement, mais faites juste attention à vos dépendances.