前期工程通过射线检测已经实现了点击地面生成点击效果,以及角色朝向点击方向的功能,本期总结为角色的移动。
角色的移动分为两步实现:①角色的移动;②角色播放移动动画。
一、角色的移动
前期工程已经实现了朝向点击方向,则现在只需要让角色向前移动即可。脚本如下:
Name Space PlayerMove
private CharacterController playercontroller; //生命角色控制器,并调用角色的CharacterController组件
private PlayerDirection dir; //上期工程控制角色朝向的脚本
private float speed; //设定角色移动速度
void Start( )
{
playercontroller = GetComponent<CharacterController>(); //获取角色的控制器组件
dir = GetComponent<PlayerDirection>(); //获取角色的PlayerDirection脚本组件
speed = 4; //设定角色移动速度为4
}
Void Update()
{
float distance = Vector3.Distance( dir.targetPosition,tranform.position ); //获取目标地点与当前位置的距离
if( distance > 0.5f ) //设定距离判断范围,注:范围需要设定精准
{
playercontroller.SimpleMove( transform.forward.*speed); //这样角色就可以正常移动了
}
}
二、角色移动动画的播放
上述脚本实现了角色模型的平移,现在需要给角色加入移动动画的控制。
首先在角色移动脚本中加入移动状态控制标示位,更新脚本如下:
Name Space PlayerMove
public enum PlayerState //声明枚举,为枚举添加角色状态成员
{
Moving,Idle
}
private CharacterController playercontroller;
private PlayerDirection dir;
private float speed;
public PlayerState state; //调用枚举,作为角色状态标示位
void Start( )
{
playercontroller = GetComponent<CharacterController>();
dir = GetComponent<PlayerDirection>();
speed = 4;
state = PlayerState.Idle; //开始状态赋值为Idle
}
Void Update()
{
float distance = Vector3.Distance( dir.targetPosition,tranform.position );
if( distance > 0.5f )
{
state = PlayerState.Moving; //满足移动条件时,切换为Moving状态
playercontroller.SimpleMove( transform.forward.*speed);
}
else
{
state = PlayerSate.Idle; //不满足移动条件时,切换为Idle状态
}
}
上述脚本尽管确定了标示位的状态,但是还是没有实现播放动画的功能,那么我们只需要创建动画播放脚本驱动角色改进就可以了,脚本如下:
nameSpace PlayerAnimation
private Animation playerAnimation;
private PlayerMove playermove;
void Start( )
{
playerAnimation = GetComponent<Animation>( );
plyaermove = GetComponet<PlayerMove>( );
}
void PlayAnim( string animName )
{
playerAniamtion.CrossFame( animName );
}
void LateUpdate( )
{
if( playermove.state == PlayerState.Moving )
{
PlayAnim("Run");
}
else if( playermove.state == PlayerSatete.Idle )
{
PlayAnim("Idle");
}
}
这样就实现了角色的移动及动画的播放,本日总结到此为止。