简介
Godot引擎通过AnimationPlay节点实现了最灵活的动画系统,它几乎可以给godot中的任意节点的任意属性添加动画,而且它还有专用的变换函数,bezier曲线,函数回调,声音控制和子动画轨道(sub-animation track)等的特性。
但是AnimationPlayer也有一定的缺陷,使用它混合动画只有单一的cross-fade变换时间能调节。
AnimationTree节点是Godot3.1新出的用于处理高级动画状态变换的工具。它取替了原来的旧节点AnimationTreePlayer节点,而且增加了很多新的特性,使用起来更加灵活。
创建AnimationTree
AnimationTree本身不包含动画,它使用AnimationPlayer节点包含的动画,你可以使用AnimationPlay制作动画,或者从其他第三方软件中导入动画,然后使用AnimationTree节点控制动画的播放,动画的播放是通过控制AnimationTree属性的Playback实现的。
AnimationTree最多的使用场景是在3D游戏里。从第三方3D软件导入带动画的资源后,导入的场景会包含AnimationPlayer节点。可以将AnimationrTree放置在包含导入资源的场景中,然后将AnimationTree的AnimPlayer属性指向对应的AnimationPlayer节点。
创建Tree Root
AnimationTree中主要有三种节点类型:
Animation node: 从链接的AnimationTree中引用动画
Animation Root: 用于混合子节点
Animation blender node: 在AnimationNodeBlenderTree中通过多个输入端口进行单图混合
在AnimationTree中设置根节点(root node),可以使用下面的几种类型:
AnimationNodeAnimation: 从列表中选择一个动画播放,这是最简单的根节点类型,通常不直接作为Tree Root根节点使用。
AnimationNodeBlendTree: 包含多个混合类型节点,如max,blender2,blender3,onshot等等,这个是最常用的Tree Root根节点。
AnimationNodeStateMachine: 在图中包含多个根节点类型作为它的子节点,每一个根节点是一个状态,并且提供了很多用于改变状态的函数 。
AnimationNodeBlenderSpace2d: 在2D空间中旋转根节点,通过控制Blender Postion属性在2D空间中的位置混合多个动画
AnimationNodeBlenderSpace1D: 1D空间混合
Blender Tree
AnimationNodeBlenderTree用于混合的节点可以同时包含根节点和普通节点
为AnimationTree属性面板的Tree Root新建一个Blender Tree,
主视图下方出现BlenderTree的编辑器
点击左上角的Add Node菜单可以填加节点
所有的Blender tree默认都包含一个Output节点,必须连接到Output节点上,才能播放动画。
测试这个功能最简单的方法是将一个Animation节点连接到Output节点上:
Add Node可用节点的简单说明:
-
Blender2/Blender3
使用用户指定的blener属性值在2个或者3个输入端间进行混合
blend值为0时显示idle动画,blend为1时显示walk动画,blend为(0-1)中间的值时会混合显示两个动画,如果需要更复杂的混合效果,建议使用BlendSpace。
混合还可以使用过滤(Edit Filters)控制动画状态的某一个Track参与混合,这对于层叠动画非常有用。
-
OneShot
节点播放一个子动画,并在完成后返回,可以自定义渐入时间(Fade in time),渐出时间(Fade out time)和过滤(Edit Filters)。
-
Seek
此节点可用于在图(tree graph)的任意子节点上执行寻道命令。设置时间后,该值返回-1。
-
TimeScale
允许缩放图(tree graph)中任意子节点的动画的速度(或反转动画)。设置为0将暂停动画。
-
Transition
非常简单的状态机(如果不想使用复杂的StateMachine节点,可以使用这个节点),动画被连接到Output节点,并可以设置转换时间
(Transition Time)
-
BlendSpace2D
BlenderSapce2D是混合的高级模式,它可以在两个维度上计算混合。点被填加到一个二维空间中,通过设置点的位置控制混合效果。