zoukankan      html  css  js  c++  java
  • 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");

        }

    }

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

  • 相关阅读:
    计算机网络 概述
    ISO/ISO 参考模型 和 TCP/IP模型
    Elasticsearch 6.2.3版本 执行聚合报错 Fielddata is disabled on text fields by default
    Elasticsearch 6.2.3版本 filtered 报错问题 no [query] registered for [filtered]
    Elasticsearch 6.2.3版本 Windows环境 简单操作
    MyBatis 模糊查询
    常用正则表达式
    页面加载时的div动画
    Highcharts的一些属性
    highcharts去掉x轴,y轴,轴线以及刻度
  • 原文地址:https://www.cnblogs.com/yanbenxin/p/5786700.html
Copyright © 2011-2022 走看看