获取属性列表
今天搂草打兔,取得了脚本内容
因为已能取得属性值,那就再进一步,取得属性名列表
if (SameText(drGet.propertyName, "propertyNames", DRGRAPH_FLAG_CASESENSITIVE)) {
List<PropertyInfo> *p_list = new List<PropertyInfo>;
bool p_reversed = true;
destObject->get_property_list(p_list, p_reversed);
cofs << "OK";
for (List<PropertyInfo>::Iterator it = p_list->begin(); it != p_list->end(); ++it) {
Variant value = destObject->get(it->name);
cofs << str_format(U"%s[%s] = %s", it->name.utf8().get_data(),
VarType2String(it->type).c_str(), value.operator String().utf8().get_data());
}
delete p_list;
cofs << GetObjectHint(destObject);
}
相应地,可以取得函数名列表、子对象列表
if (SameText(drGet.propertyName, "methodNames", DRGRAPH_FLAG_CASESENSITIVE)) {
List<MethodInfo> *p_list = new List<MethodInfo>;
destObject->get_method_list(p_list);
cofs << "OK";
for (List<MethodInfo>::Iterator it = p_list->begin(); it != p_list->end(); ++it) {
String content = it->name + "(";
for (List<PropertyInfo>::Iterator iter = it->arguments.begin(); iter != it->arguments.end(); ++iter) {
if (iter != it->arguments.begin())
content += ", ";
content += str_format("%s %s", VarType2String(iter->type).c_str(), iter->name.utf8().get_data()).c_str();
}
content += ")";
cofs << content;
}
delete p_list;
cofs << GetObjectHint(destObject);
}
if (SameText(drGet.propertyName, "childNames", DRGRAPH_FLAG_CASESENSITIVE)) {
if (Node *node = dynamic_cast<Node *>(destObject)) {
int count = node->get_child_count();
for (int i = 0; i < count; ++i) {
Node *subNode = node->get_child(i);
cofs << str_format(U"%s[%s]", subNode->get_name().operator String().utf8().get_data(),
subNode->get_class_name().operator String().utf8().get_data());
}
cofs << GetObjectHint(destObject);
}
}
其中,获取对象信息(GetObjectHint)是期望能显示对象的一些相应信息
#define CAST(T, ptr) dynamic_cast<T>(static_cast<T>(ptr))
std::string GetObjectHint(void* ptr) {
String result = U"未处理对象";
if (Object *object = CAST(Object *, ptr)) {
result = str_format(U" ---==== [%s]类型对象 0X%08x ====---", object->get_class_name().operator String().utf8().get_data(), int(ptr));
if (Node *node = CAST(Node *, ptr)) {
String path = node->get_name();
Node *parent = node->get_parent();
while (parent) {
path = parent->get_name().operator String() + U"." + path;
parent = parent->get_parent();
}
result += U":\n\t\t\t\t\t\t路径信息:";
result += path + U"\n\t\t\t\t\t\t子对象信息:";
int count = node->get_child_count();
for (int i =
获取Godot对象属性与脚本信息

文章讲述了如何通过编程获取Godot引擎中的对象属性列表、函数名列表和子对象列表。特别地,讨论了当属性名包含script/source时,如何获取到对应的脚本内容。此外,还展示了如何获取对象的详细信息,包括路径和子对象详情。测试表明,可以成功获取自定义结构的属性名列表,尽管某些属性可能为空。
最低0.47元/天 解锁文章
1298

被折叠的 条评论
为什么被折叠?



