• 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
Question by toddsby · May 11, 2022 at 12:45 PM · rigidbody2dcollision detectioncollider2ddamagecollision2d

Player not taking damage on collision with enemy

I'm having a strange issue where my player is not taking any damage when colliding with the enemy. I have Rigidbody 2D set to both of them and the appropriate tags set, but somehow my player is not taking any damage. I am at a loss, could the sprites im using cause this?

PlayerHealthController

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class PlayerHealthController : MonoBehaviour
 {
 
     public static PlayerHealthController instance;
 
     private void awake()
     {
         instance = this;
     }
 
     //[HideInInspector]
     public int currentHealth;
     public int maxHealth; 
 
 
 
     // Start is called before the first frame update
     void Start()
     {
         currentHealth = maxHealth;
     }
 
     // Update is called once per frame
     void Update()
     {
         
     }
 
 
     public void DamagePlayer(int damageAmount)
     {
         currentHealth -= damageAmount;
 
         if(currentHealth <= 0)
         {
             currentHealth = 0;
 
                 gameObject.SetActive(false);
         }
     }
 }

PlayerDamage

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class DamagePlayer : MonoBehaviour
 {
 
     public int damageAmount = 1;
 
     private void onCollisionEnter2D(Collision2D other)
     {
         if(other.collider.gameObject.tag == "Players")
         {
             DealDamage();
         }
     }
 
     private void onTriggerEnter2D(Collider2D other)
     {
         if(other.tag == "Players")
         {
             DealDamage();
         }
     }
 
     //health controller
     void DealDamage()
     {
         PlayerHealthController.instance.DamagePlayer(damageAmount); 
 
     }
 
 }



Comment

People who like this

0 Show 0
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

1 Reply

· Add your reply
  • Sort: 
avatar image

Answer by swanne · May 12, 2022 at 11:52 AM

Hey,
Sorry for starting to answer your question with a question but why are you using both CollisionEnter2D and TriggerEnter2D?
Are any of the collider components setup as triggers in the inspector?

I think it would work using only CollisionEnter2D

I recommend doing a Debug.Log process of elimination on contact points in your functions to find where the 'break in the wire' is.

For example, in your PlayerHealth Controller script, as the first line under the Damage Player function put a Debug.Log("PlayerHealth Controller, Damage Player function called and damage amount of " + damageAmount + " passed through");

This will confirm that the code in the PlayerDamage script is working enough to access the first script and pass data to it.

Similar thing in your PlayerDamage script
Before the IF statement add a line to confirm that the collision method is being called. Something like Debug.Log("CollisionEnter2D called");



It may seem a long process but I find it really useful to isolate the problem and understand where in the process I should be focusing on to fix.
Hope that helps

Comment

People who like this

0 Show 0 · 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

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

149 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 avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

multiple objects on oncollissionstay2d 1 Answer

How do I make collisions where both objects are moving but pass through each other? 0 Answers

[SOLVED] How to Destroy a rigidbody game object on collision with another gameobject? 4 Answers

How do I make Collider to get through another Collider? (w/o Trigger) 1 Answer

Can't detect colliders from Tiled 0 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