- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
?在上一篇,我们介绍了有关Animation这个类中的部分方法,我后来想了想,这么介绍也不是个办法(其实有些方法我自己也没用过),该介绍点实际的东西了,毕竟我们是要做东西出来的。那好,我们就开始吧。 该文章出自? ?? ?? ?? ?首先我们要介绍的主题是:Animation Blending ,即动画融合。我们来看官方文档上的描述:?? ?? ?? ?? ?用我自己的理解就是:在现今的游戏中,动画融合是一个必不可少的特性用以让你的的角色能够产生平滑的动画。动画设计师首先为角色创建了一些个动画片段,例如一个行走循环,跑步循环,还有站立或射击的。在你运行游戏期间,你需要从站立的动画状态转换到行走的动画状态并且看上去要足够平滑,不能突然跳转。??? ?? ?? ?? ?此时我们就需要 有一种处理方式来完成我们所想要实现的效果。这就是“动画融合”的用处。在Unity中,一个角色可以有多种不同的动画片段,Unity可以将这些动画片段融合起来并以一种组件的形式(即Animation)进行管理,并根据具体情形来比如脚本来生成最终的动画。看来我们其实一直在运用“动画的融合”。[size=12.8000001907349px]? ?? ?? ???那么我们来看一个例子吧,我就选官方的CharacterAnimation里的goober为例,直接给出代码:
using UnityEngine;
using System.Collections;
public class SuperMarioAnimation : MonoBehaviour {
? ?? ???
? ?? ???public float landBounceTime = 0.6f;//该动画在0播放到60%时之后立即结束,应该是后来根据主角在空中滞留的时间而调整的。
? ?? ???
? ?? ???private AnimationState lastJump;//存储“jump”的动画状态
? ?? ???// Use this for initialization
? ?? ???void Start () {
? ?? ?? ?? ?? ??
? ?? ?? ?? ?? ? animation.wrapMode = WrapMode.Loop;//首先设置所有的动画片段播放时的播放模式为循环播放模式,之后我们也可以修改单个动画片段播放时的循环模式,比如此函数最后一行。
? ?? ?? ?? ?? ? AnimationState jump = animation[jump];//暂存“jump”的动画状态,记住,是暂存。仅仅只是用于下面三行代码中的动画设置。
? ?? ?? ?? ?? ? jump.layer = 1 ;//设置动画状态jump的动画层值为1,相对于默认层级值要高,为的是有更多的优先级取得动画权重。
? ?? ?? ?? ?? ? jump.enabled = false;//暂停该动画的播放,这个我会在后面进行相应的讲解,因为它有其独特的应用情景。
? ?? ?? ?? ?? ? jump.wrapMode = WrapMode.Clamp;//设置动画状态jump的循环模式为Once(单次,上一篇已经证明了)循环。
? ?? ?? ?? ?? ?? ?? ?? ?
? ?? ???}
? ?? ???void Update () {
? ?? ?? ?? ?? ? SuperMarioController marioController = gameObject.GetComponent();
? ?? ?? ?? ?? ? //取得该角色的SuperMarioController脚本组件。? ?? ?? ?? ?? ??
? ?? ?? ?? ?? ? float currentSpeed = marioController.GetSpeed();
? ?? ?? ?? ?? ? //每帧获取该角色的速度并存储在临时变量currentSpeed里。
? ?? ?? ?? ?? ??
? ?? ?? ?? ?? ? if(currentSpeed 0.1){//以速度判断该播放何种动画,淡入淡出效果的核心就在这里
? ?? ?? ?? ?? ?? ?? ?? ?animation.CrossFade(walk);
? ?? ?? ?? ?? ?? ?? ?? ?//如果当前正在播放某个动画片段,那么淡出它,淡入名为“Walk”的动画。
? ?? ?? ?? ?? ? }else{
? ?? ?? ?? ?? ?? ?? ?? ?animation.CrossFade(idle);
? ?? ?? ?? ??
文档评论(0)