Unity3D游戏开发之自由视角下的角色控制.doc
上传人:qw****27 上传时间:2024-09-11 格式:DOC 页数:23 大小:9MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

Unity3D游戏开发之自由视角下的角色控制.doc

Unity3D游戏开发之自由视角下的角色控制.doc

预览

免费试读已结束,剩余 13 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Unity3D游戏开发之自由视角下的角色控制今天呢,继续来探讨Unity3D角色控制的内容,自由视角是指玩家可以按照自身坐标系向着四个不同的方向移动,当玩家按下鼠标右键时,可以绕Y轴按照一定的角度旋转摄像机,在旋转的过程中,角色将旋转相应的角度。在移动的过程中,摄像机会保持与玩家间的一定距离,然后跟随角色进行移动。好了,下面我们正式开始今天的内容吧!在开始今天的内容前,首先让我们来学习下Unity3D中较为重要的一部分知识,理解这些知识是我们开始学习今天内容的基础。1、Input.GetAxis():该方法用于在Unity3D中根据坐标轴名称返回虚拟坐标系中的值,通常情况下,使用控制器和键盘输入时此值范围在-1到1之间。这段话怎么理解呢?我们来看下面这段脚本:usingUnityEngine;usingSystem.Collections;publicclassexample:MonoBehaviour{//水平速度publicfloatHorizontalSpeed=2.0F;//垂直速度publicfloatVerticalSpeed=2.0F;voidUpdate(){//水平方向floath=HorizontalSpeed*Input.GetAxis("MouseX");//垂直方向floatv=VerticalSpeed*Input.GetAxis("MouseY");//旋转transform.Rotate(v,h,0);}}这段脚本呢是根据鼠标的位置来旋转物体从而实现对物体的观察,从这段脚本中我们可以看出,通过获取输入轴的办法,我们可以获得鼠标移动的方向进而实现对于物体的旋转控制。在Unity3D中我们可以通过Edit->ProjectSetting->Input来查看项目中的坐标轴名称:在后面,我们还将使用这种方式,大家可以对这个方法有进一步的了解。2、欧拉角eulerAngles:该值是Vector3类型的值,x、y、z分别代表绕x轴旋转x度,绕y轴旋转y度,绕z轴旋转z度。因此,该值最为直观的形式是可以允许我们直接以一个三维向量的形式来修改一个物体的角度,例如下面的脚本:[html]viewplaincopyfloatmY=5.0;voidUpdate(){mY+=Input.GetAxis("Horizontal");transform.eulerAngles=newVector3(0,mY,0);}如果你已经理解了上面的话,那么不出意外的,这段脚本会如你所愿的,按照鼠标在水平方向上移动的方向绕Y轴旋转。通常情况下,我们不会单独设置欧拉角其中一个轴,例如eulerAngles.x=10,因为这将导致偏移和不希望的旋转。当设置它们一个新的值时,要同时设置全部。好在我们可以通过Quaternion.Euler()方法将一个Vector3类型的值转化为一个四元数,进而通过修改Transform.Rotation来实现相同的目的。3、插值:所谓插值是指在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。在某些情况下,如果我们希望过程中处理得较为平滑,此时我们就可以使用插值的方法来实现对中间过程的模拟。在Unity3D中我们可以使用两种插值方法,即线性插值Lerp,球形插值SLerp。我们来看下面的脚本:voidRotating(floathorizontal,floatvertical){//Createanewvectorofthehorizontalandverticalinputs.Vector3targetDirection=newVector3(horizontal,0f,vertical);//Createarotationbasedonthisnewvectorassumingthatupistheglobalyaxis.QuaterniontargetRotation=Quaternion.LookRotation(targetDirection,Vector3.up);//Createarotationthatisanincrementclosertothetargetrotationfromtheplayer'srotation.QuaternionnewRotation=Quaternion.Lerp(rigidbody.rotation,targetRotation,turnSmoothing*Time.deltaTime);//Changetheplay