我使脚本在下面移动时可以在鼠标位置平滑移动对象,但是平滑运行,但是在此脚本中存在一个问题,当我单击并移动鼠标时,对象立即移动到(0,0,0)位置然后随鼠标移动开始移动。
该如何解决,使对象从最后一个位置移动而不是从(0,0,0)位置移动?
脚本:
float Speed = 50f;
float sensitivity = 5f;
Vector2 firstPressPos;
Vector2 secondPressPos;
Vector2 currentSwipe;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
firstPressPos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
}
if (Input.GetMouseButton(0))
{
secondPressPos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
currentSwipe = new Vector2(secondPressPos.x - firstPressPos.x, secondPressPos.y - firstPressPos.y);
if (firstPressPos != secondPressPos)
{
transform.position = Vector2.Lerp(transform.position, new Vector3(currentSwipe.x / 200, currentSwipe.y / 200, transform.position.z), sensitivity * Time.deltaTime);
}
}
}
答案 0 :(得分:0)
我想我了解您想要的东西。
您希望能够单击任意位置,并且对象应该只跟随鼠标的相对移动而不是确切位置,对吧?
否则,您可以使用
transform.position = Vector2.Lerp(transform.position, secondPressPos, sensitivity * Time.deltaTime)
但是我不明白为什么您用currentSwipe
来划分200
..您可能有自己的理由。
无论如何,据我所知,您还需要另外存储initialPos
,当鼠标按钮按下时该对象所处的位置。之后,您将currentSwipe
添加到初始位置,而不是单独使用(=将其添加到0,0
)
float Speed = 50f;
float sensitivity = 5f;
Vector2 firstPressPos;
Vector2 secondPressPos;
Vector2 currentSwipe;
private Vector2 initialPos;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
firstPressPos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
// store the current position
initialPos = transform.position;
}
// I would just make it exclusive else-if since you don't want to
// move in the same frame anyway
else if (Input.GetMouseButton(0))
{
secondPressPos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
currentSwipe = secondPressPos - firstPressPos;
if (firstPressPos != secondPressPos)
{
// Now use the initialPos + currentSwipe
transform.position = Vector2.Lerp(transform.position, initialPos + currentSwipe / 200, sensitivity * Time.deltaTime);
}
}
}
请注意,通常这取决于您的需求,但是这种使用Lerp
的方式实际上无法到达确切位置……它只会变得非常接近而且非常缓慢。