GDScriptGodot 插件中,获取添加时的节点
Posted 张学徒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GDScriptGodot 插件中,获取添加时的节点相关的知识,希望对你有一定的参考价值。
Godot 3.3.3
如果不知道如何开发 Godot 插件,请先学习最基本的插件开发方法
官方文档:编辑器插件
我们新建一个插件:
最后点击 create 创建。
在我们创建的插件脚本里写入如下代码:
tool
extends EditorPlugin
func _enter_tree() -> void:
# 连接场景树的 node_added 信号(节点被添加信号),连接到 _scene_node_added 方法
get_tree().connect("node_added", self, "_scene_node_added")
func _exit_tree() -> void:
# 插件关闭时断开信号连接
if get_tree().is_connected("node_added", self, "_scene_node_added"):
get_tree().disconnect("node_added", self, "_scene_node_added")
## (自定义方法) 编辑新添加的节点
func _edit_added_node(node: Node) -> void:
pass
## 场景树节点的 node_added 信号连接调用的方法
var _yield_tree : bool = true
var _yield_node_list : Array = []
var _current_enabled : bool = true
func _scene_node_added(node: Node) -> void:
# 如果新添加的节点中含有场景根节点
# 则代表这次是切换了场景,则不进行添加
if node == get_tree().edited_scene_root:
_current_enabled = false
_yield_node_list.push_back(node)
# 这样做的原因是,选中节点时,属性检查器面板也会刷新添加节点
# 这样会发出大量的信号调用这个方法
# 所以要判断“哪个节点是新添加到场景中的节点”
# 新添加的节点如果不等待一帧,则它的节点的 owner 属性是 null
# 所以要 yield(get_tree(), "physics_frame") 等待一帧进行判断
# 因为一帧调用一次这个节点就够了,防止多个节点都同时调用这个方法,
# 所以就通过 _yield_tree 属性进行判断,
# 这样就写成了如下代码的形式了
if _yield_tree:
_yield_tree = false
yield(get_tree(), "physics_frame")
_yield_tree = true
if _current_enabled:
for _node in _yield_node_list:
# 判断节点的 owner (这个节点的场景根节点) 是否是当前场景的根节点
if _node && _node.owner == get_tree().edited_scene_root:
_edit_added_node(_node)
_current_enabled = true
_yield_node_list.clear()
这个时候,我们需要关闭插件
点击 Enable 属性关闭,然后再点一下打开
我们可以在场景中添加一个新的节点,可以看到输出面板中有这个节点的信息
以上是关于GDScriptGodot 插件中,获取添加时的节点的主要内容,如果未能解决你的问题,请参考以下文章
SectionList 获取 renderSectionHeader 中的节索引
使用 Rails.ajax 和 jquery 可排序插件时的 ActionView::MissingTemplate