Can't add nodes to children of root node in import script?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By cgardner
:warning: Old Version Published before Godot 3 was released.


I’m writing a custom import script for .dae scenes coming out of Blender, and I’m having some issues adding new nodes to anything other than the root node. Here is my example code:

extends EditorScenePostImport

func post_import( scene ):

    # adding something to root node
    var new_node =

    # adding something to child of root
    var new_node2 =

    # adding something to grandchild of root
    var new_node3 =

return scene

The sample .dae coming from blender is a Cube named “Parent,” with child Cone named “Child.” It looks like this in Blender: It looks like this in Blender:

Only the first block, adding something to root, actually works. The other blocks just do nothing.

I also tried a few other things on different scene setups, like accessing multiple children of the scene root with scene.get_children() and iterating through to add new nodes to each one, but that also did nothing - no errors or anything.

I am using the Better Collada plugin for Blender, and Godot 2.1.3. The documentation on import scripts is a little sparse, can someone provide some direction on how to accomplish this? Can nodes only be added to the root node from an import script?

Thank you so much!

:bust_in_silhouette: Reply From: MaximeG

Hello there,

Not that I am an expert or anything, but I think a similar scenario worked for me when I added_child() “normally” in the tree, but set the owner to the scene root instead of the actual parent.

The following worked for me :

extends EditorScenePostImport

func post_import(scene):
	# Adding the 'root' script
	# Creating an 'Area', child of 'root'.
	var area =
	# Removing the 'shape' from a rigid body imported from Blender
	var shape = scene.get_node("Collision/shape")
	# Adding the shape to my script generated 'Area'
	# Setting 'root' as the owner of the 'shape'.
	return scene

I think the rationale behind this is the ‘owner’ must be the main object(scene) described by your *.scn file; but that’s really my two cents.