Unity3D技术学习之自由视角下的角色控制Word文件下载.docx
- 文档编号:15319412
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:11
- 大小:4.23MB
Unity3D技术学习之自由视角下的角色控制Word文件下载.docx
《Unity3D技术学习之自由视角下的角色控制Word文件下载.docx》由会员分享,可在线阅读,更多相关《Unity3D技术学习之自由视角下的角色控制Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
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度。
因此,该值最为直观的形式是可以允许我们直接以一个三维向量的形式来修改一个物体的角度,例如下面的脚本:
floatmY=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);
//Changetheplayersrotationtothisnewrotation.
rigidbody.MoveRotation(newRotation);
插值的方法很简单,只要我们给出初始和结束的状态、时间就可以了,大家可以自己看API。
好了,有了这三部分的基础,我们就可以开始今天的内容了,今天的脚本分为两个部分,第一部分是角色控制的部分,主要负责的角色在场景中的移动、转身和动画处理。
第二部分是相机控制的部分,主要涉及相机旋转、相机缩放的相关内容。
下面,我们分别来讲这两个部分,场景依然是博主自己在做的小游戏:
本次的主角呢,是博主非常喜欢的角色谢沧行,好了,我们回到今天的内容里吧!
在第一部分,主要的是完成角色向各个方向的转身,这里博主定义四个方向(其实八个方向是一样的!
),脚本如下:
publicclassNoLockiVew_Player:
/*自由视角下的角色控制*/
/*作者:
秦元培*/
//玩家的行走速度
publicfloatWalkSpeed=1.5F;
//重力
publicfloatGravity=20;
//角色控制器
privateCharacterControllermController;
//动画组件
privateAnimationmAnim;
//玩家方向,默认向前
privateDirectionTypemType=DirectionType.Direction_Forward;
[HideInInspector]
//玩家状态,默认为Idle
publicPlayerStateState=PlayerState.Idle;
//定义玩家的状态枚举
publicenumPlayerState
Idle,
Walk
//定义四个方向的枚举值,按照逆时针方向计算
protectedenumDirectionType
Direction_Forward=90,
Direction_Backward=270,
Direction_Left=180,
Direction_Right=0
voidStart()
//获取角色控制器
mController=GetComponent<
CharacterController>
();
//获取动画组件
mAnim=GetComponentInChildren<
Animation>
voidUpdate()
MoveManager();
//MouseEvent();
//玩家移动控制
voidMoveManager()
//移动方向
Vector3mDir=Vector3.zero;
if(mController.isGrounded)
{
//将角色旋转到对应的方向
if(Input.GetAxis("
Vertical"
)==1)
{
SetDirection(DirectionType.Direction_Forward);
mDir=Vector3.forward*Time.deltaTime*WalkSpeed;
mAnim.CrossFade("
Walk"
0.25F);
State=PlayerState.Walk;
}
)==-1)
SetDirection(DirectionType.Direction_Backward);
SetDirection(DirectionType.Direction_Left);
SetDirection(DirectionType.Direction_Right);
//角色的Idle动画
)==0&
&
Input.GetAxis("
)==0)
Idle"
State=PlayerState.Idle;
}
//考虑重力因素
mDir=transform.TransformDirection(mDir);
floaty=mDir.y-Gravity*Time.deltaTime;
mDir=newVector3(mDir.x,y,mDir.z);
mController.Move(mDir);
//设置角色的方向,有问题
voidSetDirection(DirectionTypemDir)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Unity3D 技术 学习 自由 视角 角色 控制