AnimationNodeStateMachine

继承: AnimationRootNode < AnimationNode < Resource < RefCounted < Object

带有多个 AnimationRootNode 的状态机,用于 AnimationTree

描述

包含表示动画状态的多个 AnimationRootNode,以图的形式连接。可以使用最短路径算法,将节点过渡配置为自动发生或通过代码发生。要以编程的方式控制过渡,请从 AnimationTree 节点获取 AnimationNodeStateMachinePlayback 对象。

示例:

GDScriptC#

  1. var state_machine = $AnimationTree.get("parameters/playback")
  2. state_machine.travel("some_state")
  1. var stateMachine = GetNode<AnimationTree>("AnimationTree").Get("parameters/playback") as AnimationNodeStateMachinePlayback;
  2. stateMachine.Travel("some_state");

教程

属性

bool

allow_transition_to_self

false

bool

reset_ends

false

StateMachineType

state_machine_type

0

方法

void

add_node(name: StringName, node: AnimationNode, position: Vector2 = Vector2(0, 0))

void

add_transition(from: StringName, to: StringName, transition: AnimationNodeStateMachineTransition)

Vector2

get_graph_offset() const

AnimationNode

get_node(name: StringName) const

StringName

get_node_name(node: AnimationNode) const

Vector2

get_node_position(name: StringName) const

AnimationNodeStateMachineTransition

get_transition(idx: int) const

int

get_transition_count() const

StringName

get_transition_from(idx: int) const

StringName

get_transition_to(idx: int) const

bool

has_node(name: StringName) const

bool

has_transition(from: StringName, to: StringName) const

void

remove_node(name: StringName)

void

remove_transition(from: StringName, to: StringName)

void

remove_transition_by_index(idx: int)

void

rename_node(name: StringName, new_name: StringName)

void

replace_node(name: StringName, node: AnimationNode)

void

set_graph_offset(offset: Vector2)

void

set_node_position(name: StringName, position: Vector2)


枚举

enum StateMachineType: 🔗

StateMachineType STATE_MACHINE_TYPE_ROOT = 0

寻道到开头被视为从开始状态开始播放。过渡到结束状态被视为退出状态机。

StateMachineType STATE_MACHINE_TYPE_NESTED = 1

寻道到开头被视为在当前状态下寻道到动画的开头。过渡到结束状态,或每个状态的过渡都缺失,被视为退出状态机。

StateMachineType STATE_MACHINE_TYPE_GROUPED = 2

这是一个可以从父状态机控制的编组的状态机。它不能独立运行。父级或祖先中必须有一个 state_machine_typeSTATE_MACHINE_TYPE_ROOTSTATE_MACHINE_TYPE_NESTED 的状态机。


属性说明

bool allow_transition_to_self = false 🔗

  • void set_allow_transition_to_self(value: bool)

  • bool is_allow_transition_to_self()

如果为 true,允许使用 AnimationNodeStateMachinePlayback.travel 传送到当前状态。当在 AnimationNodeStateMachinePlayback.travel 中启用重置选项时,动画将重新启动。如果为 false,传送到当前状态时不会发生任何事情。


bool reset_ends = false 🔗

  • void set_reset_ends(value: bool)

  • bool are_ends_reset()

如果为 true,则将与开始和结束节点的淡入淡出视为与 RESET 动画的混合。

大多数情况下,状态机的父级 AnimationNode 执行额外的淡入淡出时,将这个属性设置为 false 并将父 AnimationNode 和该状态机的开始和结束节点的淡入淡出时间设为相同的值能够得到不错的效果。


StateMachineType state_machine_type = 0 🔗

该属性可以为不同用例定义过渡过程。另见 StateMachineType


方法说明

void add_node(name: StringName, node: AnimationNode, position: Vector2 = Vector2(0, 0)) 🔗

向图中添加一个新的动画节点。position 用于在编辑器中显示。


void add_transition(from: StringName, to: StringName, transition: AnimationNodeStateMachineTransition) 🔗

在给定动画节点之间添加一个过渡。


Vector2 get_graph_offset() const 🔗

返回图的绘制偏移。用于在编辑器中显示。


AnimationNode get_node(name: StringName) const 🔗

返回指定名称的动画节点。


StringName get_node_name(node: AnimationNode) const 🔗

返回指定动画节点的名称。


Vector2 get_node_position(name: StringName) const 🔗

返回给定动画节点的坐标。用于在编辑器中显示。


AnimationNodeStateMachineTransition get_transition(idx: int) const 🔗

返回给定的过渡。


int get_transition_count() const 🔗

返回图中的连接数。


StringName get_transition_from(idx: int) const 🔗

返回给定过渡的开始节点。


StringName get_transition_to(idx: int) const 🔗

返回给定过渡的末端节点。


bool has_node(name: StringName) const 🔗

如果图中包含给定的动画节点,则返回 true


bool has_transition(from: StringName, to: StringName) const 🔗

如果在给定动画节点之间存在过渡,则返回 true


void remove_node(name: StringName) 🔗

从图中删除指定的动画节点。


void remove_transition(from: StringName, to: StringName) 🔗

删除两个指定动画节点之间的过渡。


void remove_transition_by_index(idx: int) 🔗

按索引删除给定的过渡。


void rename_node(name: StringName, new_name: StringName) 🔗

重命名给定的动画节点。


void replace_node(name: StringName, node: AnimationNode) 🔗

用新的动画节点替换给定的动画节点。


void set_graph_offset(offset: Vector2) 🔗

设置图形的绘制偏移。用于在编辑器中显示。


void set_node_position(name: StringName, position: Vector2) 🔗

设置动画节点的坐标。用于在编辑器中显示。