// Update is called once per frame void Update() { if (controlador.colisoes.abaixo || controlador.colisoes.acima) { velocidade.y = 0f; } if (contadorTempoEntrePulos <= 0 && controlador.colisoes.abaixo) { velocidade.y = velocidadePulo; contadorTempoEntrePulos = tempoEntrePulos; } if (contadorTempoEntrePulos > 0) { contadorTempoEntrePulos -= Time.deltaTime; } if (controlador.colisoes.abaixo) { estaPulando = false; estaParado = true; estaCaindo = false; } else if (velocidade.y <= 0) { estaPulando = false; estaParado = false; estaCaindo = true; } else { estaPulando = true; estaParado = false; estaCaindo = false; } animador.SetBool("estaParado", estaParado); animador.SetBool("estaPulando", estaPulando); animador.SetBool("estaCaindo", estaCaindo); velocidade.y += gravidade * Time.deltaTime; controlador.Mover(velocidade * Time.deltaTime); }
void Update() { if (controlador.colisoes.abaixo || controlador.colisoes.acima) { velocidade.y = 0f; } contadorIntervaloEntrePulos -= Time.deltaTime; if (contadorIntervaloEntrePulos <= 0f) { if (controlador.colisoes.abaixo) { velocidade.y = velocidadePulo; } contadorIntervaloEntrePulos = intervaloEntrePulos; } velocidade.y += gravidade * Time.deltaTime; controlador.Mover(velocidade * Time.deltaTime); }
// Update is called once per frame void Update() { // Experimente o código e depois remova o comentário do trecho abaixo. Consegue notar o que mudou? *Para remover múltiplas linhas remova o /* e o */. if (controlador.colisoes.abaixo || controlador.colisoes.acima) { velocidade.y = 0f; } // Armazena o estado do personagem em um atributo dessa classe. Você consegue visualizar ele no Inspector enquanto o jogo roda :D Útil para entender se a sua movimentação está correta. estaNoChao = controlador.colisoes.abaixo; // Armazena os Inputs verticais do jogador (a, d, seta para esquerda e direita) float inputHorizontal = Input.GetAxisRaw("Horizontal"); // Checa se a seta para cima foi apertada e se o jogador está no chão. Caso tudo seja verdadeiro, modifique nossa velocidade.y para podermos pular. // https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/operators/boolean-logical-operators // http://www.inf.ufpr.br/cursos/ci067/Docs/NotasAula/notas-6_Operadores_Logicos.html if (Input.GetKeyDown(KeyCode.UpArrow) && controlador.colisoes.abaixo) { velocidade.y = velocidadePulo; } if (velocidade.y != 0) { estaPulando = true; estaAndando = false; estaParado = false; } else { if (inputHorizontal == 0) { estaAndando = false; estaParado = true; } else { estaAndando = true; estaParado = false; } estaPulando = false; } animador.SetBool("estaParado", estaParado); animador.SetBool("estaAndando", estaAndando); animador.SetBool("estaPulando", estaPulando); // Você consegue entender o que o código abaixo faz? // Tente substituír as duas linhas abaixo por a seguinte: // velocidade.x = inputHorizontal * velocidadeMovimento; // Você nota alguma diferença? float velocidadeAlvoX = inputHorizontal * velocidadeMovimento; velocidade.x = Mathf.SmoothDamp(velocidade.x, velocidadeAlvoX, ref suavizacaoXVelocidade, controlador.colisoes.abaixo ? tempoAceleracaoNoChao : tempoAceleracaoNoAr); // Adiciona nossa gravidade à velocidade.y velocidade.y += gravidade * Time.deltaTime; // E finalmente move nosso personagem. controlador.Mover(velocidade * Time.deltaTime); AtualizaOlhar(inputHorizontal); }