#Filtering collision.Contacts

1 messages · Page 1 of 1 (latest)

left reef
#

Hello, I am re-writing my collision handling from the ground up. I am running into an issue where my character approaches and contacts a platform from the side and hanging on that surface instead of sliding down.

Maybe I am not approaching this correctly, but my idea is:

void OnCollisionEnter2D(Collision2D collision) => HandleCollisions(collision, CollisionType.Enter); // Line 83
    void OnCollisionStay2D(Collision2D collision) => HandleCollisions(collision, CollisionType.Stay);
    void OnCollisionExit2D(Collision2D collision) => HandleCollisions(collision, CollisionType.Exit);
    void HandleCollisions(Collision2D collision, CollisionType collisionType)
    {
        Collider2D collider = collision.collider;

        // collision.contacts = the same list without normal == Vector2.up 
 
        if (collisionType == CollisionType.Exit && collision.GetContacts(collision.contacts) == 0)
        {
            Airbourne(false);
        }

        foreach (ContactPoint2D contact in collision.contacts)
        {
            if (contact.normal != Vector2.up)
            {
                contact.collider.sharedMaterial.friction = 0;
            }
            else
            {
                contact.collider.sharedMaterial.friction = 0.4f; // Line 105
            }
        }

    }
onyx marten
#

What's the actual question here?

left reef
#

hey sorry. The issue I am running into is this:

NullReferenceException: Object reference not set to an instance of an object
Succubus.HandleCollisions (UnityEngine.Collision2D collision, DMBTools.CollisionType collisionType) (at Assets/Scripts/Succubus/Succubus.cs:105)
Succubus.OnCollisionEnter2D (UnityEngine.Collision2D collision) (at Assets/Scripts/Succubus/Succubus.cs:83)

I seem to be running into this because not all contacts have the sharedMaterial.

onyx marten
#

which line is line 83

#

of Succubus.cs

left reef
#

Line 83

void OnCollisionEnter2D(Collision2D collision) => HandleCollisions(collision, CollisionType.Enter);

Line 105

contact.collider.sharedMaterial.friction = 0.4f;
onyx marten
left reef
#

I assigned it here

#

Thought I saw the problem, false alarm. No idea

onyx marten
#

not on the Collider2D

#

your code is doing contact.collider.sharedMaterial

left reef
#

aaah, I see. I need to access the Rigidbody's material, not the collider's.

#

They are connected by the attached body, not the material