如何更改 GDScript (Godot) 中的关键帧值?

How to change key frame values in GDScript (Godot)?

我正在尝试在实例化场景时播放动画。这是一个简单的动画,将 y 从 -5 转换为 5。动画播放但它在 x = 0 和 z = 0 播放。我理解这是因为动画中各个坐标的转换值设置为 0 .我的播放器场景上有一个空间节点,可以获取变换信息并将其传递到我的动画场景,但我不知道如何在脚本中动态更改关键帧的 x 和 z 值。

此答案包含问题的三个解决方案...


目标一子属性

如果我理解正确的话,您只想为 y 坐标设置动画,而其他坐标保持不变。也就是说,您不想为 translation 向量设置动画。您想要为 ytranslation、子 属性 制作动画。这是开箱即用的,但 UI 不会提供给你。

首先从动画编辑器创建轨道。你点击“添加轨道”,select“属性轨道”,然后点击你想要的对象,然后select翻译。现在,当轨道为空(尚未插入关键帧)时,将轨道名称修改为末尾的 :y

创建曲目时应使用 SpatialNodeName:translation 等名称,您要将其更改为 SpatialNodeName:translation:y

之后,当您添加关键帧时,它们将用于 translation.y注意:SpatialNodeName:transform:origin:y 甚至 SpatialNodeName:global_transform:origin:y 也有效。同样的,你可以想象如何做到只有旋转或缩放等等。


创建自定义属性并为其设置动画

我还要提到另一种选择是使用 Tween 节点(通过代码更容易创建)。

而且 TweenAnimationPlayer 都可以为任何 属性 设置动画。因此,如果您需要为不可用的内容设置动画,请考虑添加 属性(参见 setget)。

例如:

export var y:float setget set_y, get_y

func set_y(new_value:float) -> void:
    transform.origin.y = new_value

func get_y() -> float:
    return transform.origin.y

然后您可以为自定义 属性 添加轨道,并像其他轨道一样对其进行动画处理。

顺便说一下,还要注意 AnimationPlayer 也可以有“调用方法”轨道。


修改动画

也可以通过代码操纵动画。我见过一个例子 . You can call get_animation on the AnimationPlayer to get the animation. Then on the returned animation you can call track_get_key_value and track_set_key_value。然而,这很少是你在实践中想要做的(除非你正在制作一个 Godot 插件来创建或修改动画或类似的东西)。