【发布时间】:2021-10-18 21:21:43
【问题描述】:
我正在尝试在场景实例化时播放动画。这是一个简单的动画,将 y 从 -5 转换为 5。动画播放但它在 x = 0 和 z = 0 处播放。我理解这是因为动画中各个坐标的平移值设置为 0 . 我的播放器场景上有一个空间节点,它可以获取变换信息并将其传递给我的动画场景,但我不知道如何动态更改脚本中关键帧的 x 和 z 值。
【问题讨论】:
标签: animation game-development godot gdscript
我正在尝试在场景实例化时播放动画。这是一个简单的动画,将 y 从 -5 转换为 5。动画播放但它在 x = 0 和 z = 0 处播放。我理解这是因为动画中各个坐标的平移值设置为 0 . 我的播放器场景上有一个空间节点,它可以获取变换信息并将其传递给我的动画场景,但我不知道如何动态更改脚本中关键帧的 x 和 z 值。
【问题讨论】:
标签: animation game-development godot gdscript
此答案包含问题的三个解决方案...
如果我理解正确,您只想为 y 坐标设置动画,而其他坐标保持不变。也就是说,您不想为translation 向量设置动画。您想要为 y 或 translation(子属性)设置动画。这可以开箱即用,但 UI 不会提供给您。
首先从动画编辑器创建一个轨道。您单击“添加跟踪”,选择“属性跟踪”,然后单击所需的对象,然后选择翻译。现在,当轨道为空(尚未插入关键帧)时,将轨道名称修改为最后的: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 也可以有“Call Method”轨道。
也可以通过代码操作动画。我看过一个例子elsewhere。您可以在AnimationPlayer 上调用get_animation 以获取动画。然后在返回的动画上你可以调用track_get_key_value 和track_set_key_value。但是,这很少是您在实践中想要做的(除非您正在制作一个创建或修改动画或类似内容的 Godot 插件)。
【讨论】: