动画轨道类型

本页面概述了在默认属性轨道之外,Godot动画播放器节点可用的轨道类型。

参见

我们假设你已经阅读了 动画功能介绍,其中包括了一些基础知识,包括属性轨道。

../../_images/track_types.webp

属性轨道

最基本的轨道类型。见 动画功能介绍

3D 位置、旋转、缩放轨道

这些 3D 变换轨道控制的是 3D 对象的位置、旋转和缩放。这样为 3D 对象的变换做动画相比于使用普通属性轨道更方便。

它专为从外部3D模型导入的动画而设计,并可以通过压缩来减少资源占用。

混合形状轨道

混合形状轨道针对 MeshInstance3D 中的混合形状动画进行了优化。

它专为从外部3D模型导入的动画而设计,并可以通过压缩来减少资源占用。

方法调用轨道

方法调用轨道允许你在动画中的特定时间调用函数。例如,你可以在死亡动画的结束时调用 queue_free() 来删除节点。

备注

为了安全起见,在编辑器中预览动画时,方法调用轨道上的事件不会被执行。

To create such a track in the editor, click “Add Track -> Call Method Track.” Then, a window opens and lets you select the node to associate with the track. To call one of the node’s methods, right-click the timeline and select “Insert Key”. A window opens with a list of available methods. Double-click one to finish creating the keyframe.

../../_images/node_methods.webp

要更改方法调用或其参数,请单击关键帧并转到检查器面板。在那里,你可以更改要调用的方法。如果展开“Args”部分,你将看到一个可编辑的参数列表。

../../_images/node_method_args.webp

To create such a track through code, pass a dictionary that contains the target method’s name and parameters as the Variant for key in Animation.track_insert_key(). The keys and their expected values are as follows:

“method”

方法的名称,类型为 String

“args”

传递给该函数的所有参数,类型为 Array

GDScriptC#

  1. # Create a call method track.
  2. func create_method_animation_track():
  3. # Get or create the animation the target method will be called from.
  4. var animation = $AnimationPlayer.get_animation("idle")
  5. # Get or create the target method's animation track.
  6. var track_index = animation.add_track(Animation.TYPE_METHOD)
  7. # Make the arguments for the target method jump().
  8. var jump_velocity = -400.0
  9. var multiplier = randf_range(.8, 1.2)
  10. # Get or create a dictionary with the target method's name and arguments.
  11. var method_dictionary = {
  12. "method": "jump",
  13. "args": [jump_velocity, multiplier],
  14. }
  15. # Set scene-tree path to node with target method.
  16. animation.track_set_path(track_index, ".")
  17. # Add the dictionary as the animation method track's key.
  18. animation.track_insert_key(track_index, 0.6, method_dictionary, 0)
  19. # The target method that will be called from the animation.
  20. func jump(jump_velocity, multiplier):
  21. velocity.y = jump_velocity * multiplier
  1. // Create a call method track.
  2. public void CreateAnimationTrack()
  3. {
  4. // Get reference to the AnimationPlayer.
  5. var animationPlayer = GetNode<AnimationPlayer>("AnimationPlayer");
  6. // Get or create the animation the target method will be called from.
  7. var animation = animationPlayer.GetAnimation("idle");
  8. // Get or create the target method's animation track.
  9. var trackIndex = animation.AddTrack(Animation.TrackType.Method);
  10. // Make the arguments for the target method Jump().
  11. var jumpVelocity = -400.0;
  12. var multiplier = GD.RandRange(.8, 1.2);
  13. // Get or create a dictionary with the target method's name and arguments.
  14. var methodDictionary = new Godot.Collections.Dictionary
  15. {
  16. { "method", MethodName.Jump },
  17. { "args", new Godot.Collections.Array { jumpVelocity, multiplier } }
  18. };
  19. // Set scene-tree path to node with target method.
  20. animation.TrackSetPath(trackIndex, ".");
  21. // Add the dictionary as the animation method track's key.
  22. animation.TrackInsertKey(trackIndex, 0.6, methodDictionary, 0);
  23. }
  24. // The target method that will be called from the animation.
  25. private void Jump(float jumpVelocity, float multiplier)
  26. {
  27. Velocity = new Vector2(Velocity.X, jumpVelocity * multiplier);
  28. }

贝塞尔曲线轨道

贝塞尔曲线轨道类似于属性轨道,但它允许你使用贝塞尔曲线来控制属性的值。

备注

贝塞尔曲线轨道和属性轨道不能在 AnimationPlayerAnimationTree 中混合。

要创建一个贝塞尔曲线轨道,请单击“添加轨道 -> 贝塞尔曲线轨道”。与属性轨道一样,你需要选择要设置动画的节点和属性。请单击动画轨道右侧的曲线图标以打开贝塞尔曲线编辑器。

../../_images/bezier_curve_icon.webp

在编辑器中,帧由实心菱形表示,空心菱形通过线控制曲线的形状连接到它们。

小技巧

为了在手动处理曲线时获得更好的精度,你可能需要更改编辑器的缩放级别。编辑器右下角的滑块可以用来在时间轴上放大和缩小,你也可以使用:kbd: ‘ Ctrl + Shift +鼠标滚轮’来实现。使用:kbd:“Ctrl + Alt +鼠标滚轮”将在Y轴上放大和缩小

../../_images/bezier_curves.webp

在编辑器右键面板中,可以选择控柄模式:

  • 自由:允许你将操纵器定向到任何方向,而不影响另一个操纵器的位置。

  • 线性:不允许操纵器旋转,绘制线性图形。

  • 平衡:使操纵器一起旋转,但关键帧和操纵器之间的距离不镜像。

  • 镜像:使一个操纵器的位置完美镜像另一个操纵器,包括它们到关键帧的距离。

../../_images/manipulator_modes.webp

音频播放轨道

如果要创建带音频的动画,则需要创建音频播放轨道。为了创建音频播放轨道,你的场景必须具有 AudioStreamPlayer、AudioStreamPlayer2D 或 AudioStreamPlayer3D 节点。创建轨道时,你必须选择这些节点之一。

为了在动画中播放声音,请将音频文件从文件系统面板拖放到动画轨道上。你应该能在轨道中看到音频文件的波形。

../../_images/audio_track.webp

为了从动画中删除声音,你可以右键单击它并选择“删除关键帧”或单击它并按 Del 键。

混合模式允许你选择在 AnimationTree 中混合时是否调整音频音量。

../../_images/blend_mode.webp

动画播放轨道

动画播放轨道允许你对场景中其他动画播放器节点的动画进行排序。比如你可以用它为过场动画中的多个角色制作动画。

要创建动画播放轨道,请选择“新建轨道 -> 动画播放轨道”。

而后选择要与轨道关联的动画播放器。

请右键单击轨道并插入帧,来将动画添加到轨道中。选中你刚创建的帧,以在检查器面板中选择动画。

../../_images/animation_player_animation.webp

如果动画已经在播放,并且你想提前停止它,可以创建一个帧并将其在检查器中设置为 [STOP] 。

备注

如果你在场景中实例化了包含动画播放器的场景,则需要在场景树中启用“子节点可编辑”,才能访问它的动画播放器。除此之外,动画播放器也无法引用自身。