[RESOLVIDO] Unity - Giro do Personagem não está funcionando direito
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Unity - Giro do Personagem não está funcionando direito
Boa tarde!
Pessoal, estou tentando fazer meu Personagem girar, mas não estou conseguindo ter êxito. No começo tentei o Lerp no transform.eulerAngles, mas não consegui pq quando o ângulo é menor que zero (negativo) o personagem não para de girar, isso é erro da Unity msm, pois a turma me falou que por tras dos bastidores o que é trabalhado mesmo é o Quaternion. Então fui pro Quaternion. Quando eu jogo ele dentro do Update, o personagem gira de boa, mas quando uso ele dentro de um método, ele não completa o giro. Estou implementando ele assim:
O 1º método está assim:
O que implementa o Quaternion está assim:
O método "andar" eu chamo dentro do método principal, jogo. Está assim:
O método jogo() é bem maior que essa parte que coloquei, mas essa parte tem a implementação do método andar() e já não funciona o Quaternion.
O que seria que está empatando o Quaternion? Não sei se pode ser as variáveis que recebem "false" no método parar(), pois coloquei direto no "andar" e também não funcionou..
Obg!
Pessoal, estou tentando fazer meu Personagem girar, mas não estou conseguindo ter êxito. No começo tentei o Lerp no transform.eulerAngles, mas não consegui pq quando o ângulo é menor que zero (negativo) o personagem não para de girar, isso é erro da Unity msm, pois a turma me falou que por tras dos bastidores o que é trabalhado mesmo é o Quaternion. Então fui pro Quaternion. Quando eu jogo ele dentro do Update, o personagem gira de boa, mas quando uso ele dentro de um método, ele não completa o giro. Estou implementando ele assim:
- Código:
Quaternion rotacaoFinal = Quaternion.Euler(anguloFinal.x, anguloFinal.y, anguloFinal.z);
objPersonagem.transform.rotation = Quaternion.Lerp(objPersonagem.transform.rotation, rotacaoFinal, Time.deltaTime);
O 1º método está assim:
- Código:
public void andar(string stMovimento, GameObject objPersonagem, Animator _animator, Vector3 destino, Vector3 anguloInicial, Vector3 anguloFinal, List<bool> listaDasCasasAtuais, int casaAtual, int casaDeDestino) {
// Seta o parâmetro dos movimentos do Personagem. Aqui ele anda
_animator.SetFloat(stMovimento, movimentoAndando);
// Deslocamento Final
objPersonagem.transform.position = Vector3.MoveTowards(objPersonagem.transform.position, destino, velocidadeAndar * Time.deltaTime);
print("====== Andando =======");
print("objPersonagem.transform.position === " + objPersonagem.transform.position);
print("destino ========= " + destino);
// Quando a posição do deslocamento for igual à posição final, o Personagem para, é tratado o status da Casa Atual e a de destino e as Posição e os Ângulos são congelado/fixados
if(transform.position == destino) {
// Método que deixa o Personagem parado
parar(stMovimento, objPersonagem, _animator, destino, anguloFinal, listaDasCasasAtuais, casaAtual, casaDeDestino);
}
}
O que implementa o Quaternion está assim:
- Código:
public void parar(string stMovimento, GameObject objPersonagem, Animator _animator, Vector3 destino, Vector3 anguloFinal, List<bool> listaDasCasasAtuais, int casaAtual, int casaDeDestino) {
// Seta o parâmetro dos movimentos do Personagem. Aqui ele para
_animator.SetFloat(stMovimento, movimentoParado);
// Conserva a Posição da Inicialização do Personagem Amarelo
objPersonagem.transform.position = destino;
Quaternion rotacaoFinal = Quaternion.Euler(anguloFinal.x, anguloFinal.y, anguloFinal.z);
objPersonagem.transform.rotation = Quaternion.Lerp(objPersonagem.transform.rotation, rotacaoFinal, Time.deltaTime);
// Casas que estão na Lista de Casas Atuais do Personagem. Se o Atual não receber "false", o Personagem não sai do lugar
listaDasCasasAtuais[casaAtual] = false;// Marca a Casa Atual como "false"
listaDasCasasAtuais[casaDeDestino] = true;// Marca a Casa de Destino como "true"
// Variáveis de Retorno dos métodos que tratam Curvas e Pulos com Passos (antes e depois).
// Elas devem voltar a seu valor inicial para serem reutilizadas em outros movimentnos
andouRetorno = false;
correuRetorno1 = false;
correuRetorno2 = false;
pulou_retorno = false;
retornoCoroutineDelayPulo = false;
retornoCoroutineDelayDeslocamento = false;
retornoPlanoInicial = false;
retornoPlataforma = false;
pulo = true;
dado = 0;// Se não zerar o valor do dado, o Personagem não fica parado
print("Parado");
}
O método "andar" eu chamo dentro do método principal, jogo. Está assim:
- Código:
public void jogo(string stMovimento, GameObject objPersonagem, Animator _animator, Rigidbody _rigidbody, List<Vector3> listaDasCasas) {
//print("jogoTimeAmarelo()");
// Varre a Lista (de 59 ítens) em que as referências das Casas foram inseridas. i == 1 para não pegar a plataforma que é i == 0
for(int i = 1; i < listaDasCasas.Count && i < listaDasCasasAtuais.Count; i++) {
// A Casa Atual e Destino
int casaAtual = i;
int casaDeDestino = casaAtual + dado;
if(casaAtual > 58 || casaDeDestino > 58) {
//print("ÍNDICE FORA DA LISTA, SEU LIMITE É 58");
}
// RODA O JOGO
else {
// Casa de Destino do Personagem
Vector3 destino = listaDasCasas[casaDeDestino];
// Se o Personagem atingiu a 58ª Casa, esse Personagem completou o Jogo
if(listaDasCasasAtuais[58] == true) {
// O Fim do Jogo recebe "true", pois o Personagem finalizou 0 Jogo
dancar(stMovimento, objPersonagem, _animator, destino);
}
// O Jogo Continua
else {
// Casa Atual do Personagem e o valor do Dado == 1
if(listaDasCasasAtuais[casaAtual] == true && dado == 1) {
// Anda
if(casaAtual >= 7 && casaAtual <= 10) {
andar(stMovimento, objPersonagem, _animator, destino, anguloPraTras, anguloPraTras, listaDasCasasAtuais, casaAtual, casaDeDestino);
}
}
}
}
}
}
O método jogo() é bem maior que essa parte que coloquei, mas essa parte tem a implementação do método andar() e já não funciona o Quaternion.
O que seria que está empatando o Quaternion? Não sei se pode ser as variáveis que recebem "false" no método parar(), pois coloquei direto no "andar" e também não funcionou..
Obg!
Última edição por WLCS22 em Qui Abr 29, 2021 1:01 pm, editado 1 vez(es)
WLCS22- MembroAvançado
- PONTOS : 1926
REPUTAÇÃO : 60
Respeito as regras :
Re: [RESOLVIDO] Unity - Giro do Personagem não está funcionando direito
pelo que sei o Euler pode causar alguns problemas.
Quaternion rotaionToTarget = Quaternion.LookRotation(directionTarget, Vector3.up);
Porque não tenta usar um Quaternion rotaçãofinal = Quaternion.LookAt
Depois acho que basta colocar a direção que pretende
Quaternion rotaionToTarget = Quaternion.LookRotation(directionTarget, Vector3.up);
Porque não tenta usar um Quaternion rotaçãofinal = Quaternion.LookAt
Depois acho que basta colocar a direção que pretende
Joana- Avançado
- PONTOS : 1640
REPUTAÇÃO : 16
Respeito as regras :
Re: [RESOLVIDO] Unity - Giro do Personagem não está funcionando direito
Ok, fiz assim:
Se for assim, não funcionou. o personagem gira todos os eixos no giro, mesmo tendo colocado Vector3.up, mas se não for assim, como seria?
Quanto ao LookAt, não é pra ele olhar pra outro objeto, mas só girar mesmo, esse não serve.. sem falar que dá erro na sintaxe colocando ele como vc fez..
- Código:
Quaternion rotacaoFinal = Quaternion.LookRotation(anguloPraEsquerda, Vector3.up);
transform.rotation = Quaternion.Lerp(transform.rotation, rotacaoFinal, Time.deltaTime);
Se for assim, não funcionou. o personagem gira todos os eixos no giro, mesmo tendo colocado Vector3.up, mas se não for assim, como seria?
Quanto ao LookAt, não é pra ele olhar pra outro objeto, mas só girar mesmo, esse não serve.. sem falar que dá erro na sintaxe colocando ele como vc fez..
WLCS22- MembroAvançado
- PONTOS : 1926
REPUTAÇÃO : 60
Respeito as regras :
Re: [RESOLVIDO] Unity - Giro do Personagem não está funcionando direito
o look at foi erro meu, queria dizer look rotaion.
Tente Quaternion rotation = Quaternion.lookrotation(a direção rotação);
transform.rotation = a direção rotação
Tente Quaternion rotation = Quaternion.lookrotation(a direção rotação);
transform.rotation = a direção rotação
Joana- Avançado
- PONTOS : 1640
REPUTAÇÃO : 16
Respeito as regras :
Re: [RESOLVIDO] Unity - Giro do Personagem não está funcionando direito
ou então
transform.rotarion = Quaternion.Lerp(trasnform.rotation,startquaternion. time.deltatime *1)
transform.rotarion = Quaternion.Lerp(trasnform.rotation,startquaternion. time.deltatime *1)
Joana- Avançado
- PONTOS : 1640
REPUTAÇÃO : 16
Respeito as regras :
Re: [RESOLVIDO] Unity - Giro do Personagem não está funcionando direito
Então, fiz assim:
e o outro tbm do Quaternion da mensagem lá em cima tbm roda. Quando eu testo direto no Update, ele gira de boa, mas quando coloco em um método e uso posteriormente, ele não completa o giro. É alguma coisa no meu código que tá fazendo isso..
Coloquei meu código acima, eu não tô conseguindo localizar oq tá impedindo o giro.. Será que eh a for() do método jogo()?
- Código:
Quaternion rotacaoFinal = Quaternion.LookRotation(objPontoBordaEsquerda.transform.position, Vector3.up);
transform.rotation = Quaternion.Lerp(transform.rotation, rotacaoFinal, Time.deltaTime);
e o outro tbm do Quaternion da mensagem lá em cima tbm roda. Quando eu testo direto no Update, ele gira de boa, mas quando coloco em um método e uso posteriormente, ele não completa o giro. É alguma coisa no meu código que tá fazendo isso..
Coloquei meu código acima, eu não tô conseguindo localizar oq tá impedindo o giro.. Será que eh a for() do método jogo()?
WLCS22- MembroAvançado
- PONTOS : 1926
REPUTAÇÃO : 60
Respeito as regras :
Re: [RESOLVIDO] Unity - Giro do Personagem não está funcionando direito
Genteeeee!!! o "RotateTowards" no lugar do Lerp resolveu!!! É só aumentar a velocidade que funcionou perfeitamente. Com o Lerp, não sei pq, mas o valor do transform.rotation não era igual ao da Rotação Final quando o Lerp finalizava, daí eu não estava conseguindo trabalhar, pq nunca chegava na igualdade. Então coloquei o "RotateTowards" funcionou!! Fica aí pra quem se deparar com o mesmo problema!
WLCS22- MembroAvançado
- PONTOS : 1926
REPUTAÇÃO : 60
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Unity não está aceitando imagens
» [RESOLVIDO] Como fazer o canvas ficar atrás do personagem? Unity 2D
» [RESOLVIDO] Física personagem 2d Unity
» [RESOLVIDO] MEU UNITY NÃO ESTA ACEITANDO NENHUM TIPO DE ARQUIVO
» [RESOLVIDO][Dúvida] Campo de visão do Editor do Unity está baixo.
» [RESOLVIDO] Como fazer o canvas ficar atrás do personagem? Unity 2D
» [RESOLVIDO] Física personagem 2d Unity
» [RESOLVIDO] MEU UNITY NÃO ESTA ACEITANDO NENHUM TIPO DE ARQUIVO
» [RESOLVIDO][Dúvida] Campo de visão do Editor do Unity está baixo.
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos