+1 vote

I think the title is very descriptive...
I'm currently using only the .gd files because I learnt to do so in the tutorials I followed, but I think the idea of a scene that encapsulates its own script is at least interesting.
I can see some corner cases in both options, but I can't tell which one is better when.
For example:

  • If you use .gd files...

    • Reusability. You can later use the same file in other scene that behaves the same way. Or even in a different project.
    • Scripts keep available from external tools, maybe.
    • File structure grows up to x2 faster.
    • If you'd like to use the same script in two different scenes you may have to deal with different child-nodes maybe, and handle stuff of both scenes.
    • Less OO design/architecture, IMHO. For instance, although you can inherit one script from other via GDScript, it feels forced compared to godot's scene-inheritation feature.
  • If you use embedded scripts...

    • To tidy up the files structure seems easier.
    • Scenes made this way are not only a compound of states, but entities with their own behaviours now... which for some reason I feel more semantic that attaching scripts here and there.
    • You only can edit code properly from the godot editor, and even so IDK if godot text editor fully supports this feature nowadays.
    • Too much info in a single place. Breaks the single-responsability principle.

Tell me...

  • What you think about this?
  • How do you work scripts?
  • Is there any rule-of-thumb to decide if a script should be embedded to the scene or should be a separate .gd file?


in Engine by (24 points)

1 Answer

+2 votes
Best answer

If it exist, it means that some people use it regularly. I would recommend against using builtin scripts. Here a a few reasons in favor of having separate .gd files.

  • Script reuse : To put a generic script on many different nodes.
  • Mass file operations : from simply counting your scripts to managing a license header.
  • Access : You can open your file from the FileSystem dock on top of the scene tree editor.
  • Extra features : Things like class_name, or non-node classes like Ressources. Even if you only use them rarely, using builtin scripts would mean dealing with two types of scripts.
  • Peace of mind : I had a some .scn go corrupt. Even if it unlikely, having separate .gd feels safer.
by (2,688 points)
selected by
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 Frequently asked questions and How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to [email protected] with your username.