According to the Ray Wenderlich Unity 2D tutorial by Christopher LaPollo, Unity’s physics engine builds a simulation based on the Colliders present in a scene. If some those
Colliders are declared to be
static, then the entire simulation is rebuilt when those colliders move. Of course, rebuilding a physics simulation when it’s unnecessary is inefficient. By declaring objects to have
Colliders, the physics engine does not have to rebuild the simulation at runtime, that is to say when the game is running.
As with a lot of things in Unity, it is not immediately apparent how you should go about declaring a collider to be
dynamic. It would be great if there were just a checkbox in the
Collider component. But there isn’t. It appears that there are some complex things going on under the hood that preclude a simple declaration.
By default a
GameObject with a
Collider component attached is treated as
static by Unity’s physics engine. This would work for a non-moving wall or impassable bit of scenery, but for moving objects like enemies we need to mark them as
dynamic. In order for a
Collider to qualify as
dynamic it requires a
Rigidbody component. If you don’t want the normal features of the
Rigidbody, i.e. conferring control of the
GameObject’s position to the physics system, then you can check the
Is Kinematic checkbox. A kinematic object’s position is under the control of the attached scripts, rather than the physics system.
One other trick from the tutorial is to set the
isTrigger property to
true. This prevents the
Collider from being treated as a solid object in the physics simulation, which could lead to unintended bumping and pushing among various
Colliders in a scene.
Update: @InvolvingSalmon points out that the instructions here depend on the version of Unity that you are using. This article was written for Unity version