简易相机控制器
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ThirdCamera : MonoBehaviour
{
public Transform target;
public float xSpeed=200f;
public float ySpeed=200f;
public float mSpeed=10f;
public float yMinLimit=-50f;
public float yMaxLimit=50f;
public float distance=10f;
public float minDistance=2f;
public float maxDistance=30f;
public bool needDamping=true;
float damping=5f;
public float x=0f;
public float y=0f;
// Start is called before the first frame update
void Start()
{
Vector3 angles=transform.eulerAngles;
x=angles.y;
y=angles.x;
}
void LateUpdate()
{
if(target)
{
x+=Input.GetAxis("Mouse X")*xSpeed*0.02f;
y-=Input.GetAxis("Mouse Y")*ySpeed*0.02f;
y=ClampAngle(y,yMinLimit,yMaxLimit);
distance-=Input.GetAxis("Mouse ScrollWheel")*mSpeed;
distance=Mathf.Clamp(distance,minDistance,maxDistance);
Quaternion rotation=Quaternion.Euler(y,x,0f);
Vector3 disVector=new Vector3(0f,0f,-distance);
Vector3 position=rotation*disVector+target.position;
//adjust the camera
if(needDamping)
{
transform.rotation=Quaternion.Lerp(transform.rotation,rotation,Time.deltaTime*damping);
transform.position=Vector3.Lerp(transform.position,position,Time.deltaTime*damping);
}
else
{
transform.rotation=rotation;
transform.position=position;
}
}
}
static float ClampAngle(float angle,float min,float max)
{
if(angle<-360)
angle+=360;
if(angle>360)
angle-=360;
return Mathf.Clamp(angle,min,max);
}
}
