Unity2D中使用滑鼠拖動物體移動
阿新 • • 發佈:2019-02-09
昨天用unity開發了一個微信的飛機大戰,效果圖如下。期間遇到了很多問題都一一解決了,印象最深的問題就是如何用滑鼠拖動飛機的移動。今天我就把我的方法拿出來分享。
我的方法是在飛機物體中寫一個指令碼。在Update中先檢測滑鼠是否按下。
程式碼是這樣的:
如果isMouseDown = true說明滑鼠已經安裝,那麼接下來我們就可以判斷位置了。private bool isMouseDown = false; void Update () { if (Input.GetMouseButtonDown(0)) { isMouseDown = true; } if (Input.GetMouseButtonUp(0)) { isMouseDown = false; } }
接下來如果要移動物體,就必須知道物體與滑鼠的偏移量(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); } }
在這裡並沒有效果圖,如果需要看效果就需要自己敲敲程式碼試試啦