Обновленная версия с учетом масштаба объекта rectTransform.
ел бы знать, как я проверяю, перекрывают ли две панели пользовательского интерфейса на моем холсте Unity друг друга.
В настоящее время я делаю это, сравнивая элементы холста Rects
Настройки холста
Режим рендеринга: пространство экрана - камераPixel Perfect: [Да]Render Camera: Основная камераРасстояние до самолета: 100Сортировка слоя: по умолчаниюПорядок в слое: 0Настройки Canvas Scaler
Режим пользовательского интерфейса: постоянный размер пикселяКоэффициент масштабирования: 1Эталонных пикселей на единицу, это: 100Код, который я использую для проверки
[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);
}
Что просходит
«Перекрывающееся» bool мгновенно меняется на true.
Rect One возвращается как (пример)
Х-7,5, У 2,5 Вт, 98,5, Н 164,1667