O editor da
Unity é um ferramenta poderosa para auxiliar na configuração do jogo, podendo ser utilizado até para associar valores de variáveis públicas (ou marcadas com
SerializeField) que estejam disponíveis na aba
Inspector.
Por ser de fácil uso, muitos desenvolvedores acabam sempre utilizando este recurso para associar valores em suas variáveis, arrastando o componente de um objeto para a variável definida em outro script. Um exemplo comum é a criação de um Script para a movimentação de um objeto, por exemplo o jogador, onde essa movimentação será realizada com física, através do Rigidbody.
using UnityEngine;
public class Jogador : MonoBehaviour {
public Rigidbody2D rigidbody2d;
}
Partindo do script de exemplo acima, com o nosso script contendo uma variável pública do tipo Ridigbody2D, nós precisamos associar o componente Rigidbody2D, que deve estar presente em nosso objeto, na variável de mesmo nome (rigidbody2d) para que possamos utilizá-la no nosso código, conforme pode ser visto na imagem abaixo:
|
Rigidbody2D sendo associado ao script do jogador através do Editor da Unity |
Arrastar o Rigidbody (ou o objeto todo) para a variável é a forma mais simples e comum de fazer essa associação. Mas você sabia que é possível fazer isso diretamente pelo seu código, sem precisar arrastar nenhum objeto na Unity?
O
MonoBehavour, script base de todos os scripts que criamos na
Unity, possui um método chamado
GetComponent que permite ao nosso script obter a referência para qualquer componente (
Scripts,
Rigidbody,
SpriteRenderer,
Colliders e etc.) que esteja associado ao mesmo
GameObject onde o nosso script foi adicionado.
O exemplo de código abaixo mostra um script Jogador contendo três variáveis (rigidbody2d, spriteRenderer e circleCollider2d) que são privadas, ou seja, não estarão visualmente disponíveis para edição no Editor/Inspector da Unity.
using UnityEngine;
public class Jogador : MonoBehaviour {
private Rigidbody2D rigidbody2d;
private SpriteRenderer spriteRenderer;
private CircleCollider2D circleCollider2d;
public void Start() {
// Obtém a referência para os componentes automaticamente,
// após iniciar o script, sem precisar arrastar os componentes
// no Editor da Unity
this.rigidbody2d = GetComponent<Rigidbody2D>();
this.spriteRenderer = GetComponent<SpriteRenderer>();
this.circleCollider2d = GetComponent<CircleCollider2D>();
}
}
Por não estarem disponíveis através do editor da Unity, toda a associação entre os componentes contidos no GameObject (imagem abaixo) e as variáveis definidas em nossos scripts, é realizada através do método GetComponent, que busca automaticamente por componentes com os tipos especificados em nosso código (Rigidbody2D, SpriteRenderer e CircleCollider2D) que estejam associados ao mesmo GameObject que o script Jogador e cria a conexão entre as variáveis e os componentes, para que os componentes possam ser utilizados durante a execução do jogador.
|
Script Jogador no Inspector, sem a necessidade de variáveis públicas para associar componentes |
A utilização de variáveis públicas (ou marcadas com SerializeField) tem como vantagem a facilidade de associação entre as variáveis e componentes, assim como a clareza na identificação de quais componentes são necessários para o funcionamento do script/objeto, sem a necessidade de consultar o código desenvolvido. Por outro lado, a utilização do GetComponent reduz a chance de inicializarmos o nosso jogo com associações de variáveis pendentes, fazendo com que o jogo não funcione corretamente.
É claro que para o bom funcionamento do método GetComponent, os componentes necessários já precisam ter sido adicionados previamente, fazendo com que falhas na configuração dos objetos ainda possam ocorrer. A boa notícia é que também existem forma de mitigar essas falhas e facilitar ainda mais a configuração de nossos GameObject e nós vamos falar disso em breve, em outro post. ;)
Gostou do método GetComponent ou tem dúvida sobre o seu funcionando? Comenta aí!
Comentários
Postar um comentário