OnCollisionEnter() werkt niet in Unity3D

Ik heb een object met een mesh-collider en een prefab met sphere-collider. Ik wil dat het exemplaar van de prefab wordt vernietigd als de twee botsen.

Ik heb het volgende in een script geschreven:

private void OnCollisionEnter(Collision c)
{
    if (c == target)
        Destroy(transform.gameObject);
    print("something");                   // Doesn't get printed
}

Maar het werkt niet. Ik heb geprobeerd om isTriggerin te schakelen voor beide objecten.


Antwoord 1, autoriteit 100%

Ik had hetzelfde probleem dat OnCollisionEnterniet werd aangeroepen en vond deze vraag.

Voor mij was het probleem dat ik een 2D-game aan het maken was, dus het antwoord is om in plaats daarvan de functie OnCollisionEnter2Dte gebruiken.


Antwoord 2, autoriteit 76%

Bekijk deze tabel

Als je wilt dat je OnCollisionEnterwordt aangeroepen, zorg dan dat:

(a) Aan beide objecten is een versneller bevestigd.

(b) Geen van de objecten is een trigger-collider (dit geeft de OnTrigger-functie en niet OnCollisionEnter)

(c) Een van de objecten (maakt niet uit welke) is een star, niet-kinematisch & niet-statisch object (de tweede hoeft geen star lichaam te zijn).

(d) Vanwege rekenproblemen kan MeshCollider het moeilijk hebben om in botsing te komen met andere mesh-collider, wees voorzichtig.

(e) Zorg ervoor dat beide objecten zich in dezelfde laag bevinden (of in ieder geval dat ze botsen in scène-instellingen).

(f) Als u in 2d werkt – OnCollisionEnter2Dwordt aangeroepen, hernoem dan uw functie.


Antwoord 3, autoriteit 18%

Zorg ervoor dat een van hen een niet-kinematisch star lichaam heeft. Genomen uit de Unity-documenten:

Als er een botsing plaatsvindt tussen twee Colliders en als er aan ten minste één van hen een Rigidbody is bevestigd, worden drie botsingsberichten verzonden naar de objecten die eraan zijn bevestigd. Deze gebeurtenissen kunnen in scripting worden afgehandeld en stellen u in staat om uniek gedrag te creëren, met of zonder gebruik te maken van de ingebouwde NVIDIA PhysX-engine.

Vanaf hier: Unity3D MeshCollider


Antwoord 4, autoriteit 6%

Heb je geprobeerd de methode OnTriggerEnter() te gebruiken en een collider op het object in te stellen op een trigger?

Als het niet hoeft te vertellen met welk object het botst, kun je een simpele doen

void OnTriggerEnter(){
    Destroy(transform.gameObject);
}

Bewerken:

Ik heb OnCollision ook zo gedaan

private string hitobject;
void OnCollisionEnter(UnityEngine.Collision hit)
{
    hitobject = hit.gameObject.tag;
    if(hitobject == "Plane")
    {
        isgrounded = true;
    }
}

Geen van de objecten zijn triggers en ze hebben geen starre lichamen nodig om te werken.


Antwoord 5, autoriteit 3%

Ik had een soortgelijk probleem. De box-collider was niet zo groot als het aanvaringsobject. Het instellen van de x- en z-waarden op 2 eenheden loste het probleem op!

Other episodes