AnimationTree

简介

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),可以使用下面的几种类型:
    69ec3028bfd5d1c98b5c71412e093bfc.png
  • 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,
b5aa8ca7d026c219cf26342aa3b7691e.png
主视图下方出现BlenderTree的编辑器
317ee000895c598d87ec2a8724f7c7b0.png
点击左上角的Add Node菜单可以填加节点
ffc58ebd3202f214ce5406390db456a5.png
所有的Blender tree默认都包含一个Output节点,必须连接到Output节点上,才能播放动画。

测试这个功能最简单的方法是将一个Animation节点连接到Output节点上:
e1e74db19ba3d6a9e49b2b7c5d318ec3.png
Add Node可用节点的简单说明:

  • Blender2/Blender3

使用用户指定的blener属性值在2个或者3个输入端间进行混合
cce14110c84fe2498635100e76a831f0.png
blend值为0时显示idle动画,blend为1时显示walk动画,blend为(0-1)中间的值时会混合显示两个动画,如果需要更复杂的混合效果,建议使用BlendSpace。
混合还可以使用过滤(Edit Filters)控制动画状态的某一个Track参与混合,这对于层叠动画非常有用。
3459e8d8471f94fe43e52111e9168f59.png

  • OneShot

节点播放一个子动画,并在完成后返回,可以自定义渐入时间(Fade in time),渐出时间(Fade out time)和过滤(Edit Filters)。
139bc5379b36395ffe1cdc430e72cfeb.png

  • Seek

此节点可用于在图(tree graph)的任意子节点上执行寻道命令。设置时间后,该值返回-1。
0ff84db7168b2d64b29a36847d4fde1c.png

  • TimeScale

允许缩放图(tree graph)中任意子节点的动画的速度(或反转动画)。设置为0将暂停动画。
4360dd0ae94b4cf50d37e9545cb82a00.png

  • Transition

非常简单的状态机(如果不想使用复杂的StateMachine节点,可以使用这个节点),动画被连接到Output节点,并可以设置转换时间
(Transition Time)
e492875c311c4c3f0feb1a6bd3d3fa0f.png

  • BlendSpace2D

BlenderSapce2D是混合的高级模式,它可以在两个维度上计算混合。点被填加到一个二维空间中,通过设置点的位置控制混合效果。