如何更改 GDScript (Godot) 中的关键帧值?
How to change key frame values in GDScript (Godot)?
我正在尝试在实例化场景时播放动画。这是一个简单的动画,将 y 从 -5 转换为 5。动画播放但它在 x = 0 和 z = 0 播放。我理解这是因为动画中各个坐标的转换值设置为 0 .我的播放器场景上有一个空间节点,可以获取变换信息并将其传递到我的动画场景,但我不知道如何在脚本中动态更改关键帧的 x 和 z 值。
此答案包含问题的三个解决方案...
目标一子属性
如果我理解正确的话,您只想为 y
坐标设置动画,而其他坐标保持不变。也就是说,您不想为 translation
向量设置动画。您想要为 y
或 translation
、子 属性 制作动画。这是开箱即用的,但 UI 不会提供给你。
首先从动画编辑器创建轨道。你点击“添加轨道”,select“属性轨道”,然后点击你想要的对象,然后select翻译。现在,当轨道为空(尚未插入关键帧)时,将轨道名称修改为末尾的 :y
。
创建曲目时应使用 SpatialNodeName:translation
等名称,您要将其更改为 SpatialNodeName:translation:y
。
之后,当您添加关键帧时,它们将用于 translation.y
。 注意:SpatialNodeName:transform:origin:y
甚至 SpatialNodeName:global_transform:origin:y
也有效。同样的,你可以想象如何做到只有旋转或缩放等等。
创建自定义属性并为其设置动画
我还要提到另一种选择是使用 Tween
节点(通过代码更容易创建)。
而且 Tween
和 AnimationPlayer
都可以为任何 属性 设置动画。因此,如果您需要为不可用的内容设置动画,请考虑添加 属性(参见 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 插件来创建或修改动画或类似的东西)。
我正在尝试在实例化场景时播放动画。这是一个简单的动画,将 y 从 -5 转换为 5。动画播放但它在 x = 0 和 z = 0 播放。我理解这是因为动画中各个坐标的转换值设置为 0 .我的播放器场景上有一个空间节点,可以获取变换信息并将其传递到我的动画场景,但我不知道如何在脚本中动态更改关键帧的 x 和 z 值。
此答案包含问题的三个解决方案...
目标一子属性
如果我理解正确的话,您只想为 y
坐标设置动画,而其他坐标保持不变。也就是说,您不想为 translation
向量设置动画。您想要为 y
或 translation
、子 属性 制作动画。这是开箱即用的,但 UI 不会提供给你。
首先从动画编辑器创建轨道。你点击“添加轨道”,select“属性轨道”,然后点击你想要的对象,然后select翻译。现在,当轨道为空(尚未插入关键帧)时,将轨道名称修改为末尾的 :y
。
创建曲目时应使用 SpatialNodeName:translation
等名称,您要将其更改为 SpatialNodeName:translation:y
。
之后,当您添加关键帧时,它们将用于 translation.y
。 注意:SpatialNodeName:transform:origin:y
甚至 SpatialNodeName:global_transform:origin:y
也有效。同样的,你可以想象如何做到只有旋转或缩放等等。
创建自定义属性并为其设置动画
我还要提到另一种选择是使用 Tween
节点(通过代码更容易创建)。
而且 Tween
和 AnimationPlayer
都可以为任何 属性 设置动画。因此,如果您需要为不可用的内容设置动画,请考虑添加 属性(参见 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
也可以有“调用方法”轨道。
修改动画
也可以通过代码操纵动画。我见过一个例子 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 插件来创建或修改动画或类似的东西)。