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

        }

    }

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

  • 相关阅读:
    ASP.NET MVC —— Model之一模型模板
    【转】METADATATYPE的使用,MVC的MODEL层数据验证
    bootstrap 全局 CSS 样式
    jQuery EasyUI API 中文文档
    基础知识--:before伪元素和:after伪元素
    960CSS框架,之前有用过 了解下框架基本原理
    CSS框架960Grid从入门到精通一步登天
    web网页的表单排版利器--960css
    文本编辑器Nano实用快捷键
    yum服务器设置
  • 原文地址:https://www.cnblogs.com/yanbenxin/p/5786700.html
Copyright © 2011-2022 走看看