- Home /
Velocity Randomly resets to (0, 0)
I made a movement system for the player which works on velocity. when playtesting, I noticed sometimes the player "collides with a ghost block". I added so whenever the player collided with an object It will print a message, and it wasn't printed when I came in contact with the so-called "ghost block"
I used the debug mode to check if the player moves properly, and it showed that when a key (WASD) was pressed it increased the velocity accordingly. but the next frame the velocity went to exactly (0, 0).
any ideas why the velocity of the player's rigid body resets sometimes on a next frame?
code:
(isRegular is a boolean I use to determine the player's movement mode. It can move or by half-tiles, or smoothly. if isRegular is false, the Move method would be called from fixed Update rather from Update)
private void Move(bool isRegular, Vector3 direction, KeyCode kc)
{
if(isRegular)
{
if (Input.GetKeyDown(kc))
{
transform.Translate(direction * mashFactor);
mysCanvas.PressEvent();
return;
}
}
else
{
if(Input.GetKeyDown(kc))
{
mysCanvas.PressEvent();
}
if(Input.GetKey(kc))
{
bool hasReachedMaxV = false;
if(Mathf.Abs(rb.velocity.x) > 10)
{
hasReachedMaxV = true;
var operatorr = rb.velocity.x / Mathf.Abs(rb.velocity.x);
rb.velocity = new Vector2(10 * operatorr, rb.velocity.y);
}
if(Mathf.Abs(rb.velocity.y) > 10)
{
hasReachedMaxV = true;
var operatorr = rb.velocity.y / Mathf.Abs(rb.velocity.y);
rb.velocity = new Vector2(rb.velocity.x, 10 * operatorr);
}
if(hasReachedMaxV)
{
return;
}
rb.velocity += new Vector2(direction.x, direction.y);
}
}
}