Godot动态的属性列表 示例
Posted 张学徒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Godot动态的属性列表 示例相关的知识,希望对你有一定的参考价值。
Godot 3.3.2
动态的属性列表
先看效果(注意右边的属性面板):
代码如下:
tool
extends Node2D
var script_count = 0 setget set_script_count
## 面板属性列表
var __script_list = []
## 自定义属性修改的数据
var __script_data = {}
func set_script_count(value):
# script_count 值跟上次相差多少
var diff = value - script_count
# 超过上次的值,则增加属性
if diff > 0:
var property = ""
for i in diff:
# 属性名为 script + 动态的属性的个数
property = "script_" + str(__script_list.size())
__script_list.push_back({
name = property, # 属性名
type = TYPE_OBJECT, # 属性是个对象
hint = PROPERTY_HINT_RESOURCE_TYPE, # 资源
hint_string = "GDScript", # 类型为 GDScript
})
# 比上次的小,则减少属性
elif diff < 0:
var idx = -1
for i in abs(diff):
idx = __script_list.size() - 1
__script_list.remove(idx);
script_count = value
# 更新属性表
property_list_changed_notify()
func _get_property_list():
# 属性列表
var p_list = []
# 属性类别
p_list.append({
name = "Script List",
type = TYPE_NIL,
usage = PROPERTY_USAGE_CATEGORY,
})
# 属性:脚本数量
p_list.append({
name = "script_count",
type = TYPE_INT,
hint = PROPERTY_HINT_RANGE,
hint_string = "0, 10, 1, or_greater"
})
# 属性:脚本列表
p_list.append({
name="_list",
type = TYPE_NIL,
usage = PROPERTY_USAGE_GROUP,
})
p_list.append_array(__script_list)
return p_list
func _set(property, value):
# 记录属性数据
__script_data[property] = value
func _get(property):
# 返回属性数据
if __script_data.has(property):
return __script_data[property]
如果我们想获取这个节点的这个属性,比如这个节点的名字为 Node,则可以进行如下操作
func _ready():
var n = $Node
var s = n.get(script_0) as GDScript # 获取节点的这个属性
if s:
s.reload() # 加载这个脚本,如果不加载的话,这个脚本只是一个 Resource 类型的文件,没有功能
print(s.new()) # 创建一个新的这个脚本对象实例
以上是关于Godot动态的属性列表 示例的主要内容,如果未能解决你的问题,请参考以下文章