Root Motion 'due to floating-point precision limitations error.. ' and object teleported ?
first time here, and getting crazy with this error.
currently i creating a prototype for my game, it's hack and slash game and i'm using walk, run with root motion system, and it's only forward so if player want to turn left right or backward i just rotate the object because root motion handle the gameobject position, it's working fine until i found bug where i randomly press "WASD" fast, to make sure that it's working, it's working but my character is teleporting far away and got
" Due floating-point precision limitations , it is recommended to bring the world coordinates of the GameObject within a smaller range".
trying to debug it , and i thought the problem is root motion system itself ? because when i turn on my root motion on animator controller the problem appear.
here's my code to rotate and play the animation
public class PlayerMovement : MonoBehaviour {
public float
characterRotationSpeed,
verticalAxis,
horizontalAxis;
Animator anim;
void Start () {
anim = GetComponent<Animator>();
}
void Update ()
{
Quaternion gRot = gameObject.transform.rotation;
verticalAxis = Input.GetAxis("Vertical");
horizontalAxis = Input.GetAxis("Horizontal");
CharacterDirection(gameObject, gRot);
Move();
Run();
}
void CharacterDirection(GameObject gameobject, Quaternion gRot)
{
if(Mathf.RoundToInt(verticalAxis) != 0 || Mathf.RoundToInt(horizontalAxis) != 0)
gameobject.transform.rotation = Rotating(gRot);
}
void Move()
{
if(verticalAxis > 0f || verticalAxis < 0f)
{
anim.SetFloat("Forward",Mathf.Abs(verticalAxis));
}
else if(horizontalAxis > 0f || horizontalAxis < 0f)
{
anim.SetFloat("Forward",Mathf.Abs(horizontalAxis));
}
}
void Run()
{
if(Input.GetKeyDown(KeyCode.LeftShift))
{
anim.SetBool("Run",true);
}
else if(Input.GetKeyUp(KeyCode.LeftShift))
{
anim.SetBool("Run",false);
}
}
Quaternion Rotating(Quaternion gRot)
{
float vAxisInt = Mathf.RoundToInt(verticalAxis);
float hAxisInt = Mathf.RoundToInt(horizontalAxis);
float atan = (Mathf.Atan2(hAxisInt,vAxisInt)) * (180/Mathf.PI);
Quaternion euler = Quaternion.Euler(0f,atan,0f);
return Quaternion.Slerp(gRot, euler, Time.deltaTime * characterRotationSpeed);
}
}
Thank you!
sorry for my english
Your answer
Follow this Question
Related Questions
Animator: multiple characters and one script 0 Answers
Aim down sights not working with animations 0 Answers
Get current animation from animator and pausing it 0 Answers
It is possible to create AnimationClip ingame whose do not loop / reset position? 0 Answers
NavmeshAgent doesnt update position with the Root animation 0 Answers