Как выровнять всплывающую панель пользовательского интерфейса по краю кнопки? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть холст «Пространство экрана - камера» в Unity с несколькими кнопками внутри. Когда я нажимаю кнопку, она открывает всплывающее окно (панель пользовательского интерфейса) вне родительского элемента кнопки, которое я хочу выровнять по указанной кнопке c, которую я нажал. Я могу расположить ее над кнопкой, просто сопоставив ее "rectTransform.position" с кнопкой rectTransform.position, но она просто центрирует ее по кнопке. Я хочу, чтобы его край совпадал с краем края кнопки.

Я попытался определить ширину кнопки и ширину всплывающего окна, а затем просто сдвинуть его на ширину / 2, но проблема заключается в том, что значения не подходят из-за типа холста, который я использую (я предполагаю, что это проблема). Я не могу изменить тип холста для моей игры. Я тоже пытался использовать Canvas.scaleFactor, но, похоже, он не работает или я не знаю, как его использовать.

Другая большая проблема заключается в том, что кнопка находится глубоко в иерархии Canvas, но всплывающее окно является прямым потомком Canvas.

Вот что я пробовал до сих пор:

// Popup position & size
RectTransform popupPOS = popupCanvas.transform.GetComponent<RectTransform>(); 
float popupRealWidth = popupPOS.rect.width * mainCanvas.scaleFactor;

// Button position & size
RectTransform btnPOS = gameObject.GetComponent<RectTransform>();
float btnRealWidth = btnPOS.rect.width * mainCanvas.scaleFactor;

// Position popup to position of button
popupCanvas.gameObject.GetComponent<RectTransform>().position = new Vector3(btnPOS.position.x, btnPOS.position.y, btnPOS.position.z);

// Move Rect.x by "RealWidth"
popupPOS.localPosition = new Vector3(popupPOS.localPosition.x + popupRealWidth / 2, popupPOS.localPosition.y, popupPOS.localPosition.z);

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Я нашел решение. Вот в случае, если кто-то пытается выяснить это в будущем.

Не было необходимости использовать «scaleFactor». Я чувствую, что попробовал это раньше, и это не сработало. Может быть, это потому, что я не следовал правилу "PEMDAS" ... вздох. Моя учительница математики в старшей школе будет качать головой.

popupPos.localPosition = new Vector3(popupPos.localPosition.x + (popupPos.rect.width / 2) + (btnPos.rect.width / 2), popupPos.localPosition.y - (popupPos.rect.height / 2) + (btnPos.rect.height / 2), popupPos.localPosition.z);

Это выравнивает всплывающее окно (панель пользовательского интерфейса) в правом верхнем углу кнопки.

0 голосов
/ 05 марта 2020
this.Parent = gameObject; //Or whatever your button is named

this.StartPosition = FormStartPosition.CenterParent;

Я считаю, что это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...