OnCollisionEnter()が呼ばれない場合は、いくつかの可能性が考えられます。
1.Is TriggerがONになっていて、OnTriggerEnter()の方が呼ばれている
ColliderのIs TriggerのフラグがONになっている場合は、OnCollisionEnter()ではなくOnTriggerEnter()が呼ばれてしまいます。
OnCollisionEnter()を使う場合はIs TriggerのフラグがOFFにしてみてください。

2.OnCollisionEnter()の引数の型が誤っている
OnCollisionEnter()とOnTriggerEnter()は引数の型が違います。
引数の型が間違えていないか確認してみてください。
void OnCollisionEnter( Collision i_collision )
{
Debug.Log( "Hit Collision!" );
}
void OnTriggerEnter( Collider i_other )
{
Debug.Log( "Trigger Collision!" );
}
3.RigidBodyが当てる側のGameObjectについていない
当たり判定を行うには当てる側のGameObjectにRigidBodyコンポーネントがついている必要があります。
OnCollisionEnter()とOnTriggerEnter()は当たり判定が行われれば、呼び出されるため、
当てられる側にRigidBodyコンポーネントがなくても呼び出されます。
4.当てる側、当てられる側の双方のGameObjectにRigidBodyがついており、かつIs KinematicがONになっている。
当てる側、当てられる側のRigidbodyのIs Kinematicが双方ともONになっている場合は、OnCollisionEnter()は呼び出されません。

以上の内容を確認してみていただけませんか。