Moving cube on x by 1

Hello.

I am pretty sure this was solved somewhere but I failed to find it.

I would like to move a cube if someone presses “d” or “a” on x-axis by one.

public class Player : MonoBehaviour
{
    public Rigidbody Rb;
    public float sideFroce = 4000f;
    public Transform player;
    public Vector3 positionMovement;
    void FixedUpdate()
    {
        if (Input.GetKey("d"))
        {
        while (player.position.x < (player.position.x + positionMovement.x))
        {
            Rb.AddForce(sideFroce * Time.deltaTime, 0, 0);
        }
        }
        if (Input.GetKey("a"))
        {
            Rb.AddForce(-sideFroce * Time.deltaTime, 0, 0);
        }
}

}

  • Rb.AddForce(-sideFroce * Time.deltaTime, 0, 0); works normaly

I tried one solution I found, just to see what it does

 rb.AddForce(transform.forward * sideForce);

But still unity crashed after pressing “d”.
I also tried using GetKeyDown instead. Same result.

I am pretty sure I created infinite loop somehow, not sure how to fix it. positionMovement.x is set to 1. And unity has huge lad every time I press “d”. I know I could just ‘teleport’ player (cube) to the position I want but this would look more smooth.

Added later (edit):

my try with partially successful. I think I am getting closer to the solution.

if (Input.GetKeyDown("d"))
{
    test = player.position + positionMovement;
    Rb.AddForce(sideFroce * Time.deltaTime, 0, 0);
    if (test.x > player.position.x)
    {
    Rb.AddForce(0, 0, 0);
    }
}

Your while loop never ends.

 while (player.position.x < (player.position.x + positionMovement.x))
         {
             Rb.AddForce(sideFroce * Time.deltaTime, 0, 0);
         }

You add the force, but your position is staying the same because AddForce doesn’t actually update the position until the end of the FixedUpdate.