using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CamerGenSui : MonoBehaviour
{
//鼠标敏感度
public float MingGanDuMouse = 2f;
//目标人物transform
public Transform target;
//观察距离
public float Distance = 5f;
//旋转角度
float mX = 0f;
float mY = 0f;
//角度限制
float MinLimity = 5;
float MaxLimity = 180;
//是否启用差值
public bool isNeedDamping = true;
//速度阻力
public float Damping = 2.5f;
void LateUpdate()
{
// 获取鼠标输入
mX += Input.GetAxis("Mouse X") * MingGanDuMouse ;
mY -= Input.GetAxis("Mouse Y") * MingGanDuMouse ;
// 范围限制
mY = FanWeiXianZhi(mY,MinLimity,MaxLimity);
// 重新计算相机位置和角度
//相机角度,欧拉角
Quaternion mRotation = Quaternion.Euler(mY,mX,0);
//角度*V3=位置,再加角色位置
Vector3 mPosition = mRotation * new Vector3(0f, 2f, -Distance) + target.position;
// 设置相机的位置和角度
if(isNeedDamping){
//球形差值
transform.rotation = Quaternion.Slerp(transform.rotation,mRotation,Time.deltaTime*Damping);
//线性差值
transform.position = Vector3.Lerp(transform.position,mPosition,Time.deltaTime*Damping);
}
else
{
transform.rotation = mRotation;
transform.position = mPosition;
}
}
float FanWeiXianZhi(float y,float min, float max)
{
//处理一下转圈后,只保留去掉整圈后的角度
if (y < -360)
{
y = y + 360;
}
if (y > 360)
{
y = y - 360;
}
//返回y或min或max值
return Mathf.Clamp(y,min,max);
}
}
大伟 Unity3D 实现相机跟随 和 视角控制
最新推荐文章于 2022-10-26 12:12:33 发布