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度,那么就需要另外加条件进行判断;因此对获取的值进行转化更为方便!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。