unity3d游戏开发之角色的动画脚本的编写(三).doc_第1页
unity3d游戏开发之角色的动画脚本的编写(三).doc_第2页
unity3d游戏开发之角色的动画脚本的编写(三).doc_第3页
unity3d游戏开发之角色的动画脚本的编写(三).doc_第4页
unity3d游戏开发之角色的动画脚本的编写(三).doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在上一篇,我们具体的讲解了有关动画的融合,也提到了有关动画状态的权重问题。那么这次,我来以一个例子的形式来向大家讲解动画的叠加,或许会涉及到多方面的知识,我力求一次讲清。好了,我们开始吧!该文章出自【狗刨学习网】 首先我们必须新建一个工程,我取名为:AnimaitonTestTuriol。我们需要一个模型,这里我刚好从从官方的CharacterAnimation这个工程中抠出了一个:Soldier。然后我将其导入到了次工程文件夹下面的,然后简单的错了一个场景,取名为:AnimationAdditive,下图就是我们的工程预览:size=12.8000001907349px 然后我们新建一个名为CustomScripts的文件夹,用于存放我们接下来要建立的脚本文件。 我们此次的目的是要能够在脚本中熟练运用动画的叠加方法。那么什么是动画的叠加呢?所谓动画的叠加,就是指我们可以在任意动画上面来叠加动画效果。这就非常棒了,因为这项功能可以削减美术为游戏角色创建的动画片段的数量,既减小了工程所占用空间的大小,又对简化了我们的代码编写。官方举了一个例子,大体上是这样的:加入我们有一个角色,具备基本的“站立”,“跑步”,“左倾”,“右倾”的动画,我们还想让其在跑步图中转身时有一种倾斜的效果,比如左转弯时不只是播放跑步的动画,而且还叠加了一个左倾的(或者右倾的)动画。如果我们不用叠加,那么我们势必会多创建两个动画效果:“跑步时左倾”,“跑步时右倾”。一旦有了动画的叠加,我们根本就不需要去做这两个动画片段,厉害吧!那么我们该怎么去实现这个呢? 我们首先要知道怎么去叠加动画,为此,我们必须了解一下这个属性:AnimationState.blendMode,即混合模式。此属性的返回值类型为AnimationBlendMode ,我们看文档: 这里只有两个变量:Blend和Additive。在默认状态下,Animation组件所管理的每个动画状态的混合模式都是: AnimationBlendMode.Blend,即融合模式,我们只有在程序中才能对其进行相应的修改。如果你将此动画模式修改成了Additive,那么你的这个动画状态就具备叠加到其他动画上的功能了,此时你只需动态的调节这两个动画状态之间的权重就可以产生相应的叠加动画了。下面我来编写一个试验性的脚本来证明我们的猜想,我为这个脚本取名为:AdditiveAnimaitonTest1,代码如下:1. using UnityEngine;2. using System.Collections;3. public class AdditiveAnimaitonTest1 : MonoBehaviour 4.5. private AnimationState*n;6. private AnimationState leanLeft;7. 8. void Start () 9. animation.wrapMode = WrapMode.Loop;/声明各动画状态的播放方式为循环模式10.11. *n = animation*nSlow;/实例化成员变量12. leanLeft = animationleanLeft;13.14. if *n)15. 16. *n.weight = 1f;/设定动画状*n的混合权重为117. *n.layer = 10;/让这个动画状态的layer为最高层1018. *n.enabled = *e;/启用此动画状态19. 20.21. if (leanLeft)22. 23. leanLeft.weight = 1f;24. leanLeft.layer = 10;/让此动画状态*n为同一层,又由于此动画状体的混合权重也为1,那么其获得动画混合权重的几率*n一样25. leanLeft.enabled = *e;/启用此动画状态26. leanLeft.blendMode = AnimationBlendMode.Additive;/将此动画状态设定为叠加模式27. 28. 29. 30. void OnGUI()31. 32.33. GUILayout.BeginHorizontal();/利用拖动条来控制每种动画状体的权重34.35. *n.weight = GUILayout.VerticalSlider*n.weight,1.0f,0.0f);36. 37. leanLeft.weight = GUILayout.VerticalSlider(leanLeft.weight, 1.0f, 0.0f);38.39. GUILayout.EndHorizontal();40. 41. 42. 43.复制代码 上面的代码比较少,可是里面所涉及到的内容却并不那么容易理解。因为这次我们不是靠明显代码来播放动画,而是依靠调节权重来实现的。为了理解这个方法的原理,我们必须明白一个结论:假如一个动画状态被激活了,例如:animationidle.enable = *e ,那么此动画就会处于播放状态(此时没有执行类似:size=12.8000001907349px animation.Play或者animation.CrossFade之类的语句)。不信的话你可以在上面的Start()函数中写下以下语句:1. if(animation.IsPlaying(idle)2. Debug.Log(idle is*nning!);3. 4.5.6. if(animation.IsPlaying(leanLeft )7. Debug.Log( leanLeftis*nning!);8. 9.复制代码 我相信第二个if语句中的Debug会被打印出来,而第一个则不会,不信你试试。size=12.8000001907349px 好了,我们运行一下游戏吧!size=12.8000001907349px 我们试着调节一下Game视图中的垂直滚动条,可以发现,动画的效果改变了: 5d49onef32-boneonea-49aa-a7d8-33262done4dd40.jpg(29.77 KB, 下载次数: 0)下载附件保存到相册2小时前上传 我想读者一定按捺不住现在的心情了。我们成功的将左倾动画与跑步动画给叠加起来了,虽然例子很简单,但是我想我们应该可以叠加更多的动画了。希望读者能够认真体会。还有一点,官方CharacterAnimation工程中的第四个场景中的代码完整的展现了动画叠加的精髓,我的这个Solider就是从

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论