Unity3D实现摄像机镜头移动并限制角度
本文实例为大家分享了Unity3D实现摄像机镜头移动并限制角度的具体代码,供大家参考,具体内容如下
摄像机镜头跟随鼠标移动,并限制上下左右的移动角度
publicclassViewFromCream:MonoBehaviour
{
publicintspeed=5;
publicVector3vect;
privatefloatxcream;
privatefloatycream;
publicvoidUpdate()
{
CreamView();
}
privatevoidCreamView()
{
floatx=Input.GetAxis("MouseX");
floaty=Input.GetAxis("MouseY");
if(x!=0||y!=0)
{
LimitAngle(60);
LimitAngleUandD(60);
this.transform.Rotate(-y*speed,0,0);
this.transform.Rotate(0,x*speed,0,Space.World);
}
}
///
///限制相机左右视角的角度
///
///角度
privatevoidLimitAngle(floatangle)
{
vect=this.transform.eulerAngles;
//当前相机x轴旋转的角度(0~360)
xcream=IsPosNum(vect.x);
if(xcream>angle)
this.transform.rotation=Quaternion.Euler(angle,vect.y,0);
elseif(xcream<-angle)
this.transform.rotation=Quaternion.Euler(-angle,vect.y,0);
}
///
///限制相机上下视角的角度
///
///
privatevoidLimitAngleUandD(floatangle)
{
vect=this.transform.eulerAngles;
//当前相机y轴旋转的角度(0~360)
ycream=IsPosNum(vect.y);
if(ycream>angle)
this.transform.rotation=Quaternion.Euler(vect.x,angle,0);
elseif(ycream<-angle)
this.transform.rotation=Quaternion.Euler(vect.x,-angle,0);
}
///
///将角度转换为-180~180的角度
///
///
///
privatefloatIsPosNum(floatx)
{
x-=180;
if(x<0)
returnx+180;
elsereturnx-180;
}
}
对IsPosNum方法进行说明
之所以要将获取的欧拉角转换为-180°-180°之间,是因为在获取eulerAngle中,x轴和y轴的值只有0-360,而没有负数,那么这将会复杂化我们角度的判断,如限制左右角度为-60-60之间,那么我们就要判断角度是否超过300度或是超过60度,显然超过300度的角度必定超过60度,那么就需要另外加条件进行判断;因此对获取的值进行转化更为方便!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。