Итак, я следую учебному курсу онлайн и 99,9% уверен, что я не сделал ошибку, и это, возможно, связано с моей попыткой реализовать его идеи в уже созданном проекте с (возможно) разные факторы.GUI Проблемы масштабирования холста с помощью localPosition
Основная идея из математики, что мой SlotScript
, который реализует IDragHandler
, OnDrag
-
public void OnDrag(PointerEventData data)
{
if (inventory.Items[slotNumber].itemName != null)
{
inventory.ShowDraggedItem(inventory.Items[slotNumber]);
}
}
выполняет метод в моем инвентаре, который просто присваивает bool draggingItem
как истинный и изменяет это спрайт вместе с делает его активным.
Теперь мой фактический код обновления для возвращения позиции перемещенного элемента не возвращает это ожидаемое значение:
void Update()
{
if (draggingItem)
{
Vector3 position = (Input.mousePosition - (GameObject.FindObjectOfType<Canvas>().GetComponent<RectTransform>().localPosition));
draggedItem.GetComponent<RectTransform>().localPosition = new Vector3(position.x + 15, position.y - 15, position.z);
}
}
Вот некоторые примеры того, что я получаю. Когда мышь находится в центре холста я получить ожидаемый результат:
Если я перетащить элемент наружу к любому краю значение искажается всегда возвращающимся меньше, чем значение, должно быть, например:
Другая информация:
Экран занимает оверлей. Собственное разрешение: 1920x1080
. При тестировании с меньшим разрешением размер проблемы ухудшается (смещение пропорционально больше). После того, как onDrag
событие происходит mousePosition
обновления правильно и Canvas
localPosition
остается точно такой же (ожидаемое поведение?)
Я надеюсь, что я сделал это достаточно ясно.