- Home /
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);
}
}
using debug console I found out I was just stupid and it does not work. Help ;_;
do you want the cube to move only once when player presses a or d?
Answer by Zaeran · Jan 20, 2018 at 10:02 AM
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.
I suspected as much. Still no idea how to fix it.
Your answer
Follow this Question
Related Questions
Smooth Movement with set distance 1 Answer
Movement Code not working 2 Answers
counting score after destroying game object 1 Answer
Smooth movement between two exact locations 0 Answers
Multiple Cars not working 1 Answer