Estoy tratando de entender el razonamiento detrás del diseño del motor Unity3D y esto es algo que aún no puedo entender: por qué la transformación de datos se almacena en un componente separado, en lugar de ser parte de GameObject, como el nombre, las máscaras de capa y etiquetas? De todos modos, no puede eliminarse como todos los demás componentes, no hay alternativas y, por lo tanto, no es necesario eliminarlo.
architecture
unity
component-based
serpiente5
fuente
fuente
Respuestas:
Solo los desarrolladores de Unity pueden dar su verdadera motivación para este diseño, pero un argumento en apoyo de hacerlo de esta manera es que hay un argumento de que cada clase en un proyecto de software debe manejar una y solo una responsabilidad . GameObject es una colección con nombre de componentes, y agregar posición / rotación / etc. a eso significa que tendría 2 responsabilidades. El componente Transformar maneja la posición y la rotación y, por lo tanto, no debería ser responsable de nombrar o agregar otros componentes (potencialmente no relacionados). Por lo tanto, tiene sentido que estos 2 conceptos existan en 2 objetos separados.
En términos más generales, esta pregunta pregunta "si hay una relación 1 a 1 entre X e Y, ¿por qué Y no es parte de X o viceversa?" Y la respuesta general es que el software es más fácil de desarrollar y mantener cuando se divide en partes independientes más pequeñas, incluso si 2 partes siempre trabajan juntas en conjunto.
fuente
La transformación es un componente obligatorio en Unity.
La razón por la cual una transformación es un componente obligatorio es que los objetos del juego se encuentran en una escena y, por lo tanto, necesitan información espacial (posición, orientación y escala) sobre ese objeto. (Esta información no siempre se usa, pero mantener el componente de transformación obligatorio hace las cosas un poco más simples).
fuente
El
TransformComponent
es el más difícilComponent
de diseñar adecuadamente en la arquitectura de videojuegos. Casi todos los demásComponent
necesitan saber acerca deGameObject
la posición, rotación o escala de una determinada, por lo que desacoplar adecuadamente todos estos sistemas interrelacionados es inherentemente difícil.Siempre habrá compensaciones en arquitectura. Al
TransformComponent
ser estáticos (es decir, no dinámicos), los desarrolladores de Unity pueden escribir código bajo este supuesto. Asumiría que esto hace las cosas mucho más fáciles de su lado sin agregar muchos inconvenientes de nuestro lado. Esto es similar a un paradigma orientado a objetos, dondeGameObject
haríaextend
algunaabstract class
,Transformable
.fuente