Unity 3D 如何获取鼠标移动事件

这个问题还可以是:

如何让某个物体跟随鼠标移动?

如何让游戏里的物体与鼠标移动绑定起来?

如何用鼠标控制游戏里的物体?

如何获取鼠标在屏幕上的移动和位置?

如何获取鼠标的移动方向?

如何获取真实鼠标的移动,不管光标有没有被屏幕限制住?

如何获取鼠标的移动方向和距离,而不是对应屏幕上的坐标?

如何能让鼠标控制一个物体连续的移动,不会被屏幕边框挡住?

====================================================

问题描述的有点模糊,具体就是你想要的到底是

鼠标光标(那个白色箭头)在屏幕平面上的(x,y)坐标?

还是

你手里握着的真实鼠标在桌面上的移动距离和方向?

====================================================

这样说就清楚多了,查了好久,下面分别介绍下:

1、获取鼠标光标(那个白色箭头)在屏幕平面上的(x,y)坐标

这个主要用的是

Input.mousePosition
这个方法,这个方法获取了鼠标光标在屏幕上的位置,不太好的或者说是需要注意的是,他的坐标轴设置的有些奇怪,包括原点的位置什么的,用log看一下输出就明白了。


public class Mouse : MonoBehaviour {
    private Vector2 MousePositionLast;//用于计算移动方向的起始位置
    private Vector2 MousePositionNew;//用于计算移动方向的结尾位置
    private Vector2 MouseMoveDirection;//用于表示移动方向
    private Vector3 MouseWorldMoveDirection;//用于在世界坐标系里移动某物体的方向向量
    public Transform MouseObject;//想要在世界坐标系里移动的物体
    public float MouseSensitivity;//鼠标光标移动速度映射到物体移动速度时的比例或灵敏度


    // Update is called once per frame
    void Update () {

        MousePositionLast = MousePositionNew;
        MousePositionNew = Input.mousePosition;
        MouseMoveDirection = MousePositionNew - MousePositionLast; //用两个坐标相减,得出鼠标的移动方向向量

        MouseWorldMoveDirection = new Vector3(-MouseMoveDirection.x, 0, -MouseMoveDirection.y) * MouseSensitivity;//这个我把二维的方向向量映射到三维的世界坐标系上,这个根据自己需要自己改就好了
        MouseObject.Translate(MouseWorldMoveDirection);//跟着鼠标移动物体

    }
}

这样就可以让物体随着鼠标的移动而移动,然而这时物体只能在一定范围内移动,映射于光标在屏幕范围内的移动。

具体映射方式可以自己写一个函数就好。

(记得去Inspector里设置MouseObject和MouseSensitivity)


2、握着的真实鼠标在桌面上的移动距离和方向

这个其实用的是

Input.GetAxis("Mouse X")
Input.GetAxis("Mouse Y")

这两个方法得到了鼠标在桌面上的移动方向向量

public class Mouse : MonoBehaviour {

    private Vector2 MouseMoveDirection;//用于表示移动方向
    private Vector3 MouseWorldMoveDirection;//用于在世界坐标系里移动某物体的方向向量
    public Transform MouseObject;//想要在世界坐标系里移动的物体
    public float MouseSensitivity;//鼠标光标移动速度映射到物体移动速度时的比例或灵敏度


    // Update is called once per frame
    void Update () {

        MouseMoveDirection = new Vector2( Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));

        MouseWorldMoveDirection = new Vector3(-MouseMoveDirection.x, 0, -MouseMoveDirection.y) * MouseSensitivity;//这个我把二维的方向向量映射到三维的世界坐标系上,这个根据自己需要自己改就好了
        MouseObject.Translate(MouseWorldMoveDirection);//跟着鼠标移动物体

    }
}
这个时候你就可以一直拖着物体朝着某个方向移动,即使是屏幕上的鼠标已经移动到了屏幕的角落里被挡住,物体仍然可以被鼠标带着走。

(记得去Inspector里设置MouseObject和MouseSensitivity)


3、这个里面还有各种触发事件比如鼠标在不在游戏程序的显示界面内之类的,大家可以自己探索下。


谢谢

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页