private void Collision(Collision2D collision) { if (cooldown <= 0.0f) { if (D2dHelper.IndexInMask(collision.gameObject.layer, mask) == true) { var contacts = collision.contacts; for (var i = contacts.Length - 1; i >= 0; i--) { var contact = contacts[i]; var normal = collision.relativeVelocity; var force = normal.magnitude; if (force >= threshold) { if (useSurfaceNormal == true) { normal = contact.normal; } else { normal /= force; } var point = contact.point; var pointA = point - normal * offset; var pointB = point + normal * depth; var matrix = D2dSlice.CalculateMatrix(pointA, pointB, thickness); cooldown = delay; cachedDestructible.Paint(paint, matrix, shape, color); if (prefab != null) { Instantiate(prefab, point, Quaternion.identity); } if (onImpact != null) { onImpact.Invoke(); } if (delay > 0.0f) { break; } } } } } }