Обновленная версия с учетом масштаба объекта 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

Ответы на вопрос(2)

Ваш ответ на вопрос