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);
}
}