Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida]SerializedField

Boa tarde, existe uma diferença entre escrever como o instrutor mostrou no video e colocar as variaveis como publicas?

Avião

private Rigidbody2D fisica;

public float Impulso = 10;
...
 private void Impulsionar()
{
    this.fisica.AddForce(Vector2.up * Impulso, ForceMode2D.Impulse);
}

Obstaculo

public float Velocidade = 0.5f;


void Update()
{
    this.transform.Translate(Vector3.left * Velocidade);
}
1 resposta
solução!

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!