重命名节点时调用函数?

Invoke a function when renaming node?

非常直接 Q,节点重命名后如何调用函数?

我想也许 _set() 函数会被调用,但它不能用于重命名

从编辑器设置name 绕过_set()。当您从代码中设置 name 时,您可以使用 _set() 进行拦截。


另一种选择是连接 "Renamed" 信号(所有 Node 都有)。

如果您希望在任何代码实例化 Node 有机会更改其名称之前发生连接,您可以尽早连接 _init

但是,只有当 Node 在场景树中时才会触发。


最后,一种检测 name 变化的方法 不管变化是如何发生的 是监听 NOTIFICATION_PATH_CHANGED 通知。

默认情况下,您会在 _notification 中获得 NOTIFICATION_PATH_CHANGED,无需启用它或类似的东西。

它甚至在 Node 不在场景树中时也有效,这让我感到惊讶。

更令人惊讶的是,在将 Node 添加到场景树或将其移除(分别为 NOTIFICATION_ENTER_TREENOTIFICATION_EXIT_TREE 时,它不会触发,尽管有这些操作改变节点的路径。所以我认为 NOTIFICATION_PATH_CHANGED 是用词不当,应该是“NOTIFICATION_NAME_CHANGED”。