因此,我正在在线学习一个教程,并且 99.9% 的人确信我没有犯错误,这可能与我试图将他的想法实施到一个已经建立的项目中有关(可能)具有不同的相关因素。
数学的总体思路是 my SlotScript
which implements IDragHandler
, OnDrag
-
public void OnDrag(PointerEventData data)
{
if (inventory.Items[slotNumber].itemName != null)
{
inventory.ShowDraggedItem(inventory.Items[slotNumber]);
}
}
在我的清单中执行一个方法,该方法简单地分配bool draggingItem
为 true 并更改它的 sprite 并使其处于活动状态。
现在我返回拖动项目位置的实际更新代码没有返回它的预期值:
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
保持完全相同(预期的行为?)
我希望我说得足够清楚。