1回理解してもしばらく経つとやらかしてるのでざっくり自分用まとめます。
Collision系とTrigger系
- Collision系関数
| 関数 | 呼び出されるタイミング | 
|---|---|
| OnCollisionEnter | 他のcollider/rigidbodyに触れたとき | 
| OnCollisionExit | 他のcollider/rigidbodyと触れ合うのをやめたとき | 
| OnCollisionStay | 他のrigidbody/colliderに触れている間 | 
- Trigger系
| 関数 | 呼び出されるタイミング | 
|---|---|
| OnTriggerEnter | Collider が他のトリガーイベントに侵入したとき | 
| OnTriggerExit | Collider が other のトリガーに触れるのをやめたとき | 
| OnTriggerStay | OnTriggerStay はトリガーが 他の Collider に触れ続けている間 | 
※スクリプトリファレンスより引用
違いはRididbodyの有無
Trigger系はColliderのIsTriggerのチェックボックスをオンにするだけでOK。
Collider系は衝突するオブジェクト”両方”がColliderとRigidbodyを持っている必要がある。
動くもの同士の衝突判定=> Collision系
どちらかが動かない衝突判定=> Trigger系
※もっと詳しい解説 Unityつかうよ 
※もっと詳しい具体例とか Unityにおける衝突判定まとめ
衝突対象の判定
①タグ
基本こっち使う(のわりに忘れがち)
Add Tagでタグを追加して使う。
タグを使った例
    void OnCollisionStay(Collision other)
    {
            if (other.gameObject.tag == "sample")
            {
            Destroy(other.gameObject);
            }
     }
②レイヤー
特定のオブジェクト同士に判定をさせたくないときに便利。
Edit → Project Settings → Physics 2Dでできる。
レイヤーを使った例
    void OnTriggerEnter (Collider other)
    {
        string layerName = LayerMask.LayerToName(other.gameObject.layer);
        if( layerName == "sample")
        {
            Destroy(other.gameObject);
        }
    }
他またあったら追記します。