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

Dúvida na sintaxe (Míssil)

Olá! Estou com dificuldades em entender a sintaxe do seguinte código:

public class Missil : MonoBehaviour 
{

  private float velocidade = 10;

  void Update () 
  {
    Anda ();
  }

  private void Anda ()
  {
    Vector3 posicaoAtual = transform.position;
    Vector3 deslocamento = transform.forward * Time.deltaTime * velocidade;
    transform.position = posicaoAtual + deslocamento;
  }
}

Mais especificamente em:

Vector3 posicaoAtual = transform.position;

Acima, estamos tentando acessar a posição do míssil por meio de "transform.position". Porém, não deveríamos ser mais claros e colocar um "this." antes de transform, para dizermos que estamos acessando o atributo position do objeto que chamou o método Anda()? Minha dúvida se extende para todos os lugares do código que utilizamos "transform"

1 resposta
solução!

Olá Thiago,

De fato, se quiséssemos deixar o código mais claro poderíamos usar o this antes de cada uma das chamadas ao transform. Dessa forma, ficaria explícito que estamos acessando um atributo da classe.

Apesar disso, quando não existe ambiguidade no acesso a um nome, podemos omitir o this pois podemos deduzir pelo código que o transform só pode ser um atributo da classe. Por exemplo:

public class Missil : MonoBehaviour 
{

  void Anda () 
  {
    transform.position += transform.forward * Time.deltaTime;
  }
}

Nesse caso, não existe nenhuma varíavel local chamada transform no método Update() então podemos deduzir que transform precisa ser um atributo da classe para esse código compilar.

Agora veja o mesmo exemplo modificado:

public class Missil : MonoBehaviour 
{

  void Anda (Transform transform) 
  {
    transform.position += transform.forward * Time.deltaTime;
  }
}

Agora nesse código temos muita ambiguidade e seria necessário utilizar o this para deixar explícito onde queremos nos referenciar ao atributo transform e onde queremos referenciar o parâmetro transform.

Uma possibilidade seria:

public class Missil : MonoBehaviour 
{

  void Anda (Transform transform) 
  {
    this.transform.position += transform.forward * Time.deltaTime;
  }
}

Deixamos claro que queremos modificar o transform do próprio Missil utilizando o parâmetro transform para fazer o cálculo do deslocamento.