unity3d游戏开发之角色的动画脚本的编写(三).doc

unity3d游戏开发之角色的动画脚本的编写(三).doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
?在上一篇,我们具体的讲解了有关动画的融合,也提到了有关动画状态的权重问题。那么这次,我来以一个例子的形式来向大家讲解动画的叠加,或许会涉及到多方面的知识,我力求一次讲清。好了,我们开始吧!该文章出自? ?? ?首先我们必须新建一个工程,我取名为:AnimaitonTestTuriol。我们需要一个模型,这里我刚好从从官方的CharacterAnimation这个工程中抠出了一个:Soldier。然后我将其导入到了次工程文件夹下面的,然后简单的错了一个场景,取名为:AnimationAdditive,下图就是我们的工程预览:[size=12.8000001907349px] ? ? ?? ?然后我们新建一个名为CustomScripts的文件夹,用于存放我们接下来要建立的脚本文件。? ?? ? ? ?? ?我们此次的目的是要能够在脚本中熟练运用动画的叠加方法。那么什么是动画的叠加呢?所谓动画的叠加,就是指我们可以在任意动画上面来叠加动画效果。这就非常棒了,因为这项功能可以削减美术为游戏角色创建的动画片段的数量,既减小了工程所占用空间的大小,又对简化了我们的代码编写。官方举了一个例子,大体上是这样的:加入我们有一个角色,具备基本的“站立”,“跑步”,“左倾”,“右倾”的动画,我们还想让其在跑步图中转身时有一种倾斜的效果,比如左转弯时不只是播放跑步的动画,而且还叠加了一个左倾的(或者右倾的)动画。如果我们不用叠加,那么我们势必会多创建两个动画效果:“跑步时左倾”,“跑步时右倾”。一旦有了动画的叠加,我们根本就不需要去做这两个动画片段,厉害吧!那么我们该怎么去实现这个呢?? ?? ? ? ???我们首先要知道怎么去叠加动画,为此,我们必须了解一下这个属性:AnimationState.blendMode,即混合模式。此属性的返回值类型为AnimationBlendMode ,我们看文档:? ? ???这里只有两个变量:Blend和Additive。在默认状态下,Animation组件所管理的每个动画状态的混合模式都是: ? ???AnimationBlendMode.Blend,即融合模式,我们只有在程序中才能对其进行相应的修改。如果你将此动画模式修改成了Additive,那么你的这个动画状态就具备叠加到其他动画上的功能了,此时你只需动态的调节这两个动画状态之间的权重就可以产生相应的叠加动画了。下面我来编写一个试验性的脚本来证明我们的猜想,我为这个脚本取名为:AdditiveAnimaitonTest1, 代码如下:? using UnityEngine; using System.Collections; public class AdditiveAnimaitonTest1 : MonoBehaviour { ? ?? ???private AnimationState***n; ? ?? ???private AnimationState leanLeft; ? ?? ??? void Start () { ? ?? ???animation.wrapMode = WrapMode.Loop;//声明各动画状态的播放方式为循环模式 ? ?? ? ***n = animation[***nSlow];//实例化成员变量 ? ?? ???leanLeft = animation[leanLeft]; ? ?? ???if ***n) ? ?? ???{ ? ?? ?? ???***n.weight = 1f;//设定动画状***n的混合权重为1 ? ?? ?? ???***n.layer = 10;//让这个动画状态的layer为最高层10 ? ?? ?? ???***n.enabled = ***e;//启用此动画状态 ? ?? ???} ? ?? ???if (leanLeft) ? ?? ???{ ? ?? ?? ?? ?leanLeft.weight = 1f; ? ?? ?? ?? ?leanLeft.layer = 10;//让此动画状态***n为同一层,又由于此动画状体的混合权重也为1,那么其获得动画混合权重的几率***n一样 ? ?? ?? ?? ?leanLeft.enabled = ***e;//启用此动画状态 ? ?? ?? ?? ?leanLeft.blendMode = AnimationBlendMode.Additive;//将此动画状态设定为叠加模式 ? ?? ???} ? ?? ?} ? ?? ? ? void OnGUI()? ? ? { ? ?? ???GUILayout.BeginHorizontal();//利用拖动条来控制每种动画状体的权重 ? ?? ? ***n.weigh

文档评论(0)

r8dvdlhu8 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档