[英]Unity - best way to drag a RigidBody2D Gameobject by mouse/touch
我正在Unity中創建一個2D游戲,想看看是否有人對我如何改進腳本的建議,在該腳本下方我會在突破/ arkanoid風格的游戲中拖動槳葉。 我知道有更復雜的拖動對象的方法,但是對我來說這行得通,但是我遇到的唯一問題是,當我在移動設備上測試游戲時,拖動並非100%清晰,而當我停止拖動槳時似乎滯后曾經如此輕微。 我玩過從Play商店下載的其他突破游戲時,移動設備沒有任何問題,並且拖動非常清晰。
以下腳本已附加到槳上。
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;
}
我建議您使用鼠標的位置進行x和y軸值的平移,因為它是通過第一次按下時鼠標位置值之間的差值減去而被拖動的。
總結如下:
*您可能想擁有一個布爾值,當鼠標按下時將其設置為true,在拖動結束時將其設置為false。 在拖動中使用該布爾值作為檢查對象,以檢查是否需要首先設置槳葉位置(如果布爾值為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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.