Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida sobre modo de atribuição de valor a variável

Existe uma regra/padrão para definição de uma variável do tipo gameObject como publica ou privada? Na vídeo aula 6 do segundo módulo definimos uma variável como private e demos um game Object.find. Poque não definimos o alvo como public e atribuímos o arrastando via IDE como foi feito em aulas anteriores? Algum motivo em especial?

Tks

2 respostas
solução!

Olá Daniel,

Quando trabalhamos com linguagens orientadas a objeto, procuramos fazer com que todos os atributos de uma classe sejam privados e que o acesso a eles seja controlado pela utilização obrigatória de métodos para ler e escrever valores nesses atributos.

Se colocamos o gameObject como public, o editor do Unity consegue enxergar e podemos arrastar os objetos direto na ferramenta, o que é ótimo pra gente. Mas o que acontece se os outros objetos tentarem acessar esse gameObject? Certamente, eles vão conseguir! E se algum deles começar a mexer nesse gameObject, trocando o valor, colocando algo que não faça sentido? Se isso acontecer, nosso jogo vai começar a se comportar de maneiras que não queremos e talvez até pare de funcionar.

A alternativa é deixar o gameObject como private permitindo que só a própria classe possa manipular o objeto. Mas aí dificulta nossa vida na ferramenta... seria bom ter um meio termo né?

Então o que podemos fazer é manter o campo como private e colocar logo acima dele um indicador que dá permissão apenas para que o Unity (além da própria classe) possa acessar o atributo. Então você poderia escrever na declaração do atributo algo como:

[SerializeField]
private GameObject gameObject;

Pronto! Agora temos as vantagens do encapsulamento (protegemos o acesso ao atributo e escondemos os detalhes de implementação) e ainda podemos arrastar os nossos GameObject direto pela interface do Unity!

Maravilha Jeferson, tks pelo retorno.