void OnTriggerExit(Collider col) { Rigidbody rb = Tools.FindInParents <Rigidbody>(col.transform); if (rb != null && !rb.isKinematic) { foreach (Entry ent in mList) { if (ent.rb == rb) { if (--ent.counter <= 0) { mList.Remove(ent); for (int i = mOnExit.Count; i > 0;) { TriggerListener listener = mOnExit[--i]; if (listener.mb == null || !listener.callback(rb)) { mOnExit.RemoveAt(i); } } } return; } } } }
void OnTriggerEnter(Collider col) { Rigidbody rb = Tools.FindInParents <Rigidbody>(col.transform); if (rb != null && !rb.isKinematic) { foreach (Entry ent in mList) { if (ent.rb == rb) { ++ent.counter; return; } } Entry e = new Entry(); e.rb = rb; e.counter = 1; mList.Add(e); for (int i = mOnEnter.Count; i > 0;) { TriggerListener listener = mOnEnter[--i]; if (listener.mb == null || !listener.callback(rb)) { mOnEnter.RemoveAt(i); } } } }