Confusion with "Use Full Kinematic Contacts"

I’m having trouble getting a collision between two of my gameobjects: my player and a boundary. They both have Collider2Ds and Rigidbody2Ds attached. The player’s rigidbody type is set to Kinematic and the boundary’s is set to Static. From the docs, I understand that this normally wouldn’t detect a collision, but on the player’s rigidbody I have “Use Full Kinematic Contacts” selected which should allow it to collide with other Kinematic and Static rigibodies according to its tooltip in the inspector. However, this is not happening and I don’t know where I’m going wrong.

Here is how I have my scene set up:

So the collider for the player is offset from the center of the gameobject itself. To rotate the player I use the script below:

And lastly, here are the inspectors for both the player and the boundary:

Hopefully, I’ve explained this all properly. Any help on this would be awesome. Thanks!

Full Kinematic Contacts means it produces contacts when contacting other Kinematic or Static stuff. It doesn’t mean it will stop/bounce etc … that would be a Dynamic body.

It means you’ll get contacts reported i.e. OnCollisionXXX2D, OnTriggerXXX2D etc. You can also use GetContacts to retrieve the contacts.

With the option off, you won’t get callbacks and no contacts will be returned via GetContacts.

Kinematic bodies do not respond to forces you apply nor forces applied internally i.e. Gravity, collisions etc. If they did, it’d be a Dynamic body.

In short, it will detect and report but there is no collision response as should be expected from a Kinematic body.

15 Likes

Ah, that clarifies everything. Thank you!