yyj469367953 发表于 2015-1-14 18:14

关于角色三连击

今天在蛮牛教育学习群里(390835120)我们讨论了 一个关于三连击的实现方法经过指点 有了想法决定 实验下 小白在这里也拿来跟大家分享下共同学习么嗯 我们来拿这个壮汉实验一下吧 图1 首先 我们要先研究下 他的动作关系 这个角色的动作有idle attack1 attack2attack3 jumprun    那么我们要使用 unity 新动画系统的 Animator Controller 来进行 动画的连接创建一个Animator Controller 把咱用到的动画 都拖进去吧 idle 设为默认动画 然后咱就开始连连看吧 三连击击肯定是idle--->attack1--->attack2--->attack3这个套路   然后这3个攻击到哪攻击一定时间不操作了肯定 就会放回idle 状态所以需要 这么连接图2 连好后 我需要 拿脚本 来控制他们的切换需要 一个变量我们来建立一个attack 个int 变量 给那些线 添加这个变量   Idle 到 attack1   Int 值为 1attack1到 attack2   Int 值为 2Attack2到 attack3   Int 值为 3attack1attack2attack3返回 idle    int 都为 0 好了 这样 就可以拿这个变量控制啦 下面开始 写脚本 调用 动画什么的就不说啦直接说重点三连击 核心就是 拿时间判断 你在这段时间内让没让我做出下一个动作那么 怎么获取动画 时间之类的呢    我们可以用 animSta=anim.GetCurrentAnimatorStateInfo (0);来获取动画信息 这样 就可以 用 它里面 的is name判断 现在 哪个动画名下面, 用 normalizedTime 来判断 动画 时间 剩下的 就是条件判断咯代码如下

using UnityEngine;
using System.Collections;

public class play_Move : MonoBehaviour {

        public float playSpeed=1;
        public float rotspeed=1;
        public Animator anim;
        public AnimatorStateInfo animSta;
        private const string IdleState="idle";
        private const string Attack1State="attack1";
        private const string Attack2State="attack2";
        private const string Attack3State="attack3";
        private int HitCount=0;
        public float jumpli=10;
        void Start () {
                anim = this.gameObject.GetComponent<Animator> ();
          
                anim.SetBool ("move", false);
                anim.SetBool ("attack", false);
                anim.SetBool ("attackBack", false);
                anim.SetBool ("jump", false);
                HitCount=0;
        }
       

        void Update () {
                move ();
                animSta=anim.GetCurrentAnimatorStateInfo (0);
                if (!animSta.IsName (IdleState) && animSta.normalizedTime > 1.0f) {
                        anim.SetInteger("attack",0);
                       HitCount=0;
                        }

                if (Input.GetMouseButton (0)) {
                               
                        attack();
                }

                if (Input.GetKey (KeyCode.Space)) {
                                anim.SetBool ("jump", true);               
                                } else {
                           anim.SetBool ("jump",false);       
                }

        }

        void move(){

                float hor = Input.GetAxis ("Horizontal");
                float ver = Input.GetAxis ("Vertical");
                transform.Translate (0, 0, ver * playSpeed * Time.deltaTime);
                transform.Rotate (0, hor*rotspeed*Time.deltaTime, 0);
                if (ver != 0) {
                        anim.SetBool ("move", true);               
                } else {
                        anim.SetBool ("move", false);

                }
       
       
       
        }

        void attack(){
                if (animSta.IsName (IdleState) && HitCount == 0 && animSta.normalizedTime > 0.50f) {
                                               anim.SetInteger ("attack", 1);
                                               HitCount = 1;
                                   Debug.Log("cc");
                                } else
                if (animSta.IsName (Attack1State) && HitCount == 1 && animSta.normalizedTime > 0.65f) {
                                                anim.SetInteger ("attack", 2);               
                                                HitCount = 2;
                                } else
                if (animSta.IsName (Attack2State) && HitCount == 2 && animSta.normalizedTime > 0.70f) {
                                anim.SetInteger ("attack", 3);               
                                HitCount = 3;
               
                }

        }



}


秀才 发表于 2015-4-4 10:19

赞一下,支持

NeoWen 发表于 2017-2-23 16:25


感谢楼主的无私分享!

weisen 发表于 2017-3-11 12:05

很不错

yu_zhang 发表于 2017-3-11 12:41

顶顶多好

kemi5200 发表于 2017-3-11 11:53

真心顶

adamzz 发表于 2017-3-11 12:06

难得一见的好帖

pincers 发表于 2017-3-11 12:08

说的非常好

dawn 发表于 2017-4-30 18:02

很不错

starwallace 发表于 2017-4-30 18:39

楼主是超人
页: [1]
查看完整版本: 关于角色三连击