usingUnityEngine;
publicclassPlayerMovement:MonoBehaviour
{
publicfloatspeed=6f;//玩家移动速度
Vector3movement;//定位玩家移动方向
Animatoranim;//引用动画组件
RigidbodyplayerRigidbody;//引用玩家刚体
intfloorMask;//建立遮罩层使射线只能作用在地面上
floatcamRayLength=100f;//射线长度
voidAwake()
{
//为地板层创建一个遮罩层
floorMask=LayerMask.GetMask("Floor");
//获取动画和刚体组件
anim=GetComponent();
playerRigidbody=GetComponent();
}
voidFixUpdate()
{
//输入坐标
floath=Input.GetAxisRaw("Horizontal");
floatv=Input.GetAxisRaw("Vertical");
//使角色在场景中行走
Move(h,v);
//使角色跟着鼠标转动
Turning();
//角色动画
Animating(h,v);
}
voidMove(floath,floatv)
{
//建立坐标轴中的底部坐标
movement.Set(h,0f,v);
//规范化坐标向量,使速度每秒成正比增加向量标准化:0~1或某个范围内,再乘以速度
movement=movement.normalized*speed*Time.deltaTime;
//
playerRigidbody.MovePosition(transform.position+movement);
}
//角色坐标
playerRigidbody.MovePosition(transform.postion+movement);
}
voidTurning()
{
//建立物理射线,获取鼠标坐标
Ray camRay=Camera.main.ScreenPointToRay(Input.mousePosition);
//射线打到地面
RaycastHit floorHit;
//如果射线打到物体,并且物体属于floormask层
if(Physics.Raycast(camRay,outfloorHit,1000,floorMask))
{
//获取鼠标点到地面上的点和人物当前坐标之间的向量差
Vector3 playerToMouse=floorHit.point-transform.position;
//设置差值的y轴角度为0
playerToMouse.y=0f;
//计算角度
Quaternion newRotation=Quaternion.LookRotation(playerToMouse);
//赋值给人物
playerRigidbody.MoveRotation(newRotation);
}
}
voidAnimating(floath,floatv)
{
//
boolwalking=h !=0f|| v !=0f;
//
Animator.SetBool("IsWalking",walking);
}
}//End