如何在脚本中更改过渡节点上的 XFade?

How to change the XFade on a transition node in script?

我目前正在学习 Godot,我的教科书似乎有点过时,因为它仍然使用已弃用的 AnimationTreePlayer。所以我不得不自己弄清楚 AnimationTree。本课的练习讨论了当玩家按下“向上”键时将过渡节点的 XFade 更改为随机值,但我无法弄清楚如何去做。我在文档中看到 AnimationNodeTransition 有一个 set_cross_fade_time(value) 方法,但我该如何获取它?我什至如何访问脚本中的过渡节点?我试过 $AnimationTree/Transition 和 $AnimationTree["parameters/Transition"] 之类的东西,但我试过的都没有用。

我的脚本当前在根节点上,节点树如下所示:

假设您的 AnimationTree 设置为 anim_player 属性 AnimationPlayerAnimationTreetree_root 是一个 AnimationNodeBlendTree,其中 - 在其他节点中 - 你有一个 AnimationNodeTransition.


如您所知,我们可以获得 AnimationTree 的一些“参数”,它们应该出现在检查器面板中。在那里你应该找到这个:

$AnimationTree.get("parameters/Transition/current")

其中 "Transition"AnimationNodeBlendTree 中的节点名称。但是 xfade_time.

没有参数

相反,我们将像这样获取 AnimationTree(换句话说,AnimationNodeBlendTree)的根:

var blend_tree := $AnimationTree.tree_root as AnimationNodeBlendTree

然后我们可以得到这样的节点:

var blend_tree := $AnimationTree.tree_root as AnimationNodeBlendTree
var node := blend_tree.get("nodes/NodeName/node")

顺便说一下,如果将 "/node" 更改为 "/position",您会得到一个 Vector2,其中包含节点在编辑器中的位置。

所以,假设我们想要一个名为“Transition”的节点,这就是我们的 AnimationNodeTransition。我们这样做:

var blend_tree := $AnimationTree.tree_root as AnimationNodeBlendTree
var transition := blend_tree.get("nodes/Transition/node") as AnimationNodeTransition

最后我们可以访问 xfade_time。你说的设置一个随机值?应该这样做:

var blend_tree := $AnimationTree.tree_root as AnimationNodeBlendTree
var transition := blend_tree.get("nodes/Transition/node") as AnimationNodeTransition
transition.xfade_time = rand_range(0.0, 120.0)

或作为一行:

$AnimationTree.tree_root.get("nodes/Transition/node").xfade_time = rand_range(0.0, 120.0)

请注意,xfade_time 的值是转换的秒数。所以设置 120 给你两分钟的过渡时间。