In Unity, I want to destroy my square when it collides with circle

Viewed 178

1 my square has a rigid body 2D and a box collider 2D. my circle has a box collider 2D. The game manager script is just a code to spawn them. my catcher script is just to move the circle left to right.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ArtDestroy : MonoBehaviour
{
  private void OnCollisionEnter(Collision collision)
  {
      if (collision.gameObject.CompareTag("Art"))
      {
        Destroy(collision.gameObject);
      }
  }
}
3 Answers

Physics and Physics2D are separate in Unity and don't interact with each other.

OnCollisionEnter2D(Collision2D collision2d) belongs to Physics2D and only responds to Physics2D (BoxCollider2D, CircleCollider2D, PolygonCollider2D, Rigidbody2D, etc.)

OnCollisionEnter(Collision collision) belongs to Physics and only responds to Physics (BoxCollider, SphereCollider, MeshCollider, Rigidbody, etc.)

You are using OnCollisionEnter(Collision collision) when you should be using OnCollisionEnter2D(Collision2D collision).

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ArtDestroy : MonoBehaviour
{
    // Use OnCollisionEnter2D for 2D!
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if(collision.gameObject.CompareTag("Art"))
        {
            Destroy(collision.gameObject);
        }
    }
}

for 2D projects you need to use MonoBehaviour.OnCollisionEnter2D(Collision2D).

Also, I'm not sure how you inserted this code, you can press ctrl + k and paste the snippet next time

Related