Unity3D – Conceitos básicos 2 – GameObjects e Components
Autor: Caio Vinicius Marques Teixeira | Publicado: 2011-10-24T15:09:00-02:00





Muitas Game Engines de
gerações passadas utilizavam uma arquitetura baseada em Herança, onde uma
classe principal (geralmente algo parecido com GameObject) tinha todas as
funções básicas, e os demais objetos herdavam suas funcionalidades e
acrescentavam o que era necessário. Como em outras áreas do desenvolvimento de
software, o uso exagerado de herança pode causar problemas, como falta de
flexibilidade na hora de adicionar novas funcionalidades, algo que muitas vezes
só era resolvido com heranças múltiplas.



A Unity3D traz um modelo
novo e muito eficiente, esse modelo é uma versão aprimorada do modelo de
composição, nele existe uma classe básica chama GameObject, esta classe receberá componentes que adicionarão suas
funções. Portanto, todo objeto no Unity3D é um GameObject com determinados
componentes que determinam suas funcionalidades, seja um personagem ou mesmo um
objeto de GUI (Interface gráfica). A documentação do Unity trata GameObject
como “Uma panela vazia” e Components como “Os ingredientes para fazer a receita
da jogabilidade”.



Como exemplo, temos abaixo
uma imagem de um GameObject padrão Camera, ele é um GameObject, porém possui um
componente do tipo camera que determina essa funcionalidade.







Componentes básicos





Como já foi falado,
componentes definem as funcionalidades de um GameObject, abaixo está detalhado
alguns dos componentes básicos do Unity3D, recomendo que visualize a página da
documentação do Unity3D sobre Components (link nas referencias), lá encontrará
informações detalhadas de todos os Components da Unity3D.



Transform:
É
impossível criar um GameObject sem um componente Transform, é ele que determina
sua existência em uma cena, nele são determinados valores como posição, rotação
e escala. Além de ser componente essencial para a programação.



Colliders:
Definem
o que é chamado de geometria de colisão, permitem que o sistema físico do Unity
(a Nvidia Physx) detecte colisões entre objetos. Também podem atuar como
Triggers, ou seja, ativam o processamento de um determinado trecho de código,
caso ocorra uma colisão entre eles.



RigidBody:
Funcionam
como o “coração” do sistema de física (Physx), faz com que esse objeto
participe da simulação física, adicionando massa, atuação da gravidade e demais
fenômenos físicos. Deve-se sempre utilizar Colliders em conjunto, pois são eles
que determinam a interação com demais objetos. 



Character
Controller: A Unity3D ainda oferece um tipo especial de
componente para personagens. Simular a física de um personagem é extremamente
complicado, pois determinados eventos como rotações podem atrapalhar o controle
do mesmo. O Character Controller serve para isso, ignorar em partes o sistema
físico, adicionando funções específicas pra um personagem. Não deve-se &nbsp;utilizar com&nbsp;
componentes RigidBody e Colliders.



Joints:
Outra
funcionalidade legal da Unity3D, permite a simulação de objetos conectados,
como dobradiças ou mesmo molas. Vale como sempre, dar uma olhada na
documentação da Unity3D.



Scripts:
Além
dos componentes padrão da Unity3D, você também pode criar os seus através de
scripts, não irei detalhar o funcionamento dos mesmos neste post, porém é
importante saber, que eles se comportam como Components.



Referências

OOP - Herança x Composição Explicação sobre a diferença entre Herança e composição

Unity - GameObjects Trecho da documentação oficial do Unity3D sobre GameObjects. (em Inglês)

Unity - The GameObject-Components Relationship Um pouco sobre a relação GameObject-Components. (em Inglês)

Unity - Transform&nbsp; Um pouco sobre o componente Transform. (em Inglês)

Unity - Components Lista de componentes do Unity3D. (em Inglês)

DMU - CUSTOMIZANDO O UNITY Aula da DMU, que fala um pouco sobre GameObjects e Components.





Infosecom - Trabalhando com gravidade e colisões Videoaula sobre como lidar com gravidade e colisões no Unity3D

Infosecom - Como lidar com components Videoaula sobre Components

&nbsp;&nbsp;