所以我在线阅读了一个教程,并且99.9%肯定我没有犯错,这可能与我试图将他的想法实施到已经建立的项目(可能)不同有关因素。
数学的一般想法是我的SlotScript
实现了IDragHandler
,OnDrag
-
public void OnDrag(PointerEventData data)
{
if (inventory.Items[slotNumber].itemName != null)
{
inventory.ShowDraggedItem(inventory.Items[slotNumber]);
}
}
在我的广告资源中执行一个方法,只需将bool draggingItem
指定为true,然后更改它的精灵并激活它。
现在我用于返回拖动项目位置的实际更新代码并未返回其预期值:
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
保持完全相同(预期行为?)
我希望我说得够清楚。
答案 0 :(得分:1)
我很惊讶地看到没有人对此有答案!
无论如何,经过大约2个小时(可能在延长的时间段内更长时间)玩它后,我注意到虽然(非常清楚地说明)画布根据屏幕分辨率进行缩放但它不会缩放返回值localPosition
,你必须自己做。
我很累,所以希望这是有道理的。
如果您遇到此问题,您需要知道的是,一旦您将画布上mousePointer
的预期位置除以{{1}的任何值(x,y,z) } Vector3 localScale
组件中它返回缩放位置(因为除以小于1的原因会增加你的值)。
要解决的代码如下:
Canvas RectTransform