[RESOLVIDO] O personagem fica tremendo no final da Coroutine
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] O personagem fica tremendo no final da Coroutine
Olá, pessoal! Estou fazendo o pulo do meu personagem usando a coroutine, abaixo segue os métodos comentados. Se tiver algum comentário de alguma função equivocado, pfv pode falar!!!
O que está acontecendo é que o personagem após terminar o pulo, ele fica trepidando no chão por um tempo na casa "destino" e depois para. Então fiz ele dar um pulo e logo em seguida um passo. Ele pula, mas fica trepidando no chão tbm e só depois de um tempo eh que ele para de trepidar e anda.
Quando vou no Console ver os prints, mostra que o valor do transform.position é igual ao "destino", mas era pra ele parar de rodar assim que os dois são iguais, mas ele nesse tempo de trepidação fica sendo impresso no Console os valores do transform.position e do "destino" iguais até o jogador parar de trepidar.
Não sei se tá faltando implementar algo na coroutine, ou se é o fato dos métodos estarem no Update que dá esse efeito.. enfim.. não sei.
Alguém sabe oq seria isso?
Grata!
- Código:
// Método que faz o Jogador pular
public void pular(Vector3 destino, Vector3 anguloFinal, int casaAtual, int casaDeDestino) {
// Seta o parâmetro dos movimentos do Jogador. Aqui ele pula
_animator.SetFloat("MovimentoHomemAmarelo1", moviPulando);
// Gira o Jogador lentamente do ângulo atual para o final
transform.eulerAngles = Vector3.Lerp(transform.eulerAngles, anguloFinal, Time.deltaTime);
// Inicia a Coroutine que trata do atraso do pulo para sincronizar com a animação do pulo
StartCoroutine(delayPulo(0.7f));
// Inicia a Coroutine que trata do atraso do deslocamento para sincronizar com a animação do pulo
StartCoroutine(delayDeslocamento(0.8f, destino));
// A variável "retornoCorotinaDelayDeslocamento" recebe o valor 1 quando a posição atual do jogador é igual ao destino tratados no método "delayDeslocamento"
// Quando retornoCorotinaDelayDeslocamento == 1, o jogo é parado e trata o status da Casa Atual e a de destino. "retornoCorotinaDelayDeslocamento" deve ser zerado no método "parar"
if(retornoCorotinaDelayDeslocamento == 1) {
// Método que deixa o Jogador parado
parar(destino, anguloFinal, casaAtual, casaDeDestino);
}
}
// Método responsável pelo atraso do pulo para que o jogador só suba quando ele tiver saindo do chão
IEnumerator delayPulo(float tempo) {
// Espera esse tempo para que, após esse tempo, seja executado o que vir em baixo da linha yield return new WaitForSeconds
yield return new WaitForSeconds(tempo);
// A variável "salto" é iniciada com o valor "true" e após entrar em seu loop ela recebe o valor "false"
if(salto) {
// Pulo do Jogador
_rigidbody.AddForce(new Vector3(0, alturaDoPuloNoEixoY, 0), ForceMode.Impulse);
// A variável "salto" recebe o valor false
salto = false;
}
}
// Método responsável pelo atraso do deslocamento do pulo para que o jogador só seja deslocado quando ele tiver saido do chão
IEnumerator delayDeslocamento(float tempo, Vector3 destino) {
// Espera esse tempo para que, após esse tempo, seja executado o que vir em baixo da linha yield return new WaitForSeconds
yield return new WaitForSeconds(tempo);
// Deslocamento da Posição Inicial à Final
transform.position = Vector3.MoveTowards(transform.position, destino, velocidadePular * Time.deltaTime);
print("== delayDeslocamento == ");
print("transform.position ==== " + transform.position);
print("destino =============== " + destino);
// A posição atual do Jogador é a final/destino
if(transform.position == destino) {
// A variável "retornoCorotinaDelayDeslocamento" recebe o vaor 1 para ser tratada no método "pular" e "pulaContinuo"
retornoCorotinaDelayDeslocamento = 1;
}
}
O que está acontecendo é que o personagem após terminar o pulo, ele fica trepidando no chão por um tempo na casa "destino" e depois para. Então fiz ele dar um pulo e logo em seguida um passo. Ele pula, mas fica trepidando no chão tbm e só depois de um tempo eh que ele para de trepidar e anda.
Quando vou no Console ver os prints, mostra que o valor do transform.position é igual ao "destino", mas era pra ele parar de rodar assim que os dois são iguais, mas ele nesse tempo de trepidação fica sendo impresso no Console os valores do transform.position e do "destino" iguais até o jogador parar de trepidar.
Não sei se tá faltando implementar algo na coroutine, ou se é o fato dos métodos estarem no Update que dá esse efeito.. enfim.. não sei.
Alguém sabe oq seria isso?
Grata!
Última edição por WLCS22 em Qui Abr 29, 2021 1:00 pm, editado 3 vez(es)
WLCS22- MembroAvançado
- PONTOS : 1927
REPUTAÇÃO : 60
Respeito as regras :
Re: [RESOLVIDO] O personagem fica tremendo no final da Coroutine
Gente, coisa de iniciante msm
Resolvi simples, foi só finalizar todas as Coroutines no método "pular", usando "StopAllCoroutines()" assim:
Fica aí pra quem se deparar com a msm bronca!
Resolvi simples, foi só finalizar todas as Coroutines no método "pular", usando "StopAllCoroutines()" assim:
- Código:
if(retornoCorotinaDelayDeslocamento == 1) {
// Método que deixa o Jogador parado
parar(destino, anguloFinal, casaAtual, casaDeDestino);
// Pára todas as Coroutines
StopAllCoroutines();
}
Fica aí pra quem se deparar com a msm bronca!
WLCS22- MembroAvançado
- PONTOS : 1927
REPUTAÇÃO : 60
Respeito as regras :
Tópicos semelhantes
» Meu personagem na Realidade Aumentada fica tremendo
» Carro fica tremendo
» Player Fica Tremendo
» DUVIDA Camera fica tremendo
» [TUTORIAL] Mira que fica se movendo (ocilando,tremendo,etc)
» Carro fica tremendo
» Player Fica Tremendo
» DUVIDA Camera fica tremendo
» [TUTORIAL] Mira que fica se movendo (ocilando,tremendo,etc)
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos