zoukankan      html  css  js  c++  java
  • 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游戏中的三连击效果了,我们一起来看看最终的效果吧!

  • 相关阅读:
    tensorflow2.0 GPU和CPU 时间对比
    第一次使用FileZilla Server
    PremiumSoft Navicat 15 for Oracle中文破解版安装教程
    Unmapped Spring configuration files found. Please configure Spring facet or use 'Create Default Context' to add one including all unmapped files.
    ng : 无法加载文件 D: odejs ode_global g.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
    angular
    Github上优秀的go项目
    win10---file explore 中remove quick access folder
    react--useEffect使用
    linux---cat 和 grep 的妙用
  • 原文地址:https://www.cnblogs.com/Unity3Dqishituan/p/3965999.html
Copyright © 2011-2022 走看看