毕业设计的坑--关于动作游戏的mecanim动画系统详细设计(4)
来源:互联网 发布:知乎 扶她出去吧 编辑:程序博客网 时间:2024/06/01 10:26
习惯性吐槽一下,上一篇的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的旋转个坐标的影响。
===================呼!一气呵成===================
- 毕业设计的坑--关于动作游戏的mecanim动画系统详细设计(4)
- Unity3D之Mecanim动画系统学习笔记(十):Mecanim动画的资源加载相关
- [Unity3D]Unity4新的动画系统Mecanim
- unity的Mecanim动画系统基础教程
- Unity4新的动画系统Mecanim
- Unity4的Mecanim动画
- 毕业设计的坑--天气系统的设计(6)
- Mecanim动画系统(一)
- 阿赵的文章Mecanim动画系统入门
- C# FSM (仿Unity 中的Mecanim动画系统的状态机)
- [cnblogs镜像]Unity 动画系统(Mecanim)的组成结构
- MecAnim的动画融合功能
- Unity Mecanim动画的实现(七):动画曲线
- Unity Mecanim动画的实现(七):动画曲线
- Unity4.0动画系统(Mecanim)
- Unity4.0动画系统(Mecanim)
- Unity4.0动画系统(Mecanim)
- Unity4.0动画系统(Mecanim)
- C++抽象编程 Programming Abstracting in C++ 全书笔记(未完结)
- 密码学之DES算法
- node.js学习(十三、Buffer模块)
- CFile
- tera term和TTL脚本进行自动化控制
- 毕业设计的坑--关于动作游戏的mecanim动画系统详细设计(4)
- 计算机科学和编程导论-week2-简单算法
- kali Linux中安装谷歌中文输入法
- 关于C的小程序-3
- Android Arcgis入门(一) Arcgis开发配置
- javascript点击空白位置关闭弹出层/点击包含指定区域但不属于指定区域的部分响应点击事件
- [问题]第一行代码_生命周期_you need to use a theme.appcompat theme (or descendant) with this activity
- 学生管理系统
- 题目1188:约瑟夫环