diff --git a/core/register_core_types.cpp b/core/register_core_types.cpp index fa51bd8bace..5e21e69c24f 100644 --- a/core/register_core_types.cpp +++ b/core/register_core_types.cpp @@ -176,7 +176,7 @@ void register_core_types() { GDREGISTER_VIRTUAL_CLASS(ScriptExtension); GDREGISTER_VIRTUAL_CLASS(ScriptLanguageExtension); - GDREGISTER_VIRTUAL_CLASS(MissingResource); + GDREGISTER_CLASS(MissingResource); GDREGISTER_CLASS(Image); GDREGISTER_CLASS(Shortcut); diff --git a/editor/gui/create_dialog.cpp b/editor/gui/create_dialog.cpp index 2a3fc1cb4c3..0dac57ccc65 100644 --- a/editor/gui/create_dialog.cpp +++ b/editor/gui/create_dialog.cpp @@ -856,6 +856,8 @@ CreateDialog::CreateDialog() { type_blacklist.insert("PluginScript"); // PluginScript must be initialized before use, which is not possible here. type_blacklist.insert("ScriptCreateDialog"); // This is an exposed editor Node that doesn't have an Editor prefix. + type_blacklist.insert("MissingNode"); + type_blacklist.insert("MissingResource"); HSplitContainer *hsc = memnew(HSplitContainer); add_child(hsc); diff --git a/editor/inspector/editor_resource_picker.cpp b/editor/inspector/editor_resource_picker.cpp index e3cf965819f..fde30e2077b 100644 --- a/editor/inspector/editor_resource_picker.cpp +++ b/editor/inspector/editor_resource_picker.cpp @@ -671,6 +671,18 @@ String EditorResourcePicker::_get_resource_type(const Ref &p_resource) return res_type; } +static bool _should_hide_type(const StringName &p_type) { + if (ClassDB::is_virtual(p_type)) { + return true; + } + + if (p_type == SNAME("MissingResource")) { + return true; + } + + return false; +} + static void _add_allowed_type(const StringName &p_type, List *p_vector) { if (p_vector->find(p_type)) { // Already added. @@ -678,9 +690,9 @@ static void _add_allowed_type(const StringName &p_type, List *p_vect } if (ClassDB::class_exists(p_type)) { - // Engine class, + // Engine class. - if (!ClassDB::is_virtual(p_type)) { + if (!_should_hide_type(p_type)) { p_vector->push_back(p_type); } diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp index 97a2076598a..fbfe13c4c4e 100644 --- a/scene/register_scene_types.cpp +++ b/scene/register_scene_types.cpp @@ -411,7 +411,7 @@ void register_scene_types() { OS::get_singleton()->yield(); // may take time to init GDREGISTER_CLASS(Node); - GDREGISTER_VIRTUAL_CLASS(MissingNode); + GDREGISTER_CLASS(MissingNode); GDREGISTER_ABSTRACT_CLASS(InstancePlaceholder); GDREGISTER_ABSTRACT_CLASS(CanvasItem);