Detecting collisions between blocks?

Is there any other was to detect collisions between two objects other than this:

function OnTriggerEnter(collision : Collider) { 
   if(collision.gameObject.tag=="Player"){ 
      print("hit"); 
   } 
}

The problem with that is that it requires one of the objects to be a trigger meaning that physics do not apply to it. In the context of my application it means one object will pass through another which i don't really want.

Thanks in advance

function OnCollisionEnter(collision : Collision) {
if(collision.gameObject.tag=="Player"){ 
print("hit");
 }
}

http://unity3d.com/support/documentation/ScriptReference/Collider.OnCollisionEnter.html?from=BoxCollider

Description OnCollisionEnter is called when this collider/rigidbody has begun touching another rigidbody/collider

You can use OnTriggerenter, OnTriggerStay, OnTriggerExit, OnCollisionEnter, OnCollisionStay, OnCollisionExit :).

Yes, this is working as described in the docs - at least one of the colliding objects must have a non-kinematic rigidbody to make the collision events happen.

Collider.OnCollisionEnter(Collision)
Description
OnCollisionEnter is called when this collider/rigidbody has begun touching another rigidbody/collider.

In contrast to OnTriggerEnter, OnCollisionEnter is passed the Collision class and not a Collider. The Collision class contains information about contact points, impact velocity etc. If you don’t use collisionInfo in the function, leave out the collisionInfo parameter as this avoids unneccessary calculations. Note that collision events are only sent if one of the colliders also has a non-kinematic rigidbody attached.