这是因为当你做transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Z轴改变是有可能的,你应该存储到一个临时的值,然后分配给它之前z
值更改为0
回到对象的位置。
public void OnDrag(PointerEventData eventData)
{
Vector3 noZValue = Camera.main.ScreenToWorldPoint(Input.mousePosition);
noZValue.z = 0;
transform.position = noZValue;
}
如果这不能解决问题,那么你正在修改从另一个代码的对象规模或POS机,你应该也显示的代码部分。对于您的信息,该对象实际上并没有用该代码进行缩放。它靠近相机,看起来很大。
编辑:
在你的问题中的代码是移动精灵/雪碧渲染不UI组件,如图像,按钮,RawImage的方式....
这应该将你的UI时你的UI Canvas是在屏幕空间 - 相机模式:
public class Draggable : MonoBehaviour, IDragHandler
{
public Canvas parentCanvas;
public void OnDrag(PointerEventData eventData)
{
Vector2 movePos;
RectTransformUtility.ScreenPointToLocalPointInRectangle(parentCanvas.transform as RectTransform, eventData.position, parentCanvas.worldCamera, out movePos);
transform.position = parentCanvas.transform.TransformPoint(movePos);
}
}
如果你试试这个,你会发现,当你点击图像,图像将跳转至点击位置。移动图像以修复此问题时,您需要添加偏移位置。当鼠标按钮关闭时,只需拿到鼠标pos。拖动时使用它添加到当前鼠标位置。这可以通过执行IBeginDragHandler
并使用OnBeginDrag
函数来完成。
完成与UI图像将偏移:
public class Draggable : MonoBehaviour, IDragHandler, IBeginDragHandler
{
public Canvas parentCanvas;
Vector3 Offset = Vector3.zero;
public void OnBeginDrag(PointerEventData eventData)
{
Vector2 pos;
RectTransformUtility.ScreenPointToLocalPointInRectangle(parentCanvas.transform as RectTransform, eventData.position, parentCanvas.worldCamera, out pos);
Offset = transform.position - parentCanvas.transform.TransformPoint(pos);
}
public void OnDrag(PointerEventData eventData)
{
Vector2 movePos;
RectTransformUtility.ScreenPointToLocalPointInRectangle(parentCanvas.transform as RectTransform, eventData.position, parentCanvas.worldCamera, out movePos);
transform.position = parentCanvas.transform.TransformPoint(movePos) + Offset;
}
}
什么都不改变对象的比例或位置,因为我刚刚创建了一个全新的统一项目,添加了一个简单的'Image'对象,并且只添加了这个脚本,而且它完成了同样的事情。如果它很重要,那就是我的画布http://prntscr.com/c2eiz3 – GeekCodingMaster
您是否在我的答案中尝试了代码? – Programmer
是的它现在运行你的代码不是我的。 – GeekCodingMaster