2016-11-20 6 views
2

Я пытаюсь сделать draggable gameobjects в Unity, и прямо сейчас у меня есть это так, как следует за мышью.Перетащите объект мышью и привяжите его к значению

Это не совсем то, что мне нужно, я хочу, чтобы он перемещался на 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

Важно: в настоящее время INCREDIBLY EASY реализует перетаскивание и подобные концепции в Unity. Здесь: http://stackoverflow.com/a/37473953/294884 – Fattie

+0

Да, но afaik это UI - только, я работаю над игровыми объектами, так что это действительно не работает – Fiffe

ответ

2

Nevermind, я тупой.

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