Declarar variáveis como públicas (
public) em nossos scripts é uma forma prática de permitir que os valores dessas variáveis sejam definidos/editados através da
Unity, mas do ponto de vista da Programação Orientada a Objetos e principalmente do princípio do Encapsulamento, essa abordagem de variáveis públicas deixa de ser tão encorajada.
using UnityEngine;
public class Jogador : MonoBehaviour {
public string nome;
public int vidas;
public float velocidadeMovimentacao;
public bool invulneravel;
public Rigidbody2D rigidbody2d;
public Collider2D collider2d;
public SpriteRenderer spriteRenderer;
}
|
Unity inspector contendo as variáveis públicas do jogador automaticamente serializadas |
Tornar as variáveis privadas e/ou protegidas para controlar o acesso aos atributos de um script é uma abordagem recomendada pelo princípio do Encapsulamento e pode ser feita de forma simples, alterando o modificador de acesso das nossas variáveis, como pode ser visto na imagem abaixo.
using UnityEngine;
public class Jogador : MonoBehaviour {
private string nome;
private int vidas;
private float velocidadeMovimentacao;
private bool invulneravel;
protected Rigidbody2D rigidbody2d;
protected Collider2D collider2d;
protected SpriteRenderer spriteRenderer;
}
Ao realizar essa alteração, todas as nossas variáveis marcadas como privadas (private) ou protegidas (protected) deixam de ser serializadas pela Unity e consequentemente deixam de ser exibidas no inspector, impedindo que nossas variáveis possam ser configuradas através do Unity Editor.
|
Unity inspector exibindo script Jogador sem variáveis serializadas |
Felizmente, existe uma abordagem que permite encapsular nossas variáveis, tornando elas privadas (
private) ou protegidas (
protected), e ainda manter os valores delas disponíveis para serem definidos/alterados através do editor da
Unity. Sabia dessa?
Para fazer isso, a Unity disponibiliza um atributo chamado SerializeField que permite marcar variáveis que devem ser serializadas pelo Editor da Unity, mesmo que elas sejam privadas ou protegidas.
using UnityEngine;
public class Jogador : MonoBehaviour {
[SerializeField]
private string nome;
[SerializeField]
private int vidas;
[SerializeField]
private float velocidadeMovimentacao;
[SerializeField]
private bool invulneravel;
[SerializeField]
protected Rigidbody2D rigidbody2d;
[SerializeField]
protected Collider2D collider2d;
[SerializeField]
protected SpriteRenderer spriteRenderer;
}
Ao serializar uma variável com o atributo SerializeField estamos dizendo para a Unity que o valor dessa variável deverá ser salvo (serializado) pelo Editor da Unity e recuperado (deserializado) quando precisar ser utilizado/exibido. Esse processo de serialização/deserialização acontece sempre que o valor é alterado no editor da Unity, quando o valor precisa ser exibido no editor e quando o jogo é iniciado, definindo o valor da nossa variável durante o processo de inicialização do nosso script.
|
Unity inspector contendo as variáveis privadas (private) e protegidas (protected) serializadas
|
Dessa forma, nosso código consegue seguir o princípio do Encapsulamento, permitindo que nossas variáveis sejam protegidas de acessos indevidos/indesejados, sem deixar de aproveitar a flexibilidade do editor da Unity para a configuração dos nossos scripts.
Gostou do atributo SerializeField ou tem dúvida sobre o que é Encapsulamento e quais as duas vantagens? Comenta aí!
Comentários
Postar um comentário