- 最后登录
- 2014-9-17
- 注册时间
- 2012-8-10
- 阅读权限
- 10
- 积分
- 63

- 纳金币
- 51
- 精华
- 0
|
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,就到这了。。
|
|