- Home /
Projectile not moving properly in top down 2d shooter
I am working on this 2d top down shooter and cannot get the shooting mechanics to work. The bullets spawn in the correct rotation and position but they do not move at all. nothing. I would very much appreciate it if someone could tell me what I am doing wrong.
if (Input.GetButtonDown ("Fire1")) {
if (currentWeapon == 1 & pistolAmmo >= 1){
GameObject Bullet = (GameObject)Instantiate(Projectile, playerSprite.transform.position, player.transform.rotation);
Bullet.GetComponent<Rigidbody>().AddForce(player.transform.forward * bulletSpeed * Time.deltaTime);
}
I can post the rest of the code if it will help. Thank you in advance.
P.S Sorry for bad English
If it's indeed a 2D game, then be aware that transform.forward is Z-axis-positive, which means that the bullet would go towards the background, away from the camera. For a 2D top-down game, transform.up is what you want to use ins$$anonymous$$d as the direction vector, which is Y-axis positive.
I started the project as sort of a 3d game so I set up everything with "up"(the green arrow) facing up and down. Would it be worth changing the movement to work in the normal 2d way?
Answer by BiG · Jul 23, 2015 at 12:17 PM
As a starting point, make sure that your bullets have a non-kinematic rigidbody.
The "Is kinematic" box in the projectile prefab is unchecked.
Answer by capnjake · Jul 23, 2015 at 01:33 PM
The line
GameObject Bullet = (GameObject)Instantiate(Projectile, playerSprite.transform.position, player.transform.rotation);
should be
Rigidbody Bullet = Instantiate(Projectile, playerSprite.transform.position, player.transform.rotation) as Rigidbody;
Spawn the object as a Rigidbody and then apply force that way.
if (Input.GetButtonDown ("Fire1")) {
if (currentWeapon == 1 & pistolAmmo >= 1){
Rigidbody Bullet = Instantiate(Projectile, playerSprite.transform.position, player.transform.rotation) as Rigidbody;
Bullet.GetComponent<Rigidbody>().AddForce(player.transform.forward * bulletSpeed * Time.deltaTime);
}
Now every time I try and shoot in game I get an error "Object reference not set to an instance of an object" on the Addforce line. The game still runs but the bullets still do not move.
When I mouse over it it says "Rigidbody Bullet"(referring to the previous line). Is this meant to happen or am I supposed to add a public Rigidbody in my declarations?
Your answer
Follow this Question
Related Questions
Instantiate rigidbody C# 1 Answer
how get bow to add more force over time 0 Answers
Ridgidbody cube 1 Answer
Consistent AddForce distance/direction 2 Answers
one gameobject instantiaton not 100 3 Answers