[RESOLVIDO] Problemas no sistema rotação de um kinematic rigidbody usando MoveRotation
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Problemas no sistema rotação de um kinematic rigidbody usando MoveRotation
Boa tarde pessoal, nos últimos dias tenho me dedicado a um protótipo do meu jogo de futebol. Por enquanto, estou desenvolvendo a movimentação básica e o sistema de condução de bola. Quanto a movimentação, tudo está aparentemente bem, consegui implementar o sistema utilizando o rigidbody.MovePosition() sem maiores problemas. Porém venho enfrentando dificuldades quanto a rotação do jogador controlado, não consegui desenvolver um jeito de integrar o sistema de input com o rigidbody.MoveRotation() de forma a fazer com que o jogador controlado fique virado para a direção correta pressionada no teclado/controle. A rotação está bem inconsistente, mas para a maioria das direções, o jogador fica apenas girando em torno de si mesmo, como se fosse um peão(lol). Não consegui encontrar uma forma de controlar a rotação do jogador controlado, para fazê-la parar no ângulo apontado. Está é a classe aonde aplico a rotação:
Já tentei observar os ângulos com Debug.Log e inserir alguns ifs para tentar controlar a rotação, mas não consegui bons resultados. Alguém aí têm alguma sugestão?
- Código:
void FootballerRotation()
{
inputVector = inputController.movementInput;
float angle = Mathf.Atan2(inputVector.y, -inputVector.x) * Mathf.Rad2Deg;
rotationVector.Set(0, angle, 0);
if ((int)rotationVector.y != (int)rigidbody.rotation.eulerAngles.y)
{
Quaternion deltaRotation = Quaternion.Euler(rotationVector);
rigidbody.MoveRotation(rigidbody.rotation * deltaRotation);
}
}
Já tentei observar os ângulos com Debug.Log e inserir alguns ifs para tentar controlar a rotação, mas não consegui bons resultados. Alguém aí têm alguma sugestão?
Re: [RESOLVIDO] Problemas no sistema rotação de um kinematic rigidbody usando MoveRotation
Bump, continuo precisando de ajuda, sem isso não consigo prosseguir com o sistema de condução de bola..
Re: [RESOLVIDO] Problemas no sistema rotação de um kinematic rigidbody usando MoveRotation
Primeiro você normaliza o input (controle/ teclado);
Depois calcula a rotação do input em relação à câmera;
Passa o valor da rotação pra um Quaternion via Quaternion.Euler;
Usa o Quaternion.Slerp para suavizar a rotação entre o valor atual e a rotação do input;
Depois atribua a rotação ao RigidBody usando o MoveRotation;
Depois calcula a rotação do input em relação à câmera;
Passa o valor da rotação pra um Quaternion via Quaternion.Euler;
Usa o Quaternion.Slerp para suavizar a rotação entre o valor atual e a rotação do input;
Depois atribua a rotação ao RigidBody usando o MoveRotation;
- Código:
using UnityEngine;
public class RotacaoJogador : MonoBehaviour
{
public Transform cam;
private Rigidbody rb;
private void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
Vector2 direcaoControle = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")).normalized;
float anguloRotacao = Mathf.Atan2(direcaoControle.x, direcaoControle.y) * Mathf.Rad2Deg + cam.eulerAngles.y;
Quaternion rotacao = Quaternion.Euler(0, anguloRotacao, 0);
Quaternion rotacaoFinal = Quaternion.Slerp(transform.rotation, rotacao, 50 * Time.deltaTime);
rb.MoveRotation(rotacaoFinal);
}
}
Fagner- Moderador
- PONTOS : 4443
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: [RESOLVIDO] Problemas no sistema rotação de um kinematic rigidbody usando MoveRotation
Fagner escreveu:Primeiro você normaliza o input (controle/ teclado);
Depois calcula a rotação do input em relação à câmera;
Passa o valor da rotação pra um Quaternion via Quaternion.Euler;
Usa o Quaternion.Slerp para suavizar a rotação entre o valor atual e a rotação do input;
Depois atribua a rotação ao RigidBody usando o MoveRotation;
.....
Muito obrigado, aparentemente funcionou bem para o que eu preciso tanto no teclado quanto no controle.
Re: [RESOLVIDO] Problemas no sistema rotação de um kinematic rigidbody usando MoveRotation
Um pequeno adendo, para que os graus de giro sigam um padrão fixo de giro (no meu caso de 5 em 5 graus), basta trocar o cálculo no qual a rotação é calculada por isso:
Mais um cortesia do @Fagner, ele foi quem me disse a fórmula, estou só colocando aqui caso alguém precise que a rotação seja mais exata...
- Código:
Quaternion rotation = Quaternion.Euler(0, Mathf.CeilToInt(rotationAngle/5)*5, 0);
Mais um cortesia do @Fagner, ele foi quem me disse a fórmula, estou só colocando aqui caso alguém precise que a rotação seja mais exata...
Tópicos semelhantes
» [RESOLVIDO] problemas com rigidbody
» Alguem pode me ajudar com rotação "rigidbody" mouse X e Y e rotação em Z com as teclas Q . E tudo ajustavel!! em C#
» problema com Movimento usando o Rigidbody
» problema com Movimento usando Rigidbody
» [DUVIDA] Rotação e translado com rigidbody em Unity 5
» Alguem pode me ajudar com rotação "rigidbody" mouse X e Y e rotação em Z com as teclas Q . E tudo ajustavel!! em C#
» problema com Movimento usando o Rigidbody
» problema com Movimento usando Rigidbody
» [DUVIDA] Rotação e translado com rigidbody em Unity 5
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos