我没有时间完全试验它,但这应该给你一个你可以研究的方向。
首先,您需要更改动画类以提供所需的事件。为了能够在编辑器中使用它,请记住,您需要工具标志:
extends Animation
tool
class_name ToolAnimation
signal key_added(track_idx, key_indx)
func track_insert_key ( track_idx : int, time : float, key, transition : float = 1) -> void:
.track_insert_key(track_idx, time, key, transition)
#need to find the key index of the key we added
var key_id = track_find_key ( track_idx, time, true )
emit_signal("key_added", track_idx, key_id)
我在这里所做的就是覆盖track_insert_key 以在添加后搜索密钥ID,然后发出信号。
现在我们需要告诉我们的animation_player添加我们新创建的动画而不是普通的动画类,所以我们改变animation_player的脚本并覆盖add_animation函数:
extends AnimationPlayer
tool
func add_animation(name : String, animation: Animation):
var tool_animation = ToolAnimation.new()
tool_animation.connect("key_added", self, "key_added")
.add_animation(name, tool_animation)
pass
func key_added(track_indx,key_indx):
print("key added: ",key_indx," to track:",track_indx)
现在每次添加密钥时,您都应该进入 key_added 方法。
这仅适用于新创建的动画,因为现有的动画将没有工具动画扩展。例如,要将功能添加到现有动画中,您需要在准备好的功能中深度复制它们。
编辑:正如@cakelover 在 cmets 中指出的那样:要更改现有动画,请遍历它们并使用它们的 set_script() 函数。
我在尝试时注意到的第二件事是,如果新创建了轨道并且同时添加了第一个键(基本上是在我之前没有跟踪的属性上按下键符号),则不会调用我的 key_add 方法。如果您还需要第一把钥匙,那么这就是您应该研究的东西。