毕业设计的坑--关于动作游戏的mecanim动画系统详细设计(4)

习惯性吐槽一下,上一篇的mvc设计模式的背包文章感觉自己写的太水了,其中的缺陷是没有用到委托,而且写的不详细

==========上面都是吐槽下================

加下来讲讲我花了很多时间研究的mecanim动画系统的设计


现在分开3部分详细说下动画系统的设计

1、行走与静止不动的情况(默认状态)

行走状态是途中的NewWalk。是用blendtree实现的。其中改变的条件是根据speed的转变而混合过度到其他种动画状态。跑动与动画的站立状态的动画通过speed控制。


附送上代码上的控制,利用M按钮键提高速度动画的播放速度也会变快(这里的代码我删减的了很多,主要是说明下speed控制blend tree的变化)

    public void Control_pc() {
        if (animator)
        {
            //=================进行run动画播放===================
            float curSpeed;
            float vv = vertical * vertical;
            float hh = horizontal * horizontal;
            if (vv > hh)
            {
                curSpeed = vv;
            }
            else
            {
                curSpeed = hh;
            }
            animator.SetFloat("WalkSpeed", (curSpeed * runSpeedAni));//主要是这样设置速度然后控制动画



            if (animator.GetCurrentAnimatorStateInfo(0).IsName("NewWalk"))
            {
                //只在能默认的状态下才进行实际的移动
                //Debug.Log("oula角:" + camera.transform.rotation.eulerAngles.y);
                this.transform.LookAt(this.transform.position + targetDir);
                //Vector3 playerPostion = this.transform.position + targetDir;
                //Vector3 camarePostion = camera.transform.forward;
                //this.transform.LookAt(new Vector3(camarePostion.x, playerPostion.y, camarePostion.y));
                cc.SimpleMove(transform.forward * Time.deltaTime * animator.GetFloat("WalkSpeed") * speed);
            }

            //=================控制是否跑动的状态===================
            if (Input.GetKey(KeyCode.M))
            {
                runSpeedAni = runSpeedAniMax;
            }
            else
            {
                runSpeedAni = 1f;
            }
        }
    }


2、攻击重击与三连击 (按钮触发下的状态,由默认状态转过去的)


其中值的说明的是三连攻击的做法是利用到动画时间了event时间做到的


在里面那段时间内才可以触发下一个trigger。


还有一个值的注意的是,这里有几个配置很重要值的去看下

exit time打断时间(从哪一帧开始逐渐降低当前动画的权重)(exitTime 是百分比 0.9播放到90%的时候跳到下一个动作)

fixed duration固定持续时间(这其实是一个切换开关,切换是按照秒显示还是按照百分比显示)

transition duration过度持续时间 (过度有多长)

transitionoffset过度抵消(从下一个动画的什么位置开始播放)

interruption source中断来源。


附上代码

    public void OnAttackA() {
        if (animator.GetCurrentAnimatorStateInfo(0).IsName("Sword-Attack1") && attackBCombo == true)
        {
            animator.SetTrigger("Attack2");
        }
        else if (animator.GetCurrentAnimatorStateInfo(0).IsName("Sword-Attack2") && attackCCombo == true)
        {
            animator.SetTrigger("Attack3");
        }
        else{
            animator.SetTrigger("Attack1");
        }
    }


3、受伤动画与死亡动画(特殊状态下的转换,可打破前两种动画状态)


这种状态下的其实跟上个差不多 ,我就不详细介绍了


=====至此,mecanim还有一个强大的功能(上半身体与下半身体动画分开播放)==========

这个功能就是Cs走动+换枪的动画播放。别跟我说你没玩过CS


创建Avater Mask就可以了,操作跟那个什么的一毛一样,

animator.layerCount >= 2 //就这个很值的去看看

            if (Input.GetKeyDown(KeyCode.N) && animator.layerCount >= 2 && isCodingSkill1 == false)
            {
                //存在两个层的情况下
                isCodingSkill1 = true;
                animator.SetTrigger("Skill1");
            }


===========零散的注意下===========

apply root motion可以允许人物动画调节


这些设置都是关于动画状态是否控制transfrom的旋转个坐标的影响。

===================呼!一气呵成===================

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值