我正在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;
}
答案 0 :(得分:0)
我建议您使用鼠标的位置对x和y轴值进行平移,因为它是通过鼠标的位置值与它之间的相减差来拖动的。 #39;首先被压下来。
总结如下:
*您可能希望有一个布尔值,当鼠标停止时您将其设置为true,并且在拖动结束时将其设置为false。在拖动中使用该bool作为检查,以查看是否需要首先设置桨位置(如果布尔值为真,则仅设置桨位置) - 不确定是否通过仅触发鼠标拖动来为此执行此操作鼠标是否已关闭。
代码中的一个例子:
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
}