Verifique se os elementos da interface do usuário / RectTransform estão sobrepostos
Gostaria de saber como verifico se dois painéis de interface do usuário no meu Unity Canvas se sobrepõem.
Atualmente, estou fazendo isso comparando os elementos da tela Rects
Configurações de tela
Modo de renderização: Espaço na tela - CâmeraPixel perfeito: [Sim]Render Camera: Câmera PrincipalDistância do avião: 100Classificação da Camada: PadrãoOrdem na camada: 0Configurações do Scaler Canvas
Modo de escala da interface do usuário: tamanho constante do pixelFator de escala: 1Pixels de referência por unidade, ele: 100Código que estou 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);
}
O que acontece
O bool 'sobreposto' muda instantaneamente para true.
O Rect One retorna como (exemplo)
X -7,5, Y 2,5 W 98,5, H 164,1667