What is a "Good plugin"?

I personally do not use plugins most of the time, not that i dislike them, i did try a few, but i felt overwhelmed by some of them because they are hard to manage sometimes, i’m not good at reading someone’s else code. When i tried GECS i even decided to go with my own implementation rather than using it, but failed quickly, as i realised it’s not that easy as i thought.

Funny, but now i’m making my own plugin. And i need your opinion on what “good plugin” is. How it feels, how it looks, and what would you like personally.

Oh and also.

What plugin(s) do you use often, which one is must have, what do you think about plugins?

1 Like

I think a good plugin does a little and goes a long way with it, there’s a reason why DoTween is one of Unity’s oldest and most popular plugins; but Godot has tweens built in. Similarly FMOD and WWise I’ve seen pulled into a project, these massive libraries with restrictive licenses, and they’re only used for pitch shifting and randomizing sounds. Again Godot has these features built in. I have yet to find a plugin I’m always reaching for, but there are some project specific ones that go a long way.

Terrain plugins are usually quite good if your game requires terrain. It’s rather difficult to implement terrain and it needs a lot of tools to manually author it. Terrain3D and Heightmap Terrain I’ve personally liked. The former has great tools to make painting the earth easy, and the latter does a great job generating a nice chunk of land which can be modified later.

Proton Scatter I love mostly for it’s curve-based scattering and gizmos, otherwise it’s not too hard to make a quick scatter script as a @tool node. I dislike it’s custom inspector widgets, would prefer it to use Godot’s style.

I’ve made an Automatic Screenshot Plugin for behind-the-scenes archiving progress and easier social media posts. I wish Godot had editor-only plugins as I would have to had this to all of my projects, but it doesn’t modify the game; and I don’t want to force it upon my coworkers either.

7 Likes

The only plugin I use for Monkanics is Script-IDE:

It just changes the script editor so it has tabs and such. It’s very small, but very useful for development QOL. Plus, it still works with Godot 4.6.

As for what makes a good plugin, it just needs to do ONE SINGULAR THING, and do it very well. I don’t need an “all-in-one” package, I need to implement some sort of specific feature to slot into my existing systems.

4 Likes

A must have for me.

2 Likes

This isn’t technically a “Godot addon”, but using Github desktop is a LITERAL GODSEND, as you don’t have to mess with the horrifically unintuitive (and IMO, outdated as heck) command-line interfaces and instead can press 2 buttons to commit.

1 Like

I plan on using Godot Dialog Manager. I’ve only looked at it.

Proton scatter looks interesting, also.

2 Likes

I really like Dialogue Manager, it’s easy to work with, easy to set up, well documented, and does what you need.

Not incidentally, that’s what I think a good plugin is: useful. As in, supports productivity and doesn’t get in the way of it. To me, it doesn’t matter whether it does one thing or a hundred, as long as it does them well.

3 Likes

Nor me but for a different reason. I usually have strict everything switched on and so many produce warnings that really annoy me. I am also bloat adverse so even for a good plugin, I tend to prefer building it myself, to make it as specific and streamlined for my exact purposes. So generally speaking most plugins have been generalised too much for my tastes. I am also obsessive over naming and if something is not named correctly for me, I just can’t use it. I suppose it’s my own OCD in this matter, although I don’t think it actually does me any favours in the long run.

3 Likes

Most of the plugins I use are ones I’ve made myself. It started as a way to duplicate the Maaack Godot Game Template - which was being used a lot in Godot Wild Jam. I took a look at it, and I found the code to be overly clever and obfuscated for no particular reason. It was closely coupled, and hard to modify. So I decided to make my own.

This resulted initially in my own Game Template Plugin. Over time, I ended up splitting that into a number of smaller plugins.

  • Controller to handle mouse/keyboard and gamepad functionality, such as supporting 3rd- and 1st-person looking in 3D, and finding the appropriate icon for an action based on the last input used by the player.
  • Disk which handles saving and loading both game settings and game data.
  • Display to encompass all the display settings a game has like full screen, multiple monitor support, and changing screensresolution.
  • Sound because initially you couldn’t access metadata in songs, and so I made a Song resource to store that info. I also wanted to create a central place to play sounds from. I’ve since gotten rid of the custom resource and implemented what Godot supports. I’ve also learned that the Godot way is better - having AudioStreamPlayers all over the place. However, there are a few benefits of centralized sound, such as a way to change volume levels. And a way to manage a game music player and a pause menu music player. Plus a way to fade music in, out and crossfade music.
  • State Machine is a pull state machine that is used for many different things. It is simple and easy to use, and as lightweight as I can make it.
  • User Interface is a piece that took the longest to pull out. I moved each of the menus into the plugin that manages that area of the game. And User Interface contains a Screen node and a Splash Screen node. The UI plugin handles managing which screen is displayed and hiding all the others.

Over time, I have also made a number of other plugins to use. They’re all what I need, and if they help other people - great. But I use them over and over in multiple projects. I document so that I will remember how to use them later.

  • Character3D is something I’m working on revamping right now. It’s a 3D character controller that uses examples with KayKit models.
  • Camera3D is a plugin for handling multiple supported 3D camera views for a player, switching between them, and supporting 3rd person and 1st person views.
  • Camera2D ended up being very different from Camera3D, in that it is a collection of components that modify a standard Camera2D when added as child nodes to it. In that way you can stack them and even add and remove them during gameplay. One automatically limits the camera to a TileMapLayer - something I need with almost every2D game. Others handle things like panning, zooming, etc for the various input types including touch screens.
  • CurvedTerrain2D simply encapsulates a single piece of functionality, which is making curved terrain for 2D platformers when all you have is blocks.
  • ChibiAnimatedSprite2D handles importing and setting up sprite frames for CraftPix’s Chibi Sprites Collection. Automating an otherwise tedious and time-consuming process. It also saves space by only reading in animations that are provided.
  • Localization just adds a localization drop-down menu with a number of size and display options. It includes flag icons and works seamlessly with Godot’s localization support. The whole thing, while very simple, makes it VERY easy to localize a game.

Every plugin - even the ones that are interdependent, are made as atomic as possible. So while all the Game Template plugins work with the Localization plugin, nothing breaks if it is not used. When a plugin does require another plugin - I add that information to the readme and include it as part of the repo. In fact, it is this dependency of plugins that has kept me from putting my plugins up in the Godot AssetLib.


As for what I think makes an plugin good: it has a specific use, it does what it says it does, it is well-documented, easy to use, and does not cause problems with existing code in projects that it is added to.

5 Likes