如何以与onMouseDrag相同的速度移动GameObject?

时间:2017-02-12 06:17:43

标签: unity3d

我正在尝试点击GameObject并以与鼠标相同的速率移动它。我可以让Object移动,但是我必须做一些疯狂的修改才能让它不会在屏幕上消失。

注意:我的最终目标是为手机做这个,但是从鼠标开始。

public class ItemController : MonoBehaviour {

    private Vector3 startPos;
    private bool ObjectMouseDown = false;

    void Update()
    {
       Debug.Log(Input.mousePosition + new Vector3(0,0,15));
    }

    void OnMouseDown()
    {
        startPos = transform.position;
        ObjectMouseDown = true;
    }

    void OnMouseDrag()
    {
        if (ObjectMouseDown == true)
        {
            transform.position = Vector3.MoveTowards(transform.position, Input.mousePosition + new Vector3(0, 0, 5), Time.deltaTime * 2f);
          //      transform.position = Vector3.MoveTowards(transform.position, endPosition, speed * Time.deltaTime);
        }
    }

    void OnMouseUp()
    {
        ObjectMouseDown = false;
    }
}

注意我必须添加一个15的z值,这样对象就不会浮出屏幕。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

Input.mousePosition返回屏幕上的绝对像素位置,而不是世界位置。你需要使用Camera.ScreenToWorldPoint这样的东西

Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.position.x, Input.position.y, 15);
transform.position = mouseWorldPos;

您可以在此处阅读更多内容https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html