最近项目里有这个需求,在网上搜了一圈,没找到非常合适的解决方法,不过提供了一个很有用的思路。之前代码里是用获取点位置然后移动摄像机,还有一种思路是获取点击位置的移动速度。最后我的在项目里的解决方式是把这两种结合起来,移动的时候用位置,当手指离开时就用速度,然后再递减到0就可以做出这个效果了。虽然代码还是很烂。
//这个方法放在Update里执行
private void HandleMouseInput ()
{
//按下时记录位置
if (Input.GetMouseButtonDown(0))
{
_prevPosition = Input.mousePosition;
startMousePosition = Input.mousePosition;
}
//移动时更新位置
if (Input.GetMouseButton (0)) {
Vector2 curMousePosition = Input.mousePosition;
MoveCamera (_prevPosition, curMousePosition);
_prevPosition = curMousePosition;
inertia = (Camera.ScreenToWorldPoint(_prevPosition) - Camera.ScreenToWorldPoint(startMousePosition));
}
else //最后递减
{
currentSpeed = -inertia*Time.deltaTime;
if (Mathf.Abs(inertia.y) > 0.2f)
inertia -= (inertia/10);
else
inertia = Vector3.zero;
transform.position += currentSpeed;
transform.position = ApplyBounds(transform.position);
//Debug.Log("inertia" + inertia);
}
}