PUBLIC PRIVATE e PROTECT

Bom dia,

estou no comecinho do curso, porem, essa explicação não ficou claro para mim, sou uma pessoa que precisa de exemplos de como isso funciona no jogo/cena/edição, do que so teoria, e as vezes fico confuso.

o que difere nos 3 comandos,

Public int rotaçãoPorSegundo = 30;
Private int rotaçãoPorSegundo = 30;
Protect int rotaçãoPorSegundo = 30;

o que muda do “Public int” para " [SerializeField + Private int] pois na cena não vi mudança nenhuma,

Pelo que entendi, no apenas Private, a edição so vai ocorrer se abrir o c#

Mas qual o beneficio de deixar Private sendo que é mais pratico [SerializeField + Private int] ou Public int

Ótima pergunta! Vou tentar te explicar com um exemplo prático.


:pushpin: Vamos lá:

Imagine que você tem um script chamado Rotacao.cs e ele está em um GameObject chamado “Cubo”.

1. public int rotacaoPorSegundo = 30;

  • Esse valor aparece no Inspector da Unity.
  • Pode ser lido e modificado por outros scripts.

Por exemplo: Qualquer outro script pode acessar e até alterar esse valor assim:

rotacaoScript.rotacaoPorSegundo = 100;

2. private int rotacaoPorSegundo = 30;

  • O valor não aparece no Inspector, então você só pode editá-lo dentro do código C#.
  • Não pode ser acessado por outros scripts.
  • Ou seja, é bem “fechado”.

3. [SerializeField] private int rotacaoPorSegundo = 30;

  • Agora ficou interessante! Esse valor:
    • Continua privado (outros scripts não conseguem acessar).
    • Mas aparece no Inspector, então você pode editar dentro da Unity sem abrir o código!
  • É como dizer: “Esse valor é só meu, mas vou deixar você configurar no editor”.

:thinking: Então… qual usar?

  • Se precisa mudar no Inspector, mas não quer que outros scripts mexam:
    :point_right: Use [SerializeField] private
  • Se quer que outros scripts possam ler e mudar:
    :point_right: Use public
  • Se o valor é só usado dentro do próprio script e nunca vai mudar pelo Inspector:
    :point_right: Use private puro

O funcionamento do comandocontinuará sendo o mesmo, a diferença é o nível de acesso da variável.