涉及了视野放大,缩小,旋转。
相机的跟随记得放在LateUpdate里。
private void LateUpdate()
{
transform.position = Vector3.Lerp(transform.position, player.transform.position + offset, Time.deltaTime * 5);
ScrollView();
RotateView();
}
private void ScrollView()
{
//获取鼠标中键滚动的值,向上滚为正值,向下为负值
float x = Input.GetAxis("Mouse ScrollWheel");
float distance = offset.magnitude;
float dis = distance + distance * x * -1;
//超出指定范围将不做变化
if (dis <= 4 || dis >= 10)
{
return;
}
distance *= x;
transform.position += -1 * offset.normalized * distance * scrollSpeed;
//更新offset
if (Mathf.Abs(x) >= 0.05f)
offset = transform.position - player.transform.position;
}
private void RotateView()
{
if (Input.GetMouseButtonDown(1))
isMouseRightDown = true;
if (Input.GetMouseButtonUp(1))
isMouseRightDown = false;
if(isMouseRightDown)
{
//得到鼠标在鼠标在x轴和y轴滑动的axis值
float x = Input.GetAxis("Mouse X");
float y = Input.GetAxis("Mouse Y");
transform.RotateAround(player.transform.position, Vector3.up, rotateSpeed * x); //正值为向右,负值为向左
Vector3 pos = transform.position;
Quaternion qua = transform.rotation;
//旋转的轴为人物的x轴,而不是世界的x轴
transform.RotateAround(player.transform.position, transform.right, -1 * rotateSpeed * y);
//如果超出范围,就还原
if(transform.eulerAngles.x <= 10 || transform.eulerAngles.x >= 80)
{
transform.position = pos;
transform.rotation = qua;
}
offset = transform.position - player.transform.position;
}
}