【问题标题】:How do I move a GameObject at the same speed as onMouseDrag?如何以与 onMouseDrag 相同的速度移动游戏对象?
【发布时间】:2017-02-12 16:57:19
【问题描述】:

我正在尝试单击游戏对象并以与鼠标相同的速度移动它。我可以让物体移动,但我必须做一些疯狂的修改才能让它不会从屏幕上消失。

注意:我的最终目标是为移动设备执行此操作,但我从鼠标开始。

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 值,这样对象就不会浮出屏幕。

任何帮助都会很棒。

【问题讨论】:

    标签: unity3d


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      相关资源
      最近更新 更多