Есть у меня некая панелька допустим 100х100. по нажатию кнопки она начинает двигаться за мышкой, но с ограничением, панель не должна выходить за пределы экрана.
Синтаксис:
Используется csharp
void Update()
{
if (Input.GetKeyDown("m")) isMove = !isMove;
if (isMove)
{
Vector2 vector2;
vector2.x = Input.mousePosition.x - Screen.width / 2;
vector2.y = Input.mousePosition.y - Screen.height / 2;
float a = Screen.width / 2 - rectTMovePanel.sizeDelta.x / 2;
float b = Screen.height / 2 - rectTMovePanel.sizeDelta.y / 2;
vector2.x = Mathf.Clamp(vector2.x, -a, a);
vector2.y = Mathf.Clamp(vector2.y, -b, b);
rectTMovePanel.localPosition = vector2;
text = a.ToString() + " " + b.ToString();
}
}
{
if (Input.GetKeyDown("m")) isMove = !isMove;
if (isMove)
{
Vector2 vector2;
vector2.x = Input.mousePosition.x - Screen.width / 2;
vector2.y = Input.mousePosition.y - Screen.height / 2;
float a = Screen.width / 2 - rectTMovePanel.sizeDelta.x / 2;
float b = Screen.height / 2 - rectTMovePanel.sizeDelta.y / 2;
vector2.x = Mathf.Clamp(vector2.x, -a, a);
vector2.y = Mathf.Clamp(vector2.y, -b, b);
rectTMovePanel.localPosition = vector2;
text = a.ToString() + " " + b.ToString();
}
}
Казалось бы что может пойти не так. Но увы всё оказалось не так просто. Все работает как нужно, пока не начнёшь изменять разрешение экрана и тогда либо панель начинает останавливается не дойдя до края экрана, либо же наоборот уходит за экран. Потом я заметил что панель движется медленнее чем курсор. Я начал штрудировать все на тему RectTransform и sizeDelta, все должно было работать!
Сегодня в очередной раз пытаясь все исправить, я заметил что у Canvas scale != 1 и решил изменить значение UI Scale Mode с Scale With Screen Size на Constant Pixel Size и О чудо! всё заработало, а scale == 1.
Что не так? как мне использовать Scale With Screen Size?