如何在脚本中更改过渡节点上的 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"] 之类的东西,但我试过的都没有用。
我的脚本当前在根节点上,节点树如下所示:
- Sprite [脚本在这里]
- 动画播放器
- 动画树
假设您的 AnimationTree
设置为 anim_player
属性 AnimationPlayer
。 AnimationTree
的 tree_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
给你两分钟的过渡时间。
我目前正在学习 Godot,我的教科书似乎有点过时,因为它仍然使用已弃用的 AnimationTreePlayer。所以我不得不自己弄清楚 AnimationTree。本课的练习讨论了当玩家按下“向上”键时将过渡节点的 XFade 更改为随机值,但我无法弄清楚如何去做。我在文档中看到 AnimationNodeTransition 有一个 set_cross_fade_time(value) 方法,但我该如何获取它?我什至如何访问脚本中的过渡节点?我试过 $AnimationTree/Transition 和 $AnimationTree["parameters/Transition"] 之类的东西,但我试过的都没有用。
我的脚本当前在根节点上,节点树如下所示:
- Sprite [脚本在这里]
- 动画播放器
- 动画树
假设您的 AnimationTree
设置为 anim_player
属性 AnimationPlayer
。 AnimationTree
的 tree_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
给你两分钟的过渡时间。