[动画Animation和animator]

1.区别

animation(老版)单个动画控制,占用内存小,animator(新版)控制多个动画切换占用内存大(状态机)

2.Animation

播放:foeach(animationState state in animation)

{

state.speed = 1.0f;

}

animation.Play();

用unity制作:

设置几个关键帧,比如1s的时候position.Y为1,10s时候为10,unity会自动将中间的部分插值,简单的可以设置物体的position,rotation,scale等,用起来很方便,其实相当于序列帧动画,只不过unity帮助我们实现了插值,如果用来做一些稍微复杂或者需要表现力的动画会不太好用,多数应用于一些ui界面的动画,简单的透明度,位置变动的动画等

3.Animator

unity新的动画控制机制,占用内存更大,也更加灵活


动画状态机

各个状态的state,静止,行走,跑,中间用一个条件判断,完成各个状态之间的切换,从而将各个状态连接起来

4.几种动画

在实际的游戏中,用的最多的是这三种基本的动画。

  在关键帧动画中,模型在每个关键帧中都是一个固定的姿势,相当于一个“快照”,通过在不同的关键帧中进行插值平滑计算,可以得到一个较为流畅的动画表现。关键帧动画的一个优势是只需要做插值计算,相对于其他的动画计算量很小,但是劣势也比较明显,基于固定的“快照”进行插值计算,表现大大被限制,同时插值如果不够平滑容易出现尖刺等现象,

同时一个无法忽略的问题就是,对于每帧动画都需要进行内存占用,在帧数较多和顶点数较多的时候,这会带来极大的内存占用。当然帧动画也有其实际的应用场景,目前在一些模型的表情动画中会较多的应用到帧动画,因为其动画较少,同时可以用插值实现较为平滑的效果,不需要骨骼动画。

  关节动画是早期出现的一种动画,在这种动画中,模型整体不是一个Mesh,

而是分为多个Mesh,通过父子的关系进行组织,这样父节点的Mesh就会带动子节点的Mesh进行变换,这样层层的变换关系,就可以得到各个子Mesh在不同关键帧中的位置。关节动画相比于关键帧动画,依赖于各个关键帧的动画数据,可以实时的计算出各个Mesh的位置,不再受限于固定的位置,但是由于是分散的各个Mesh,这样在不同Mesh的结合处容易出现裂缝。

  骨骼动画是进一步的动画类型,原理构成极其简单,但是解决问题极其有优势。将模型分为骨骼Bone和蒙皮Mesh两个部分,其基本的原理可以阐述为:模型的骨骼可分为基本多层父子骨骼,在动画关键帧数据的驱动下,计算出各个父子骨骼的位置,基于骨骼的控制通过顶点混合动态计算出蒙皮网格的顶点。在骨骼动画中,通常包含的是骨骼层次数据,网格Mesh数据,

骨骼动画:https://www.cnblogs.com/zblade/p/6986173.html

当父节点骨骼发生变换的时候,子节点的骨骼都会做出相应的变换,从而得到最新的位置、朝向等信息,骨骼发生变化,从而会带动外在的mesh发生变化,所以整体的模型就表现出运动起来

建模时的模型是一个整体的骨骼,有一个整体的骨骼,然后外观上看实际上取决于mesh网格,骨骼的数量一般限制在30以内,mesh无论是网格还是顶点数量往往都会比较庞大,骨骼动画的核心原理就是,由一个骨骼点驱动,通过矩阵计算其他所有骨骼点的变换及位置(矩阵),然后通过新的骨骼位置计算新的mesh位置,外观上显示为平滑的动画,可以看出 这种方式相比于帧动画来说更加通用和灵活,也更加平滑,帧动画的流畅度很大程度取决于序列帧的数量,而数量大往往意味着资源占用太大,

蒙皮计算的过程:顶点在模型坐标系中位置 -> 骨骼空间中位置 -> 变换后的骨骼空间中的位置->模型坐标系中的位置 -> 世界空间中的位置

你可能感兴趣的:([动画Animation和animator])