- Home /
Problem with 2D movment system C#. Keeps moving when no command is given
Hi Im trying to make a 2D space sandbox game. But im stuck on the movment of my object. I wanted a movment which accelerate when you press a button and deaccelerate when you not pressing the button and keep keep deaccelerating until it stand still. After many tries and errors I managed to do it but when i realease the button the object deaccelerate but slowly starts to drift. It only drift towards right and up (and anywhere in between ). Could you help me stop it from drifting and just stand still.
P.S Im new to c# and unity.
Heres my code
public class TestingMovesKeys : MonoBehaviour
{
float ShipCurrentSpeed = 0f;
public float ShipTopSpeed = 40f;
float ShipCurrentSpeedX = 0f;
public float RevShipTopSpeed = -40f;
public float ShipAcceleration = 1f;
public float ShipDeacceleration = 0.5f;
void Update()
{
if (Input.GetButton("W") == false)
{
if (ShipCurrentSpeed > 0)
{
ShipCurrentSpeed -= ShipDeacceleration;
}
}
else if (Input.GetButton("W") && (ShipCurrentSpeed < ShipTopSpeed))
{
ShipCurrentSpeed += ShipAcceleration;
}
if (Input.GetButton("S") == false)
{
if (ShipCurrentSpeed < 0)
{
ShipCurrentSpeed += ShipDeacceleration;
}
}
else if (Input.GetButton("S") && (ShipCurrentSpeed > RevShipTopSpeed))
{
ShipCurrentSpeed -= ShipAcceleration;
}
// X-Vektorer
if (Input.GetButton("Horizontal") == false)
{
if (ShipCurrentSpeedX > 0)
{
ShipCurrentSpeedX -= ShipDeacceleration;
}
}
else if (Input.GetButton("Horizontal") && (ShipCurrentSpeedX < ShipTopSpeed))
{
ShipCurrentSpeedX += ShipAcceleration;
}
if (Input.GetButton("Horizontal2") == false)
{
if (ShipCurrentSpeedX < 0)
{
ShipCurrentSpeedX += ShipDeacceleration;
}
}
else if (Input.GetButton("Horizontal2") && (ShipCurrentSpeedX > RevShipTopSpeed))
{
ShipCurrentSpeedX -= ShipAcceleration;
}
// X-Vektorer
if (ShipCurrentSpeedX >= 0)
{
transform.Translate(Vector3.right * Time.deltaTime * ShipCurrentSpeedX);
}
if (ShipCurrentSpeedX <= 0)
{
transform.Translate(Vector3.right * Time.deltaTime * ShipCurrentSpeedX);
}
// Y-Vektorer
if (ShipCurrentSpeed >= 0)
{
transform.Translate(Vector3.up * Time.deltaTime * ShipCurrentSpeed);
}
if (ShipCurrentSpeed <= 0)
{
transform.Translate(Vector3.up * Time.deltaTime * ShipCurrentSpeed);
}
}
}
Your answer
Follow this Question
Related Questions
Rigidbody2D.AddRelativeForce not working 1 Answer
Jumping isn't smooth while going up 1 Answer
How do I move a character WITHOUT acceleration/deceleration? 1 Answer
How to push an object in 2D grid style 0 Answers
Problem with 2D movement. My character is moving by himself between two points... :) 1 Answer