2016-08-06 24 views
1

我有問題時,我的一些遊戲物體運行此腳本,我拖動它周圍變得非常大通過某種方式改變的Z當前位置對象得到大

public class Draggable : MonoBehaviour, IDragHandler 
{ 
    public void OnDrag(PointerEventData eventData) 
    { 
     transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
     transform.position = new Vector3(transform.position.x, transform.position.y, 0); 
    } 
} 

http://prnt.sc/c2e7t7

之前http://prnt.sc/c2e7wb

後,即使我將其附加到品牌例如新Image對象總是它會調整到這個確切的Z值-708.4954

更新新增小樣本項目中,問題仍然存在:http://s000.tinyupload.com/?file_id=65691163815194240868

回答

2

這是因爲當你做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; 
    } 
} 
+0

什麼都不改變對象的比例或位置,因爲我剛剛創建了一個全新的統一項目,添加了一個簡單的'Image'對象,並且只添加了這個腳本,而且它完成了同樣的事情。如果它很重要,那就是我的畫布http://prntscr.com/c2eiz3 – GeekCodingMaster

+0

您是否在我的答案中嘗試了代碼? – Programmer

+0

是的它現在運行你的代碼不是我的。 – GeekCodingMaster

0

@OP 我相信問題可能是您的設置position.z爲0,但position.z你的情況在localPosition.z

等於-708.4954

要測試Debug.Log(position.z)以查看它是否實際爲零或將localPosition.z設置爲零而不是位置。

對於GUI對象,檢查器中的位置始終是localPosition,因爲它們是畫布的強制子項。