Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 11 Next capture
2021 2022 2023
1 capture
11 Jun 22 - 11 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Michael.Doroch · Jul 23, 2015 at 12:17 PM · c#rigidbodyinstantiateaddforce

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

Comment
Add comment · Show 2
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Cherno · Jul 23, 2015 at 02:30 PM 0
Share

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.

avatar image Michael.Doroch · Jul 24, 2015 at 07:43 AM 0
Share

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?

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by BiG · Jul 23, 2015 at 12:17 PM

As a starting point, make sure that your bullets have a non-kinematic rigidbody.

Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Michael.Doroch · Jul 24, 2015 at 07:43 AM 0
Share

The "Is kinematic" box in the projectile prefab is unchecked.

avatar image
0

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);
     }
Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Michael.Doroch · Jul 24, 2015 at 07:52 AM 0
Share

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

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

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


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges