




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在上一篇,我们介绍了有关Animation这个类中的部分方法,我后来想了想,这么介绍也不是个办法(其实有些方法我自己也没用过),该介绍点实际的东西了,毕竟我们是要做东西出来的。那好,我们就开始吧。 该文章出自【狗刨学习网】 首先我们要介绍的主题是:Animation Blending ,即动画融合。我们来看官方文档上的描述: 用我自己的理解就是:在现今的游戏中,动画融合是一个必不可少的特性用以让你的的角色能够产生平滑的动画。动画设计师首先为角色创建了一些个动画片段,例如一个行走循环,跑步循环,还有站立或射击的。在你运行游戏期间,你需要从站立的动画状态转换到行走的动画状态并且看上去要足够平滑,不能突然跳转。 此时我们就需要 有一种处理方式来完成我们所想要实现的效果。这就是“动画融合”的用处。在Unity中,一个角色可以有多种不同的动画片段,Unity可以将这些动画片段融合起来并以一种组件的形式(即Animation)进行管理,并根据具体情形来比如脚本来生成最终的动画。看来我们其实一直在运用“动画的融合”。size=12.8000001907349px 那么我们来看一个例子吧,我就选官方的CharacterAnimation里的goober为例,直接给出代码:1.2. using UnityEngine;3. using System.Collections;4.5. public class SuperMarioAnimation : MonoBehaviour 6. 7. public float landBounceTime = 0.6f;/该动画在0播放到60%时之后立即结束,应该是后来根据主角在空中滞留的时间而调整的。8. 9. private AnimationState lastJump;/存储“jump”的动画状态10. / Use this for initialization11. void Start () 12. 13. animation.wrapMode = WrapMode.Loop;/首先设置所有的动画片段播放时的播放模式为循环播放模式,之后我们也可以修改单个动画片段播放时的循环模式,比如此函数最后一行。14.15. AnimationState jump = animationjump;/暂存“jump”的动画状态,记住,是暂存。仅仅只是用于下面三行代码中的动画设置。16.17. jump.layer = 1 ;/设置动画状态jump的动画层值为1,相对于默认层级值要高,为的是有更多的优先级取得动画权重。18.19. jump.enabled = false;/暂停该动画的播放,这个我会在后面进行相应的讲解,因为它有其独特的应用情景。20.21. jump.wrapMode = WrapMode.Clamp;/设置动画状态jump的循环模式为Once(单次,上一篇已经证明了)循环。22. 23. 24. void Update () 25. SuperMarioController marioController = gameObject.GetComponent();26. /取得该角色的SuperMarioController脚本组件。 27.28. float currentSpeed = marioController.GetSpeed();29. /每帧获取该角色的速度并存储在临时变量currentSpeed里。30. 31. if(currentSpeed 0.1)/以速度判断该播放何种动画,淡入淡出效果的核心就在这里32. animation.CrossFade(walk);33. /如果当前正在播放某个动画片段,那么淡出它,淡入名为“Walk”的动画。34. else35. animation.CrossFade(idle);36. 37. 38. if(marioController.IsJumping()/如果此时goober(我们的主角)还在跳跃39. if(lastJump.time landBounceTime)/如果goober的跳跃动画播放了60%之后40. lastJump.speed = 0.0f;/让这个动画状态从头开始播放。41. 42. 43. 44. 45. public void DidJump()/SendMessage方法调用的,在goober跃起时执行46. /lastJump = animation.CrossFadeQueued(Move,0.3f,QueueMode.PlayNow);47. lastJump = animation.CrossFadeQueued(jump, 0.3f, QueueMode.PlayNow);48. 49. 50.51. public void DidLand()/SendMessage方法调用的,在goober着地时执行52. 53. lastJump.speed = 1;/将当前播放的动画lastJump的帧数调到最后。54. 55. 56. 复制代码 注意,要想理解好这段代码,我们必须结合另外一个加在goober上的脚本:SuperMarioController。这个例子里面出现了我们之前提到的一个非常重要的类:AnimationState,即动画状态,还涉及到了动画层的概念。所谓动画层,即AnimationState.layer,AnimationState这个类中的一个很重要的属性。在Unity的动画体系中,默认情况下,所有动画状态的layer值为0,你可以在脚本中动态的调节该动画状态的layer值。如上代码,我们在unity3d中点击运行按钮,我们什么都不做时,由于此时获得的currentSpeed的值肯定是小于0.1的,那么此时goober就会播放idle(站立)动画,见:size=12.8000001907349px 但是当我们按下了空格键,此时就会立即播放跳跃动画。假如我们将不设置jump的layer值为1,即注释掉这行:size=12.8000001907349px 我们再运行工程,此时我们还是按下空格键,效果如下: 错误定位到了: 出错了,为什么呢?由于此时没有设置跳跃动画的layer,导致跳跃动画的layer与idle的layer的值都为0,拥有同样的播放优先级,所以按下空格键时准备播放跳跃动画,但是在下一帧时程序发现此时从marioController 脚本组件中得到的currentSpeed变量的值小于0.1,所以又转为播放idle动画,可是此时在此动画脚本中执行到了上面蓝先的这一行,发现lastJump此时是空的(因为此时没有播放跳跃动画嘛),于是才提示空引用错误。所以工程此时就会暂停,我们可以从上面这张图中得以发现,看,goober此时是不是停在半空中,程序是不是暂停运行了?总结一下:如果某个动画状态的layer越高,执行起来就会比layer值较低的动画状态优先,且只有此动画状态被Stop或暂停时才有可能执行其他动画状态。官方的一个说明是: Lower layer animations only receive blend weights if the higher layers didnt use up all blend weights.size=12.8000001907349px 翻译过来就是:layer较低的动画只能在layer较高的动画没有占用全部混
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阀门工程师(球阀)考试试卷及答案
- 2025年健腹椅项目合作计划书
- 2025年地质勘探和地震专用仪器项目合作计划书
- 2025年山西省政府研究室下属事业单位招聘考试笔试试题【答案】
- 2025年事业单位招聘考试公共基础知识模拟试卷题库(三套)【答案】
- 2025年中新天津生态城教育系统招聘教职人员考试试题【答案】
- 消费趋势与地区差异分析:新型消费模式与市场动态
- 消防月消防知识竞赛选题库6
- 老龄员工工作述职报告范文
- 箱梁预制场建设施工方案
- 2024四川广元市检察机关招聘聘用制书记员22人笔试备考题库及答案解析
- 二维材料在柔性电子中的应用研究
- 内科患者VTE风险评估表
- 一年级上册美术教案-第1课 让大家认识我:诚实最好 ▏人美版
- 科学认识天气智慧树知到期末考试答案2024年
- (高清版)DZT 0064.15-2021 地下水质分析方法 第15部分:总硬度的测定 乙二胺四乙酸二钠滴定法
- 心理体检收费目录
- 雅鲁藏布江米林-加查段沿线暴雨泥石流危险度评价的中期报告
- 抗生素的正确使用与合理配比
- 读书分享读书交流会《局外人》课件
- 第十六章-常见骨关节疾病评定技术-2肩周炎评定
评论
0/150
提交评论