public void RevisarPegados(float filtroOverlap = 0f) { pegados.Clear(); pegadosRigid.Clear(); pegadosColliders.Clear(); pegadosFiltrados.Clear(); pegadosTocandoPoco.Clear(); arriba.Clear(); abajo.Clear(); derecha.Clear(); izquierda.Clear(); if (Rigid) { var contactos = new ContactPoint2D[50]; int cant = Rigid.GetContacts(contactos); for (int i = 0; i < cant; i++) { var contacto = contactos[i]; var tuBoxCol = contacto.collider as BoxCollider2D; var miBox = BoxCol ? BoxCol : contacto.otherCollider as BoxCollider2D; if (tuBoxCol && !pegadosColliders.Contains(tuBoxCol)) { pegadosColliders.Add(tuBoxCol); var tuBoundsMax = tuBoxCol.bounds.max; var tuBoundsMin = tuBoxCol.bounds.min; var miBoundsMax = miBox.bounds.max; var miBoundsMin = miBox.bounds.min; // Nueva tecnica, se tomaran los bloques incluyendo superposiciones, un mismo bloque que esta arriba y abajo entra en ambos grupos if (tuBoundsMax.y > miBoundsMax.y) { arriba.Add(tuBoxCol); } if (tuBoundsMin.y < miBoundsMin.y) { abajo.Add(tuBoxCol); } if (tuBoundsMax.x > miBoundsMax.x) { derecha.Add(tuBoxCol); } if (tuBoundsMin.x < miBoundsMin.x) { izquierda.Add(tuBoxCol); } if (contacto.rigidbody && !pegadosRigid.Contains(contacto.rigidbody)) { pegadosRigid.Add(contacto.rigidbody); var tuLaycuarto = contacto.rigidbody.GetComponent <LayoutCuarto>(); if (tuLaycuarto) { pegados.Add(tuLaycuarto); var overLapX = Mathf.Min(tuBoundsMax.x, miBoundsMax.x) - Mathf.Max(tuBoundsMin.x, miBoundsMin.x); var overLapY = Mathf.Min(tuBoundsMax.y, miBoundsMax.y) - Mathf.Max(tuBoundsMin.y, miBoundsMin.y); if (overLapX > filtroOverlap || overLapY > filtroOverlap) { pegadosFiltrados.Add(tuLaycuarto); } else { pegadosTocandoPoco.Add(tuLaycuarto); } } } } } } RevisarMuros(); }