Domanda

I have an object with circle collider 2d, and an object with box collider 2d. how do i detect when the circlecollider hits the top edge of the box collider. assuming none objects have any rotation. i want to do this in code C#

È stato utile?

Soluzione

OnCollisionEnter triggers when something collides with the object containing this script, used like this:

void OnCollisionEnter(Collider collider)
{
    foreach(CollisionPoint contact in collider.contacts)
    {
        //Do something
    }
}

The above will give you a list of contact points for the collision, via which you should be able to determine where the collision occurred. An alternative method if you only need to detect collisions at a specified location, you could place an invisible child object within your cube, with a collider at the spot you want.

Edit:

Since you mentioned raycasts, there's 2 ways I can think of that these could be implemented. The first is to fire it upwards from the cube, but this has the issue of the ray firing from just 1 point, meaning some collisions might be missed (depending on the size of the cube & sphere).

The second method that pops to mind is to fire the ray parallel to the cube. This might sound a bit unorthodox, and I haven't tested it, but in theory it should work. Stick it in your cube:

void Update
{
    Vector3 start = this.transform.position;
    Vector3 end= this.transform.position;

    //This attempts to place the start & end point just above the cube
    //This of course assumes the cube isn't rolling around. If that's the case
    //then these calculations get quite a bit more complicated
    //Additionally the 0.01 might need adjusting if it's too high up off the cube
    start.y += this.renderer.bounds.y/2 + 0.01f;
    end.y += this.renderer.bounds.y/2 + 0.01f;

    start.x -= this.renderer.bounds.x/2;
    end.x += this.renderer.bounds.x/2;

    Ray ray = new Ray(start, end);
    RaycastHit hit;

    if(Physics.Raycast(ray, out hit, start.x-end.x) && hit.name == "mySphere")
    {
        //Theoretically, the sphere hit the top of the box!
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top