using UnityEngine;
public class CameraFollow : MonoBehaviour
{
public Transform target;//跟随目标
public float rot = 0.0f*Mathf.Deg2Rad;//横向角度
public float rotSpeed = 0.2f;//横向旋转速度
private float roll = 30f * Mathf.Deg2Rad; //纵向角度
private float rollSpeed = 0.2f;//纵向旋转速度
private float maxRoll = 70f * Mathf.Deg2Rad;//纵向角度范围
private float minRoll = 0.0f * Mathf.Deg2Rad;
public float distance = 8f;//跟随距离
public float zoomSpeed = 0.2f;//距离变化速度
public float maxDistance = 20f; //距离范围
public float minDistance = 8f;
private void LateUpdate()
{
//设置相机位置
SetCameraPos();
//纵向旋转
Rotate();
//横向旋转
Roll();
//调整距离
Zoom();
}
private void SetCameraPos()
{//设置相机位置
//目标的坐标
Vector3 targetPos = target.transform.position;
//计算相机的位置
Vector3 cameraPos;
float d = distance * Mathf.Cos(roll);
float height = distance * Mathf.Sin(roll);
cameraPos.x = targetPos.x + d * Mathf.Cos(rot);
cameraPos.z = targetPos.z + d * Mathf.Sin(rot);
cameraPos.y = targetPos.y + height;
Camera.main.transform.position = cameraPos;
Camera.main.transform.LookAt(target.transform);
}
private void Rotate()
{ //横向旋转
float w = Input.GetAxis("Mouse X") * rotSpeed;
rot -= w;
}
private void Roll()
{ //纵向旋转
float w = Input.GetAxis("Mouse Y") * rollSpeed * 0.5f;
roll -= w;
if (roll > maxRoll)
roll = maxRoll;
if (roll < minRoll)
roll = minRoll;
}
private void Zoom()
{//调整距离
if (Input.GetAxis("Mouse ScrollWheel") > 0)
{
if (distance > minDistance)
distance -= zoomSpeed;
}
else if (Input.GetAxis("Mouse ScrollWheel") < 0)
{
if (distance < maxDistance)
distance += zoomSpeed;
}
}
}