1. 程式人生 > >Unity 3D 如何獲取滑鼠移動事件

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、這個裡面還有各種觸發事件比如滑鼠在不在遊戲程式的顯示介面內之類的,大家可以自己探索下。

謝謝