• 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 DJimster · Nov 06, 2020 at 10:50 AM · collision detectioncollision2ddestroygameobject

Ensure a bullet only hits one enemy

Hello, I am making a 2D top down shooter game, and I am encountering a problem where a bullet would hit and deal damage to two or more enemies if it collides with both, even though it is supposed to only hit one enemy and destroy itself.

Here is the code for the bullet:

 public class BulletMovement2 : MonoBehaviour
 {
     private float moveSpeed = 100f;
     public float DestroyDelay = 0.05f;
     private EnemyHealthManager enemyHealth;
 
     // Update is called once per frame
     void Update()
     {
         transform.Translate(Vector2.right * moveSpeed * Time.deltaTime);
         DestroyDelay -= Time.deltaTime;
         if (DestroyDelay <= 0)
         {
             if (gameObject != null)
             {
                 Destroy(this.gameObject);
             }
             
         }
 
     }
 
     private void OnTriggerEnter2D(Collider2D collision)
     {
         if (gameObject != null && !collision.gameObject.CompareTag("Player")&& !collision.gameObject.CompareTag("Bullet"))
         {
             if (collision.gameObject.CompareTag("Enemy"))
             {
                 enemyHealth = collision.gameObject.GetComponent<EnemyHealthManager>();
                 enemyHealth.reduceCurrentHealth(1);
             }
             Debug.Log("Collided with " + collision.gameObject.name);
             Destroy(gameObject);
             
         }
     }
 }


Comment
Add comment · Show 1
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 Hellium · Nov 06, 2020 at 11:23 AM 0
Share

You are moving the object in Update using transform.Translate. Thus, you are messing up with the physics engine.

You should be moving the object in FixedUpdate using the Rigidbody component.

This should limit the problem.

You can also add a flag (bool) you turn to true in OnTriggerEnter2D and check against this value to ensure you've inflicted damage only once.

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by HitarthPadaliya · Nov 06, 2020 at 12:03 PM

You can destroy the bullet gameobject right after you reduce enemy's health. Just add this line after line 30 :-

  Destroy (gameObject);

Another option : you can add a bool "enemyHit" and check if it is false, right before you do everything and then after line 30, you can set it true.

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 DJimster · Nov 06, 2020 at 01:56 PM 0
Share

First option doesn't work. It's pretty much the same as what I already have.

Second option with using a boolean worked.

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

143 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

OnCollisionEnter2D doesn't work every time. 1 Answer

Prevent explosion through walls 0 Answers

How to detect particle collision (ontriggerstay2D )without actually colliding ! 2 Answers

OnCollisionEnter2D is not working when an object tagged "Enemy" is not present in the game. 0 Answers

Sprite ignoring collison 1 Answer


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