【问题标题】:Unity - Trying to move cube to mouse position - cube moves in wrong directionUnity - 试图将立方体移动到鼠标位置 - 立方体移动方向错误
【发布时间】:2016-10-11 15:12:43
【问题描述】:

我正在尝试制作一个简单的游戏,当玩家按下鼠标按钮时,立方体会追逐鼠标。

到目前为止,这是我的代码:

public class PlayerCubeController : MonoBehaviour {

    public float speed = 1.0f;
    Vector3 targetPos = new Vector3();

    void Start () {
        speed = speed * 0.01f;
    }

    void Update () {
        if (Input.GetMouseButtonDown (0)) {
            Debug.Log (Input.mousePosition);
            targetPos = Input.mousePosition;
            targetPos.z = 0;

        } else if (Input.GetMouseButtonUp (0)) {
            targetPos = transform.position;
        }

        transform.position = Vector3.Lerp (transform.position, targetPos, speed * Time.deltaTime);
    }
}

不幸的是,立方体永远不会朝着鼠标的方向移动;我可以将鼠标放在屏幕的左下角,但立方体仍会移到右上角。

奇怪的是,如果我把鼠标放在屏幕左侧,立方体会直接向上移动。

谁能告诉我哪里出错了?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您的问题很简单:Input.mousePosition 定义了 屏幕坐标 中的鼠标位置(例如从 (0,0) 到 (1920,1080))。如果您想从鼠标位置获取 3d 点,您还有一个额外的步骤。我看到了两种可能性:


    使用Camera.main.ScreenToWorldPoint 并手动指定您希望与相机之间的距离:

     var v = Input.mousePosition;
     v.z = 10.0;
     v = Camera.main.ScreenToWorldPoint(v);
     // Move your cube to v
    

    文档:https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html


    或者使用光线投射来获取地面上的点,例如使用Camera.main.ScreenPointToRay

        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
    
        if (Physics.Raycast(ray, out hit, 100))
            // Move your cube to hit.point
    

    文档:https://docs.unity3d.com/ScriptReference/Camera.ScreenPointToRay.html

    【讨论】:

    • 感谢您的回答和解释。
    【解决方案2】:

    简而言之,您需要将屏幕坐标转换为世界坐标。这是一个例子

    https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html

    类似的东西:

     Vector3 mouseP = Input.mousePosition;
     mouseP.z = 10.0;
     Vector3 worldP = Camera.main.ScreenToWorldPoint(mouseP);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      相关资源
      最近更新 更多