которые находятся в массиве. Для этого я написал этот код. Я пытаюсь присвоить панелям позицию коллайдера, однако в итоге позиция получается фиг знает где с огромными числами за пределами экрана. Кто-то может подсказать каким образом передать корректную позицию?
for(int i = 0; i < towerColliders.Length; i++)
{
panels[i, 0] = Instantiate(BuyPanel, Canvas.transform, false);
var rectTransform = panels[i, 0].GetComponent<RectTransform>();
rectTransform.position = new Vector3(towerColliders[i].transform.position.x, towerColliders[i].transform.position.y + panelPositionDistance, 0);
panels[i, 1] = Instantiate(ChangePanel, Canvas.transform, false);
var rectTransform2 = panels[i, 1].GetComponent<RectTransform>();
rectTransform2.position = new Vector3(towerColliders[i].transform.position.x, towerColliders[i].transform.position.y + panelPositionDistance, 0);
}
Так кто-то может пожалуйста подсказать что делать в данной ситуации?
Если коллайдеры находятся в мире и ты хочешь UI-элементы поместить там, где они в мире, надо использовать https://docs.unity3d.com/ScriptReference/Camera.WorldToScreenPoint.html
Все равно какие-то странные цифры в позиции получаются. Может я делаю что-то не так? rectTransform.position = cam.WorldToScreenPoint(new Vector3(towerColliders[i].transform.position.x, towerColliders[i].transform.position.y + panelPositionDistance, 0));
Я у меня коллайдеры находятся внутри grid, чтобы они вместе с тайловой картой двигались.
Все равно не работает(
Должно, посмотри настройки канваса и своего UI элемента. От scaleFactor еще может зависеть. В целом в интернете полно примеров https://answers.unity.com/questions/26676/can-you-make-a-guibox-follow-a-players-positionsol.html https://forum.unity.com/threads/health-bar-over-enemy.26014/
Обсуждают сегодня