转载自:博客园:https://www.cnblogs.com/Unity3Dqishituan/p/3965999.html

在研究了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游戏中的三连击效果了,我们一起来看看最终的效果吧!

Animator:ACT游戏三连击效果实现综述相关推荐

  1. [Unity3D]Unity3D游戏开发之ACT游戏三连击效果实现综述

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在研究了Unity3D Mecanim动画系统的重定向特性后,今天我们继续来探索Me ...

  2. shader 雪 顶点位移_游戏雪天效果·积雪的厚度

    序 天寒见白屋,风雪闻夜归 自古雪便是文学作品中必不可少的意象,在虚拟世界中,怎样制造一场万里雪飘,如何表现出一国千里冰封,是很多游戏都在试图实现的 关于雪天效果的实现,网易游戏的分享中已经写得很详尽 ...

  3. 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个可拖动的拼图游戏动画效果~适合初学者~超简单~ |it前端开发

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3+JavaScript制作一个可拖动的拼图游戏动画效果~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!D ...

  4. 我认为ACT游戏开发必用的程序设计模式!!!

    ACT游戏以它流畅的游玩体验.华丽的招式和炸裂的打击反馈被人所喜爱,那么在开发ACT游戏的时候如何做到这一点呢???这一篇博客就来说说我认为在开发ACT游戏过程中一定要用到的程序设计模式! 模式_1: ...

  5. 《鬼泣-巅峰之战》产品分析:如何将ACT游戏改编成ARPG手游 ​

    CAPCOM授权,云畅游戏自研的<鬼泣-巅峰之战>开始了第二次删档测试,在激活码一码难求的情况下,仅在TAPTAP上就有超过88万人预约了游戏.从官方公布的数据来看,测试首日玩家击杀的怪物 ...

  6. 关于arpg以及act游戏中怪物设定的一些思考

    简单总结一下自己关于ARPG游戏怪物设定的想法,放在这里,权当备忘,如有错误,还请斧正. 事实上,我认为对于ARPG游戏中怪物体制的思考,势必要关联到ACT游戏,作为RPG与ACT游戏结合的产物,如何 ...

  7. android 粒子动画,使用animator实现粒子动画效果

    1.前言 本文围绕着实现粒子放大效果,着重讲解android中涉及到动画缩放以及动画集的使用,并且会将讲解一些插值器相关的知识.阅读本文需要读者有一定的自定义View的基础知识,本文将不再讲解自定义V ...

  8. ACT游戏引擎设计及DEMO展示

    声明:这个DEMO中所用的图片来自己GL的游戏,只是为了学习研究之用,请下载测试过后把游戏删除.谢谢! 说明:这段时间工作不是很忙,利用业余时间把前两年在手机游戏公司的一些经验和积累做一个总结,写了这 ...

  9. 推荐12个Android开发源码(包括应用、游戏、效果等等)

    适用环境:Android 2.1 分享给给位初学者,当中有不错的效果值得学习收藏的哦~ 先上传12个经典源码~后续测试内容敬请期待~~~ 1.冒险类游戏:终极大逃亡 http://www.apkbus ...

最新文章

  1. python 控制库_python中实现自动化控制pyautogui库使用方法介绍
  2. 自定义拍照时 拍照界面_男子海边拍照时发现“金光闪闪”,走近查看后一夜暴富|戒指|沙土|包装膜...
  3. 2017-2018-2点集拓扑
  4. mysql update锁_mysql中update语句的锁
  5. HiveQL基本操作整理
  6. 提升.NET应用程序启动速度
  7. 微软开源的Web测试和自动化神器 Playwright
  8. 收藏网站制作常用经典css.div.布局.设计实例打包下载
  9. inputType属性
  10. 抛弃jQuery 深入原生的JavaScript
  11. 基于struts2、spring的应用闲置一段时间后报空指针错(转)
  12. LinkedList 真的是查找慢增删快?刷新你的认知!
  13. 【LeetCode】【字符串】题号:*14. 最长公共前缀
  14. 卡巴斯基授权key导入方式方法及其导入key基本原理
  15. 多媒体计算机涉及的关键技术有什么,多媒体计算机的关键技术
  16. CVE-2018-0798:Microsoft office 公式编辑器 Matrix record 字段栈溢出漏洞调试分析
  17. 知识图谱 语义网络,语义网,链接数据和知识图谱 (二)--基础篇
  18. python爬取ppt代码_Python爬取PPT模板小工具
  19. 华硕打开桌面计算机没有反应,华硕window10电脑打开就这样,进不去桌面,怎么处理...
  20. 华为matepad11无法连接mpencil2

热门文章

  1. 选股器用计算机测试利润,ROE+市盈率选股 上周使用计算公式:总得分=营业净利润率+资产负债率+市盈率,来筛选股票。 因为笔者不会计算机编程,在计算历年平均值的时候... - 雪球...
  2. prism EventAggregator(事件聚合器)
  3. 技术科普丨平台效果调试篇3-AWB Gain Adjust
  4. 作业十: 坦克对战游戏 AI 设计
  5. 关于Oralce OAM/OIM及与P6/Unifier 集成SSO的想法
  6. 暴风影音 彻底彻底无无广告广告
  7. FAQ:Docker和K8s部署常见问题汇总(持续更新)
  8. MySQL协议和canal实现
  9. Linux常见命令:与系统管理有关的命令(转)
  10. js中的console.log()用法