使用鼠标拖动对象并将其捕捉到值

4

我正在尝试在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);
    }

重要提示:现在在Unity中实现拖放和类似概念非常容易。请参考此链接:https://dev59.com/oloU5IYBdhLWcg3wamga#37473953 - Fattie
是的,但据我所知它只是UI相关的,而我正在处理游戏对象,所以它并不适用。 - user4331901
1个回答

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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接