2016-11-22 95 views
0

我在Unity中創建了2D遊戲,並且想要查看是否有人有任何關於如何改進腳本的建議,一個突破/ arkanoid風格的遊戲。我知道有更復雜的方法來拖動對象,但這對我來說確實很好,但我遇到的唯一問題是,當我在移動設備上測試我的遊戲時,拖動不是100%銳利,而且當我停止拖動槳時似乎滯後曾經如此輕微。我的移動設備沒有任何問題,因爲我玩過從Play商店下載的其他分組遊戲,並且拖動非常脆。Unity - 通過鼠標/觸摸拖動RigidBody2D Gameobject的最佳方式

下面的腳本附在槳上。

Vector3 dist; 
float posX; 
float posY; 

void OnMouseDown(){ 
    dist = Camera.main.WorldToScreenPoint(transform.position); 
    posX = Input.mousePosition.x - dist.x; 
    posY = Input.mousePosition.y - dist.y; 

} 

void OnMouseDrag(){ 
    Vector3 curPos = new Vector3(Input.mousePosition.x - posX, Input.mousePosition.y - posY, dist.z); 

    Vector3 worldPos = Camera.main.ScreenToWorldPoint(curPos); 

    transform.position = worldPos; 
} 
+0

不要你的意思'Camera.main.ScreenToWorldPoint'? –

回答

0

我會建議做你使用鼠標的位置的X軸和Y軸的值轉換爲它正在通過與鼠標的位置值是什麼,因爲它是第一個按下減去差拖累。

這方面的一個總結是:

  1. 存儲2D向量作爲私有字段,稱爲previousPos(所以 鼠標按下和鼠標移動既可以訪問),並設置它的價值,鼠標的電流的結果位置。
  2. 在鼠標拖動功能,再次獲得鼠標位置和 值分配給一個2D矢量稱爲currentPos並減去從 的previousPos,它給你的x和y軸的值來設置 槳的變換位置至。
  3. 然後在拖動函數結束時更新previousPos,並且 將currentPos的值賦給它,以便下次圍繞它 給出新的更改而不是聚合的更改。

*您可能想要一個布爾值,當鼠標關閉並且拖動結束時將其設置爲false時,您將設置爲true。在拖動中使用該布爾作爲檢查來查看是否需要首先設置槳的位置(如果布爾值爲true,則只設置槳的位置) - 不確定是否統一通過點擊鼠標拖動鼠標是否關閉。

在代碼中的一個例子:

private Vector2 _previousPos; 
private bool _isMouseDown; 

void OnMouseDown(){ 
    _isMouseDown = true; //because we're in the on mouse down function 
    _previousPos = Input.mousePosition; //get the current mouse position 
} 

void OnMouseDrag(){ 
    if(!_isMouseDown) 
     return; 

    Vector2 currentPos = Input.mousePosition; //get updated mouse pos 
    Vector2 paddlePos = currentPos - previousPos; //the delta change 

    transform.position = paddlePos; //new paddle position 

    _isMouseDown = false; //drag is complete, mouse btn is no longer down 
    _previousPos = currentPos; //reset previous pos for next mouse move 
} 
+0

嗨,感謝您的建議,雖然我似乎有心理障礙,因爲我無法弄清楚你的意思。你會善意證明這一點嗎? – Kaz

+0

當然可以。更新了答案。 –

+0

非常感謝凱爾,我會試試這個。 – Kaz