Compruebe si los elementos de la interfaz de usuario / RectTransform se superponen
Me gustaría saber cómo compruebo si dos paneles de la interfaz de usuario en mi lienzo de Unity se superponen.
Actualmente estoy haciendo esto comparando los elementos del lienzo Rects
Configuraciones de lienzo
Modo de renderizado: Espacio de pantalla - CámaraPixel Perfect: [Sí]Cámara de renderizado: cámara principalDistancia del plano: 100Capa de clasificación: predeterminadaOrden en capa: 0Configuraciones de Canvas Scaler
Modo de escala de IU: tamaño de píxel constanteFactor de escala: 1Píxeles de referencia por unidad: 100Código que estoy usando para verificar
[Header("Check For Overlap")]
public RectTransform PlayerBar;
public RectTransform LeftBar;
public Rect RectOne;
public Rect RectTwo;
public bool overlapping;
//Check if the two canvas element Rects overlap each other
public void CheckForOverlap()
{
overlapping = false;
// Convert Canvas RectTransforms to World Rects
RectOne = GetWorldRect(LeftBar);
RectTwo = GetWorldRect(PlayerBar);
if (RectOne.Overlaps(RectTwo))
{
overlapping = true;
}
}
public Rect GetWorldRect(RectTransform rt)
{
// Get World corners, take top left
Vector3[] corners = new Vector3[4];
rt.GetWorldCorners(corners);
Vector3 topLeft = corners[0];
// Rect Size ... I'm not sure if this is working correctly?
Vector2 size = new Vector2(rt.rect.size.x, rt.rect.size.y);
return new Rect(topLeft, size);
}
Lo que pasa
El bool 'superpuesto' cambia instantáneamente a verdadero.
El Rect One vuelve como (ejemplo)
X -7.5, Y 2.5 W 98.5, H 164.1667