Unity3d

前期工程通过射线检测已经实现了点击地面生成点击效果,以及角色朝向点击方向的功能,本期总结为角色的移动。

角色的移动分为两步实现:①角色的移动;②角色播放移动动画。

一、角色的移动

前期工程已经实现了朝向点击方向,则现在只需要让角色向前移动即可。脚本如下:

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");

    }

}

这样就实现了角色的移动及动画的播放,本日总结到此为止。

原文地址:https://www.cnblogs.com/yanbenxin/p/5786700.html