Я хотел бы узнать, как я проверяю, перекрываются ли две панели пользовательского интерфейса на моем холсте Единства.Проверьте, перекрываются ли элементы пользовательского интерфейса/RectTransform
В настоящее время я делаю это путем сравнения элементов холст прямоугольникам
Холст Настройки
- Рендер Mode: Screen Space - камера
- Pixel Совершенная: [Да]
- Рендер камеры : Основная камера
- Дальность полета: 100
- Сортировка Уровень: По умолчанию
- Order В Layer: 0 Настройки
Холст Scaler
- режим пользовательского интерфейса Масштаб: Constant Размер пикселя
- Scale Factor: 1
- Ссылка Pixels Per Единица измерения: 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 мгновенно меняет к истине.
Прямоугольник Один возвращается как (например)
Х -7,5, Y 2,5 Вт 98,5, Н 164,1667
Большое спасибо, это было действительно полезно. Особенно добавленный совет для метода расширения – Jim