• Unity3D游戏开发之ACT游戏三连击效果实现综述


    在研究了Unity3D Mecanim动画系统的重定向特性后,今天我们继续来探索Mecanim动画系统更多的特性吧。今天狗刨网想和大家分享的是ACT游戏中的三连击效果的实现,由于Unity3D目前存在Animation和Animator两种类型的动画组件,因此本文将分别讲这两种类型的动画组件的三连击效果的实现,其中Animation组件是Unity3.5以下版本所使用的动画组件,Animator组件是目前Unity3D的Mecanim动画系统所使用的动画组件。
    我们首先来了解三连击效果的具体流程,假定角色当前处于Idle状态,此时玩家如果按下攻击键则进入Attack1状态,如果在规定的时间内,玩家继续按下攻击键则进入Attack2状态,否则返回到Idle状态;同理,如果角色处于Attack2状态,如果此时玩家按下攻击键则进入Attack3状态,否则返回Idle状态;当Attack3状态结束后,将返回到Idle状态,等待玩家触发下一次攻击。由此我们可以归纳出三连击的状态变化:
    (1)Idle->Attack1->Idle
    (2)Idle->Attack1->Attack2->Idle
    (3)Idle->Attack1->Attack->Attack3->Idle
           通过状态变化情况我们可以考虑使用两种思路来实现三连击效果。第一种思路是,各状态动画相互独立,通过状态切换来实现整体的动画效果。第二种思路是,美工人员将各状态动画以序列形式,程序设计人员根据时间来控制动画效果。今天我们主要采用第一种方法,目的是领会游戏设计中的有限状态机思想,将其更好的应用到游戏开发中。好了,下面我们正式开始今天的内容吧!

     

    更多精彩请到http://www.gopedu.com/

             一、Animator组件篇

            Animator组件是Unity3D的Mecanim动画系统所使用的动画组件。这个组件通过Animator Controller来实现对动画的控制。如图是我们今天项目的主角,一个左手持盾,右手持剑的女战士。

     

     

        我们首先来创建一个Animator Controller并将其命名为SwordGirlController,双击打开Animator窗口,按照我们对状态变化情况的讨论,我们可以很容易地设计出下面的状态模型:

     

        在这里我们定义一个整型变量ActionID,其默认值为0。当ActionID的值为1时角色由Idle切换到Attack1,当ActionID的值为2时角色由Attack1切换到Attack2,当ActionID为3时角色由Attack2切换到Attack3。所有的指向Idle的连线的切换条件是ActionID的值为0。这样我们就建立了一个动画切换的状态模型。好了,下面我们来编写脚本实现对动画的控制:

    [csharp] view plaincopyprint?

    1.     //基于Mecanim动画系统的三连击效果,目前最大的问题就是玩家在攻击后无法  

    2.     //自动恢复到Idle状态,需要执行一次攻击才可以回到Idle状态  

    3.       

    4.     using UnityEngine;  

    5.     using System.Collections;  

    6.       

    7.     public class SwordGirlScript : MonoBehaviour {  

    8.       

    9.         //Mecanim动画组件  

    10.      private Animator mAnimator=null;  

    11.      //动画状态信息  

    12.      private AnimatorStateInfo mStateInfo;  

    13.      //定义状态常量值,前面不要带层名啊,否则无法判断动画状态  

    14.      private const string IdleState="Idle";  

    15.      private const string Attack1State="Attack1";  

    16.      private const string Attack2State="Attack2";  

    17.      private const string Attack3State="Attack3";  

    18.    

    19.      //定义玩家连击次数  

    20.      private int mHitCount=0;  

    21.        

    22.      void Start ()   

    23.      {  

    24.          //获取动画组件  

    25.          mAnimator=GetComponent<Animator>();  

    26.          //获取状态信息  

    27.          mStateInfo=mAnimator.GetCurrentAnimatorStateInfo(0);  

    28.      }  

    29.    

    30.      void Update ()   

    31.      {  

    32.          //如果玩家处于攻击状态,且攻击已经完成,则返回到Idle状态  

    33.          if(!mStateInfo.IsName(IdleState) && mStateInfo.normalizedTime>1.0F)  

    34.          {  

    35.              mAnimator.SetInteger("ActionID",0);  

    36.              mHitCount=0;  

    37.          }  

    38.          //如果按下鼠标左键,则开始攻击  

    39.          if(Input.GetMouseButton(0))  

    40.          {  

    41.              Attack();  

    42.          }  

    43.      }  

    44.    

    45.      void Attack()  

    46.      {  

    47.         //获取状态信息  

    48.         mStateInfo=mAnimator.GetCurrentAnimatorStateInfo(0);  

    49.         //如果玩家处于Idle状态且攻击次数为0,则玩家按照攻击招式1攻击,否则按照攻击招式2攻击,否则按照攻击招式3攻击  

    50.         if(mStateInfo.IsName(IdleState) && mHitCount==0 && mStateInfo.normalizedTime>0.50F)  

    51.         {  

    52.            mAnimator.SetInteger("ActionID",1);  

    53.            mHitCount=1;  

    54.         }else if(mStateInfo.IsName(Attack1State) && mHitCount==1 && mStateInfo.normalizedTime>0.65F)  

    55.         {  

    56.            mAnimator.SetInteger("ActionID",2);  

    57.            mHitCount=2;  

    58.         }else if(mStateInfo.IsName(Attack2State)&& mHitCount==2 && mStateInfo.normalizedTime>0.70F)  

    59.         {  

    60.            mAnimator.SetInteger("ActionID",3);  

    61.            mHitCount=3;  

    62.          }  

    63.      }  

    64.  }  

          这样我们就可以实现ACT游戏中的三连击效果了,我们一起来看看最终的效果吧!

  • 相关阅读:
    试题 历届试题 整数拼接(数位dp)
    试题 历届试题 波动数列(dp)
    序列化二叉树(模拟)
    对于maven中无法加载类路径下的配置文件
    [蓝桥杯][算法训练]文章翻转
    [蓝桥杯][算法训练] 无权最长链
    [蓝桥杯][基础训练]2n皇后问题
    蓝桥杯 基础练习——Huffuman树
    蓝桥杯 基础练习——高精度加法
    蓝桥杯 基础练习——阶乘计算
  • 原文地址:https://www.cnblogs.com/Unity3Dqishituan/p/3965999.html
Copyright © 2020-2023  润新知