Quick answer: Add a Rigidbody (Kinematic if you don’t want gravity) to at least one collider in the pair. Static-vs-static doesn’t emit events. Trigger pairs also need a Rigidbody.

Two pre-placed colliders touch — OnCollisionEnter never fires. PhysX considers them both static and skips event dispatch.

The Symptom

Collision script attached, both objects have colliders, they visibly overlap, no callback. Adding a Rigidbody fixes it.

The Fix

// Wall (no Rigidbody)
- BoxCollider

// Door (needs callback)
- BoxCollider
- Rigidbody (isKinematic = true, useGravity = false)

Door now counts as Kinematic Rigidbody for physics. Touching the wall fires OnCollisionEnter on door’s scripts.

Trigger Variant

// Pickup zone
- BoxCollider (isTrigger = true)
- Rigidbody (isKinematic = true)

// Player
- CharacterController OR Rigidbody + Collider

Trigger needs a Rigidbody on at least one side. CharacterController internally uses physics so it counts as the moving party.

Verifying

Print on OnCollisionEnter / OnTriggerEnter. With Rigidbody added: fires. Without: silent.

“Rigidbody on one side. Kinematic if no gravity. Callbacks fire.”

Related Issues

For OnTriggerExit on disable, see trigger exit. For Rigidbody sleep, see sleep waking.

Add a body. Events fire.