using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraFollow : MonoBehaviour
{
public float rollAngle;//XZ平面的角度控制
public float rotAngle;//YZ平面的角度控制
public float distance = 5;//摄像机与角色的距离
public Transform target;//跟随角色
private float roll;//XZ平面的弧度控制
private float rot;//YZ平面的弧度控制
public float RollSpeed = 5;
public float RotSpeed = 4;
public float MinRotAngle = 4;//仰视的最小角度
public float MaxRotAngle = 100;//俯视的最大角度
void Start()
{
}
// Update is called once per frame
void Update()
{
}
private void LateUpdate()
{
UpdatePosition();
RotRotate();
}
private void UpdatePosition()
{
roll = rollAngle * Mathf.PI * 2 / 360;//把角度转化为弧度
rot = rotAngle * Mathf.PI * 2 / 360;
Vector3 targetPos = target.position;//目标位置
Vector3 CameraPos;//定义一个三维向量用来存储摄像机的位置
float height = distance * Mathf.Sin(rot);//获得摄像机的高度
float d = distance * Mathf.Cos(rot);
CameraPos.x = targetPos.x + d * Mathf.Cos(roll);
CameraPos.y = targetPos.y + height;
CameraPos.z = targetPos.z + d * Mathf.Sin(roll);
transform.position = CameraPos;//更新位置
transform.LookAt(target);//使摄像机对着角色
}
private void RollRotate()
{
float MouseX = Input.GetAxis("Mouse X") * RollSpeed;
rollAngle -= MouseX;
}
private void RotRotate()
{
float MouseY = Input.GetAxis("Mouse Y") * RotSpeed;
rotAngle -= MouseY;
if (rotAngle >= MaxRotAngle)
{
rotAngle = MaxRotAngle;
}
if (rotAngle < MinRotAngle)
{
rotAngle = MinRotAngle;
}
}
}