Olá, Vitor! Entendo sua dúvida e é realmente um ponto importante a ser esclarecido.
A diferença entre usar public
e [SerializeField] private
é principalmente uma questão de boas práticas e encapsulamento de dados.
Quando você declara uma variável como public
, ela pode ser acessada e modificada por qualquer outra classe. Isso pode causar problemas, pois você está permitindo que qualquer outra parte do seu código altere essa variável.
Por outro lado, quando você usa [SerializeField] private
, você está dizendo que essa variável é privada (ou seja, só pode ser acessada e modificada pela própria classe), mas ainda assim, você quer ser capaz de vê-la e modificá-la no editor da Unity. Isso permite que você mantenha o encapsulamento de dados (uma importante prática de programação orientada a objetos), mas também tenha a flexibilidade de ajustar os valores no editor da Unity.
Por exemplo, se você tiver uma variável de velocidade em seu script, você pode querer ajustá-la no editor da Unity para encontrar a velocidade perfeita. No entanto, você não quer que outras classes possam alterar essa velocidade. Nesse caso, [SerializeField] private
seria a escolha perfeita.
Aqui está como ficaria seu código com [SerializeField] private
:
Avião:
[SerializeField]
private Rigidbody2D fisica;
[SerializeField]
private float Impulso = 10;
private void Impulsionar()
{
this.fisica.AddForce(Vector2.up * Impulso, ForceMode2D.Impulse);
}
Obstáculo:
[SerializeField]
private float Velocidade = 0.5f;
void Update()
{
this.transform.Translate(Vector3.left * Velocidade);
}
Espero ter ajudado e bons estudos!