這是因爲當你做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