2016-11-20 64 views
2

我試圖在Unity中製作可拖動的gameobjects,現在我已經擁有了它,所以它遵循鼠標。用鼠標拖動對象並將其對齊

這不完全是我所需要的,我希望它在鼠標方向上移動0.375f,而不是完全放在鼠標所在的位置。

我真的不能想象它將如何工作 - 任何幫助將不勝感激! 這是我到目前爲止:

void OnMouseDown() 
    { 
     screenPoint = Camera.main.WorldToScreenPoint(transform.parent.position); 
     offset = transform.parent.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); 
    } 

    void OnMouseDrag() 
    { 
     Vector3 curScreenPt = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z); 
     Vector3 curPos = Camera.main.ScreenToWorldPoint(curScreenPt) + offset; 
     transform.parent.position = new Vector3(curPos.x, curPos.y); 
    } 
+0

重要提示:它現在非常容易在Unity中實現拖放和類似的概念。這裏:http://stackoverflow.com/a/37473953/294884 – Fattie

+0

是的,但afaik它的用戶界面 - 只,我正在對遊戲對象,所以它不會真的工作 – Fiffe

回答

2

沒關係,我很笨。

void OnMouseDown() 
{ 
    screenPoint = Camera.main.WorldToScreenPoint(transform.parent.position); 
    offset = transform.parent.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); 
} 

void OnMouseDrag() 
{ 
    Vector3 curScreenPt = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z); 
    Vector3 curPos = Camera.main.ScreenToWorldPoint(curScreenPt) + offset; 
    transform.parent.position = new Vector3(Mathf.Round(curPos.x/0.3175f) * 0.3175f, Mathf.Round(curPos.y/0.3175f) * 0.3175f); 
} 
+0

沒有人在這裏愚蠢的我的男人! – Fattie