バージョン : Unity 4.3.4f1
https://play.google.com/store/apps/details?id=com.ymtstudio.gusokumushi&hl=ja では猫とグソクムシが衝突したのを契機に攻撃しあうようになっているのですが、そこで OnCollisionEnter2D がひたすら発火し続けるという事象に悩まされました。Rigidbody2D に BoxCollider2D または CircleCollider2D をアタッチしてるのですが、あれ OnCollisionEnter って衝突開始時にだけ呼ばれて後は OnCollisionStay じゃないのと思ったわけです。
そこで調べてみるとBoxCollider2D 同士だと一回しか呼ばれないけど CircleCollider2D だと複数回呼ばれるという報告があったのですが
OnCollisionEnter2D called several times when collision is circle - Unity Forum
自分の場合は Collider の種類に差異はなく、むしろこちらの
OnTriggerEnter2D behaving like OnTriggerStay2D. - Unity Forum
に現象が近かったです。ただしこちらは OnTriggerEnter2D のケース。
When an object is in motion (including rotation in my case), it continues to fire the OnTriggerEnter2D method since the transform is continually changing.
ということで動いてぶつかり続けているときに OnTriggerEnter2D コールバックが呼ばれ続けている雰囲気ですが、このスレッドではバグ認定されてチケットが上げられていました。
あとはちらほら OnCollisionStay2D にもバグ報告が上がっていたり。
rigidbody2D.isKinematic and OnCollisionEnter2D bug? - Unity Forum
つまるところ Unity2D のイベントシステムのバグなんでしょうか。結局、みなさん初回衝突時にぶつかった相手をリストなりに入れて二回目以降は処理をスキップして回避しているようでした。ちょっと毎フレームやりたくない処理ですが現状様子見ということでグソクムシも Hashtable に InstanceID でフラグ引ける形で入れて重複検出させることで問題回避しています。