J'essaie de comprendre le raisonnement derrière la conception du moteur Unity3D et c'est quelque chose que je ne peux pas encore comprendre : pourquoi transformer les données stockées dans un composant séparé, au lieu de faire partie de GameObject, comme le nom, les masques de calque et Mots clés? Il ne peut pas être retiré comme tous les autres composants de toute façon, il n'y a pas d'alternative et donc pas besoin de le retirer.
14
Réponses:
Seuls les développeurs Unity peuvent donner leur véritable motivation pour cette conception, mais un argument en faveur de le faire de cette façon est qu'il existe un argument selon lequel chaque classe d'un projet logiciel devrait gérer une et une seule responsabilité . Le GameObject est une collection nommée de composants, et l'ajout de position / rotation / etc à cela signifie qu'il aurait 2 responsabilités. Le composant Transform gère la position et la rotation et ne devrait donc pas également être responsable de la dénomination ou de l'agrégation d'autres composants (potentiellement indépendants). Il est donc logique que ces 2 concepts existent dans 2 objets distincts.
Plus généralement, cette question demande "s'il existe une relation 1 à 1 entre X et Y, pourquoi Y ne fait-il pas partie de X ou vice versa?" Et la réponse générale est que le logiciel est plus facile à développer et à entretenir lorsqu'il est divisé en parties autonomes plus petites, même si 2 parties fonctionnent toujours ensemble.
la source
La transformation est un composant obligatoire dans Unity.
La raison pour laquelle une transformation est un composant obligatoire est que les objets de jeu sont situés dans une scène et ont donc besoin d'informations spatiales (position, orientation et échelle) sur cet objet. (Ces informations ne sont pas toujours utilisées, mais garder le composant de transformation obligatoire rend les choses un peu plus simples).
la source
C'est
TransformComponent
le plus difficileComponent
à concevoir correctement dans l'architecture de jeux vidéo. Presque tous les autres ontComponent
besoin de connaîtreGameObject
la position, la rotation ou l'échelle d' une donnée , il est donc intrinsèquement difficile de découpler correctement tous ces systèmes interdépendants.Il y aura toujours des compromis en architecture. En étant
TransformComponent
statiques (c'est-à-dire non dynamiques), les développeurs d'Unity peuvent écrire du code sous cette hypothèse. Je suppose que cela rend les choses beaucoup plus faciles de leur côté sans ajouter beaucoup d'inconvénients de notre côté. Cela ressemble à un paradigme orienté objet, oùGameObject
serait unextend
peuabstract class
,Transformable
.la source