Move 2D object forward
I've been trying to make my object move forward in the direction it is facing. But I've been unable to do so.
I was trying to do it with MoveTowards(), and adding a gameobject in front of the boat to do it, but I can't make it work(Direction is the object in front of the boat, and it moves with the boat)
I'm using this code:
public class Player_Movement : MonoBehaviour {
//Floats
public float maxSpeed = 3;
public float speed = 50f;
public float turnSpeed = 30;
//Int
public int accelerationSpeed = 100;//How fast the ship will accelerate.
//References
private Vector3 eulerAngleVelocity;//Which way the vehicle will rotate.
private Rigidbody2D rb2d;
public Rigidbody2D dir;
// Use this for initialization
void Start () {
rb2d = gameObject.GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update () {
if (Input.GetKey(KeyCode.D)) {
transform.Rotate(0, 0, -1);
}
if (Input.GetKey(KeyCode.A)) {
transform.Rotate(0, 0, 1);
}
if (Input.GetKey(KeyCode.W)) {
rb2d.AddForce(Vector2.MoveTowards(rb2d.position, dir.position, 1));//This moves the car forward by adding the force of the acceleration speed to the car.
}
else if (Input.GetKey(KeyCode.S)) {
rb2d.AddForce(Vector2.MoveTowards(rb2d.position, dir.position, -1));//This moves the car forward by adding the force of the acceleration speed to the car.
}
}
}
Please let me know how to make this work or if there is a simpler way of doing it
Answer by danterf4 · Jun 08, 2018 at 05:31 AM
Turns out the solution was really simple, I just needed to use transform.up to make the object move forward with AddForce
//Floats
public float velocity = 3f;//The bigger this number is, the faster the boat will move
public float projectileVelocity = 3;
//Int
//References
private Rigidbody2D rb2d;
//Lists
private List<GameObject> Projectiles = new List<GameObject>();
// Use this for initialization
void Start () {
rb2d = gameObject.GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update () {
//Moves the player forward
rb2d.AddForce(transform.up * -velocity);
//Rotates the player
if (Input.GetKey(KeyCode.D)) {
transform.Rotate(0, 0, -1);
}
else if (Input.GetKey(KeyCode.A)) {
transform.Rotate(0, 0, 1);
}
}
Your answer
Follow this Question
Related Questions
How to allow clicks to go through Circle Collider 2D on sprite prefab? 0 Answers
Adding small acceleration to 2d top down movement game? 0 Answers
Unity 2D Lighting From Universal Render Pipeline Not Working 1 Answer
How do I create a 2D movement script that will cause prefabs to drift around the screen? 0 Answers
Unexpected symbol '=' parser error and Unexpected symbol '(' error 1 Answer