Aula de Programação ( Condicionais e Operadores )

Aos 06:00 minutos de aula:

  • Temos a variável posicaoDoObjeto ( Vector3 )
  • Damos a essa variável o valor de transform.position

Minha dúvida é:
Porque na condicional ELSE, não se aplica diretamente o “transform.position” ?

Porque dar valor de Vector3 ao posicaoDoObjeto e depois, dar-lhe o valor de transform.position ?

Obrigado.

2 curtidas

Opa Jota, tudo bom?
Não sei se é exatamente aqui a duvida:

Não entendi exatamente o que tu quis dizer com “dar valor de Vector3 ao posicaoDoObjeto”

Mas dentro do else é dessa maneira pois se fosse:

transform.position = posicaoDoObjeto, não teria como fazer a lógica de descer 1m que ele queria implementar no exemplo.

Dessa forma que está, ele usa apenas os eixos X e Z da posicaoDoObjeto e decrementa o Y.

Talvez eu não entendi bem sua duvida, mas eu vejo da seguinte maneira: como programador, muitas vezes você vai identificar formas diferentes de fazer um código, e que vão dar na mesma. Na maioria das vezes tem que entender que programar antes de qualquer coisa é um processo criativo. Muitas vezes a forma que você faz pode dar no mesmo que outro programador faria. Então se na sua ideia segue funcionando e dando no mesmo, pode apenas ser a forma como o Lucas prefere implementar.

Eu mesmo criaria um método “DescerPosicao” e chamaria ele no else, por exemplo. Faria de diversas formas diferentes e seguiria no mesmo.

Mas pra gente entender melhor tua duvida, posta o código como tu imagina e aí a gente pode discutir de forma mais específica.

2 curtidas

Pronto, tranquilo. Boa tarde, Fernando!
Minha dúvida é:
Porque temos que declarar esse Vector3 (posicaoDoObjeto) ?
Qual a real necessidade?

EM:
transform.position = new Vector3(…)

Poderíamos:

transform.position = new Vector3(transform.position.x, transform.position.y -1, transform.position.z);

Não?

2 curtidas

Jota, poderia, dentro do else daria no mesmo, mas isso não alteraria a necessidade da variável posicaoDoObjeto, ele teria que mudar mais coisa.

Como o Lucas queria que o cubo voltasse para a posição original quando estivesse girando, ele precisa armazenar ela em um local.
Por isso é feito no start. Ele armazena a posição inicial do objeto e depois para cada estado ele muda a posição.
Se ele parar de girar, ele desce, mas se ele voltar a girar, deve voltar a posição inicial.

Claro, poderia ser apenas + 1 e - 1 no Y, e ignorar a variável posicaoDoObjeto, já que o código só faz isso mesmo. Mas eu acho que o Lucas quis mais mostrar o uso da variável ali mesmo.

Resumindo, você está certo, poderia sim, o código poderia ser bem mais resumido, até removendo o Girar() e deixando tudo no update mesmo:

void Update() {
    if (girar) {
        transform.Rotate(0,0, rotacaoPorSegundo * Time.deltaTime);
        transform.position = new Vector3(transform.position.x, transform.position.y + 1, transform.position.z);
    } else {
        transform.position = new Vector3(transform.position.x, transform.position.y - 1, transform.position.z);
    }
}

Assim retirando o Start… Mas o que estamos fazendo aqui já virou code review haha

3 curtidas

Perfeito! No método Start, eu criei a variável posicaoDoObjeto para armazenar a posição inicial do objeto. No exemplo da aula, essa variável não é muito utilizada, já que o valor de girar permanece inalterado. Mas, imagine se girar mudasse a cada 5 segundos. Nesse caso, cairíamos no bloco else, e o cubo iria se mover para baixo continuamente, descendo um metro a cada vez:

new Vector3(transform.position.x, transform.position.y -1, transform.position.z); 

Para evitar isso, criei a variável posicaoDoObjeto (que poderia ser chamada de posicaoInicialDoObjeto) para garantir que qualquer alteração na posição do objeto seja sempre em relação à sua posição inicial, e não em relação à sua posição atual, evitando mudanças acumulativas indesejadas.

3 curtidas