Unity简单的实现动画三连击脚本
2016-01-27 20:05
746 查看
思路讲解
三连击动作动画状态转换关系如下(1)Idle->Attack1->Idle
(2)Idle->Attack1->Attack2->Idle
(3)Idle->Attack1->Attack2->Attack3->Idle
很容易理解,实现上述动画状态转换即完成了三连击。
本次才用Animator Controller来实现上述转换。
具体实现
首先介绍一下normalizedTime
这个是animator的属性 其value的小数部分代表播放动画的完成度,及播放了百分之几的动画。其次在介绍状态结束后冲突
例如现在为状态1,当两条线路条件同时满足该如何选择,是转到状态2,还是沿另一条线转向idle。
再来看下这幅图
看到那个84%了吗 可以通过用鼠标点击向右的三角,显示拖动改变。即第一个动画进行到84%,第二个动画开始。
同理这个是90%,可以理解了吧。
这是状态1向两个状态转换,若条件同时成立转向小的,即84%。
所以把非转向idle的值调小些即可。
条件设置用一个interger attack 和 trigger attack1来控制。
第一个条件为 触发attack1(注意没有等于)
第二个条件为 attack=2
第三个条件为 attack=3
以上为连击顺序,返回idle状态的条件为无;
anim.SetInteger(“attack”,1);
这并不直接控制状态只是起一个防止第二攻击动画自动播放,所以要设置一个非2的值,本次设为1。
static int attack1State = Animator.StringToHash("Base Layer.attack1.1"); static int attack2State = Animator.StringToHash("Base Layer.attack1.2"); static int attack3State = Animator.StringToHash("Base Layer.attack1.3"); void Attack1() { if( currentBaseState.fullPathHash == idleState) { if (!anim.IsInTransition(0)) { anim.SetTrigger("attack1"); anim.SetInteger("attack",1); } } else if(currentBaseState.fullPathHash==attack1State && currentBaseState.normalizedTime>0.5) { anim.SetInteger("attack", 2); } else if (currentBaseState.fullPathHash == attack2State && currentBaseState.normalizedTime > 0.5) { anim.SetInteger("attack", 3); } else if (currentBaseState.fullPathHash==attack3State) { print("PL**************************************PL"); } }
相关文章推荐
- Shell 脚本编程陷阱
- VBS脚本写的Windows硬件检测工具分享
- 用vbscript实现隐藏任务栏图标的脚本
- 用autoit编写第一个脚本(Hello World)
- VBS调用WMI快速关闭IE的脚本
- Oracle数据库执行脚本常用命令小结
- 收集的ROS防火墙脚本
- JSP脚本漏洞面面观
- 不错的批处理脚本 第一部分
- VBS脚本加密/解密VBS脚本(简易免杀版1.1)
- 不错的批处理脚本实例代码 第二部分
- 使用脚本和批处理清除电脑中的痕迹的代码第1/2页
- 让你的脚本说话
- Lua脚本获取喜马拉雅MP3音频地址
- SQL Server中数据行批量插入脚本的存储实现
- 编程界主流脚本编程语言的比较和选择
- 批量文件查找替换功能的vbs脚本
- Powershell脚本的4种执行权限介绍
- Windows Powershell 执行文件和脚本