查看: 5109|回复: 2
打印 上一主题 下一主题

[其他] Unity动画系统“武器”说

[复制链接]

4

主题

0

听众

63

积分

设计初学者

Rank: 1

纳金币
51
精华
0
跳转到指定楼层
楼主
发表于 2012-8-31 20:06:02 |只看该作者 |倒序浏览


     Unity的动画系统是一套精细的发射系统,就像一套“武器”系统,那位说了,这与武器有什么关系呢,恩,有关系。所谓动画系统,首先要有“动画”,(注意啊,此处的动画是一个名词),更精确的说,此处的“动画”在Unity中称为AnimationClip(动画片段),我们可以在Unity的脚本参考中,搜素AnimationClip这个单词,就可以看到对它的介绍:
      AnimationClip继承自Object类,主要用来存储关键帧类型的动画,在它之中呢,又包含有各种变量,函数等,如常用变量length指的是动画片段的长度了(还有很多了,大家可以看脚本参考了)等,更重要的是,AnimationClip是被用来发射的(更形象的说是被用来播放的),被谁“发射”呢?Animation。
      Animation是啥东东呢,Animation是一个组件,它继承自Unity的Behaviour(行为)类,它的主要作用是用来播放AnimationClip(动画)的,看下面的代码:
           animation.Play(animation.clip.name);
          // Wait for the animation to have finished
         yield WaitForSeconds (animation.clip.length);
        从上面的介绍可以看出:AnimationClip就是子弹,而Animation就是“武器”。
       作为一个系统,当然就不会有一一种武器:Animation有两个主要的函数一个是animation.Play,而另一个是animation.CrossFade。animation.Play的主要特点就是在播放时没有任何过渡,可以这样理解,就是一个动画组件中有多个动画片段,当使用Play播放时,Unity会直接从一个片段切换到另一个片段,之间没有任何过渡,而CrossFade则恰好相反了,在播放时,它会平滑的从一个片段切换到另一个片段,相当的帅了。。例如,它可以平滑的使一个角色从静止过渡到“跑路”状态:
      function Update () {
             if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1)
                 animation.CrossFade("Run");
             else
           animation.CrossFade("Idle");
      }
       同样的,作为一个“系统”就不会只有零件,它还会有“控制”系统及一些“辅助”系统,即Unity的动画系统是基于weight(权重)的,并支持动画融合,附加动画,动画混合,及层及动画播放时各种播放特性的控制。

        层是一个特别有用的概念,因为它与动画系统的权重是紧密相关的,同时它可以对同一个物体上的多个动画做出合理的安排,可以控制那个先播放,那个后播放等。这一切都是与权重相关的。Unity的权重有时候真的很难理解,但时间长了,习惯了就可以了。层分高的层,低的层,例如,当一个层数是2,而另一个层是1时,则高的层则优先使用动画系统的“权重”,例如,若层2使用了100%的权重,则层1就没有权重了,层1中的动画就不会播放了(注意此处的权重可以动态变化的);再看另一种情况,若层2使用了50%的权重,而层1想使用80%的权重,则层1只能使用整个系统剩余的50%的80%,这就是层的魅力。具体的代码就不提供了,很多的。
       再看一下,动画的mixing(混合),关键要理解它是在物体的局部上添加动画的了,并与其它的动画叠加起来就可以。例如,一个角色只创建一个挥手的动画,把此动画添加到指定的关节上,并与其它动画同时播放,就有意向不到的效果了,,,看下面的代码是咋添加附加动画的:
        // Adds a mixing transform using a Transform variable
        var shoulder : Transform;
         animation["wave_hand"].AddMixingTransform(shoulder);
      而另一个,动画的AddItive(附加),则要理解它所添加的动画是加在物体整体上的,并可以使用脚本进行单独的控制。这样就OK了。看一下,下面的语句设置两个动画的类型为附加动画:
         // Set the lean animation to be additive
         leanLeft.blendMode = AnimationBlendMode.Additive;
         leanRight.blendMode = AnimationBlendMode.Additive;
         再看一下下面的语句,使用脚本控制附加动画的播放:
      function Update () {
           var lean = Input.GetAxis("Horizontal");
              // normalizedTime is 0 at the first frame and 1 at the last frame in the clip
           leanLeft.normalizedTime = -lean;
          leanRight.normalizedTime = lean;
      }
上面这些,就是我认为要理解Unity动画系统的一些关键点,希望能对大家有所帮助了。
OK,就到这了。。
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

955

主题

164

听众

7万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
59338
精华
28

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

沙发
发表于 2012-8-31 20:15:26 |只看该作者
感谢分享,如果能搭配图的话就更佳。
回复

使用道具 举报

0

主题

1

听众

52

积分

设计初学者

Rank: 1

纳金币
0
精华
0
板凳
发表于 2014-5-4 09:43:56 |只看该作者
ddddddddddddddddddddddddddd
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-14 20:01 , Processed in 0.075527 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部