1. 程式人生 > >Unity2D中使用滑鼠拖動物體移動

Unity2D中使用滑鼠拖動物體移動

昨天用unity開發了一個微信的飛機大戰,效果圖如下。期間遇到了很多問題都一一解決了,印象最深的問題就是如何用滑鼠拖動飛機的移動。今天我就把我的方法拿出來分享。

我的方法是在飛機物體中寫一個指令碼。在Update中先檢測滑鼠是否按下。

程式碼是這樣的:

private bool isMouseDown = false;

	void Update () {
	    if (Input.GetMouseButtonDown(0))
	    {
	        isMouseDown = true;
	    }
	    if (Input.GetMouseButtonUp(0))
	    {
	        isMouseDown = false;
	    }
	}
如果isMouseDown = true說明滑鼠已經安裝,那麼接下來我們就可以判斷位置了。

接下來如果要移動物體,就必須知道物體與滑鼠的偏移量(offset)和上一次滑鼠釋放時的位置(lastMousePosition)。最後物體的實際位置就是offset+lastMousePosition。

所以程式碼是這樣的:

private bool isMouseDown = false;
    private Vector3 lastMousePosition = Vector3.zero;

	void Update () {
	    if (Input.GetMouseButtonDown(0))
	    {
	        isMouseDown = true;
	    }
	    if (Input.GetMouseButtonUp(0))
	    {
	        isMouseDown = false;
	    }
	    if (isMouseDown)
	    {
	        if (lastMousePosition != Vector3.zero)
	        {
	            Vector3 offset = Camera.main.ScreenToWorldPoint(Input.mousePosition) - lastMousePosition;
	            this.transform.position += offset;
	        }
            lastMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
	        
	    }
	}

運行遊戲,我們已經可以看到飛機可以隨滑鼠移動了,但是出現了另一個問題:飛機出現了瞬移。

這是因為lastMousePosition在滑鼠釋放時沒有清零,所以我們應該在滑鼠釋放的地方加上lastMousePosition = Vector3.zero;

所以最終程式碼是這樣的:

private bool isMouseDown = false;
    private Vector3 lastMousePosition = Vector3.zero;

	void Update () {
	    if (Input.GetMouseButtonDown(0))
	    {
	        isMouseDown = true;
	    }
	    if (Input.GetMouseButtonUp(0))
	    {
	        isMouseDown = false;
	        lastMousePosition = Vector3.zero;
	    }
	    if (isMouseDown)
	    {
	        if (lastMousePosition != Vector3.zero)
	        {
	            Vector3 offset = Camera.main.ScreenToWorldPoint(Input.mousePosition) - lastMousePosition;
	            this.transform.position += offset;
	        }
            lastMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
	        
	    }
	}

在這裡並沒有效果圖,如果需要看效果就需要自己敲敲程式碼試試啦