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

        }

    }

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

  • 相关阅读:
    P1642 规划 [01分数规划]
    01分数规划学习笔记
    P1527 [国家集训队]矩阵乘法 [整体二分]
    P3292 [SCOI2016]幸运数字 [线性基+倍增]
    java中遍历集合的三种方式
    20190706中兴提前批专业面面经
    《java入门如此简单》——语句,函数和数组
    java中数组常见的操作
    2019 波克城市ava面试笔试题 (含面试题解析)
    2019 华云数据java面试笔试题 (含面试题解析)
  • 原文地址:https://www.cnblogs.com/yanbenxin/p/5786700.html
Copyright © 2020-2023  润新知