0 votes


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 = Spatial.new()

    # adding something to child of root
    var new_node2 = Node.new()

    # adding something to grandchild of root
    var new_node3 = Area.new()

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!

asked Sep 7, 2017 in Engine by cgardner (35 points)

1 Answer

0 votes

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 = Area.new()

    # 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.

answered Jan 13 by MaximeG (41 points)
Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.