When dealing with Rigidbody 2D, there are three key body types which determines how a game object move and react to collision. This post is the complete guide on how and when to use them
Static
- No REAL Rigidbody component attached to them, so physics engine does not consider them to be moving
- No collision can be applied to them, so
OnTrigger
andOnCollision
will not work. - Use case: ground, walls, other any other game object you don't want the character collide with
Kinematic
- Kinematic game objects are entirely driven by scripts, so you have to manually handle the the motion part:
MovePosition
,MoveRotation
- Kinematic game objects only process collisions with Dynamic game objects, i.e. bouncing away, and cause
OnCollisionEnter
event to be sent - Use case: you want the character move with more flexibility
Dynamic
- Dynamic game objects are entirely driven by game engine (physical engine)
- The motion of Dynamic game objects are affected by force, velocity and etc
- The physics engine takes responsibility for resolving their collisions with static, kinematic, and other dynamic objects and rebounding them as needed
- Use case: game characters, moving game objects, etc
Physical Layer Collision Matrix Setting
This is especially useful when you want to customize the physical in your game. Say for example, if you have a game object A, with a dynamic rigidbody on layer Room, and you don't want it collide with other game objects if they are on layer Door, so you set up like this:
Edit -> Project Settings -> Physics 2D:
In the end, the collision between layer Room and layer Door will be ignored.