Estou tentando entender o raciocínio por trás do design do mecanismo Unity3D e isso é algo que ainda não consigo entender: por que transformar dados armazenados em um componente separado, em vez de fazer parte do GameObject, como nome, máscaras de camada e Tag? Ele não pode ser removido como todos os outros componentes de qualquer maneira, não há alternativas e, portanto, não é necessário removê-lo.
architecture
unity
component-based
snake5
fonte
fonte
Respostas:
Somente os desenvolvedores do Unity podem dar sua verdadeira motivação para esse design, mas um argumento para fazer isso é que há um argumento de que cada classe em um projeto de software deve lidar com uma e apenas uma responsabilidade . O GameObject é uma coleção nomeada de componentes, e adicionar posição / rotação / etc significa que ele teria duas responsabilidades. O componente Transform manipula posição e rotação e, portanto, também não deve ser responsável por nomear ou agregar outros componentes (potencialmente não relacionados). Portanto, faz sentido que esses 2 conceitos existam em 2 objetos separados.
De maneira mais geral, essa pergunta pergunta "se existe um relacionamento de 1 para 1 entre X e Y, por que Y não faz parte de X ou vice-versa?" E a resposta geral é que o software é mais fácil de desenvolver e manter quando dividido em partes menores e independentes, mesmo que duas partes sempre trabalhem juntas em conjunto.
fonte
A transformação é um componente obrigatório no Unity.
A razão pela qual uma transformação é um componente obrigatório é que os objetos do jogo estão localizados em uma cena e, portanto, precisam de informações espaciais (posição, orientação e escala) sobre esse objeto. (Essas informações nem sempre são usadas, mas manter o componente de transformação obrigatório mantém as coisas um pouco mais simples).
fonte
O
TransformComponent
é o mais difícilComponent
de projetar corretamente na arquitetura de vídeo game. Quase todos os outrosComponent
precisam saber sobre aGameObject
posição, rotação ou escala de um dado , portanto, desacoplar adequadamente todos esses sistemas inter-relacionados é inerentemente difícil.Sempre haverá trocas na arquitetura. Por
TransformComponent
serem estáticos (ou seja, não dinâmicos), os desenvolvedores do Unity podem escrever código sob essa suposição. Eu diria que isso facilita muito as coisas do lado deles, sem acrescentar muitos inconvenientes ao nosso lado. Isto é semelhante a um paradigma de orientação a objetos, ondeGameObject
fariaextend
algumabstract class
,Transformable
.fonte