Search code examples
c#unity-game-enginetouch

How to find which collider with same tag is touching my character firstly when multiple colliders are touching my character same time


I'm trying to figure out which collider with same tag is touching my character firstly when multiple colliders are touching my character same time.

if (col.transform.gameObject.tag == "enemy") {
            hit = true;
            rgd.AddForce(new Vector2(0, 2.150f), ForceMode2D.Impulse);
            if (transform.position.x-col.transform.gameObject.transform.position.x < 0)
            {
                rgd.AddForce(-1*rgd.transform.right * 40);
            }
            else
            {
                rgd.AddForce(1*rgd.transform.right * 40);
            }

            if (Mathf.Approximately (angle, 0)) {
                Destroy (col.transform.gameObject);
                damage = 0;
            } else {
                damage = 25;
            }
            enemydamageSound.Play();
        }

Solution

  • I solved it by adding a few code.Here is my new code:

    private int jumpCount = 0;
    
    if (col.transform.gameObject.tag == "ground")
            {
                isGround = true;
                jumpped = true;
                jumpCount = 0;
            }
    
    if (col.transform.gameObject.tag == "enemy")
        {
            hit = true;
            if (!isGround && jumpCount == 0)
            {
                rgd.AddForce(new Vector2(0, 2.150f), ForceMode2D.Impulse);
                jumpCount++;
            }
            if (transform.position.x - col.transform.gameObject.transform.position.x < 0)
            {
                if (jumpCount == 0)
                {
                    rgd.AddForce(new Vector2(0, 2f), ForceMode2D.Impulse);
                }
                rgd.AddForce(-1 * rgd.transform.right * 40);
            }
            else
            {
                if (jumpCount == 0)
                {
                    rgd.AddForce(new Vector2(0, 2f), ForceMode2D.Impulse);
                }
                rgd.AddForce(1 * rgd.transform.right * 40);
            }
    
            if (Mathf.Approximately(angle, 0))
            {
                Destroy(col.transform.gameObject);
                damage = 0;
            }
            else
            {
                damage = 25;
            }
            enemydamageSound.Play();
        }