Aos 07:50 segundos do segundo video da aula 3. Detectando colisões e destruindo inimigos, o instrutor fez algo que me deixou com uma duvida no funcionamento do escopo de variáveis locais.
void OnTriggerEnter(Collider elementoColidido){
if (elementoColidido.CompareTag ("inimigo")) {
Destroy (this.gameObject);
//Destroy (elementoColidido.gameObject);
//Debug.Log ("Colidiu");
Inimigo inimigo = elementoColidido.gameObject.GetComponent<Inimigo>();
inimigo.RecebeDano (pontosDeDano);
}
eu inicialmente imaginei que ele faria da seguinte forma.
elementoColidido.gameObject.GetComponent<Inimigo>().RedebeDano(pontosDeDano);
pois dessa forma acessamos o gameobject desse collider e verificamos se nele existe um componente do tipo inimigo. E então acessamos o RecebeDano desse componente.
Agora que vem a duvida. Quando eu crio uma variável local do tipo Inimigo e a chamo de inimigo, a faço uma atribuição desse elemento que recebeu a colisao do missil, que é o inimo que tambem é do tipo Inimigo. dessa forma
Inimigo inimigo = elementoColidido.gameObject.GetComponent<Inimigo>();
inimigo.RecebeDano (pontosDeDano);
Mas essa variável não é local? Dessa forma eu não tenho dois objetos agora em tempo de execução do tipo inimigo, o meu inimigo propriamente criado no inicio do jogo e agora essa "copia" desse primeiro objeto nesse segundo objeto do tipo Inimigo só que em uma variável que existe apenas dentro do escopo da função OnTriggerEnter() ?? Ou seja, ele não executa essa função e retira 10 pontos de vida (caso esse seja o valor passado) so que dessa variavel local? Assim quando o codigo sair dessa função e outro missil atingir o inimigo, ele nao estaria com os mesmos 20 pontos de vida?(caso esse fosse os pontos iniciais) Esse valor nao é decrementado apenas da variavel local inimigo? Como que esse valor decrementado é passado p o inimigo que veio do Collicder elemento Colidido? Por acaso nao estamos copiando o conteudo desse objeto para o objeto que sera refenciado pela vaariavel de refencia local inimigo? Estamos na verdade atribuindo tipo o valor em sua memoria? Tipo um ponteiro? Eu realmente fiquei sem entender pq que eu fazendo essa atribuição o valor realemnete é decrementado das vidas do inimigo....Eu fiz da minha maneira e como esta na aula e realmente funciona, porem nao entendi pq que o da aula funciona.