MENU

Fun & Interesting

Godot scenes are kinda weird

RobProductionsGames 3,713 2 weeks ago
Video Not Working? Fix It Now

I've been learning a lot about Godot recently and along the way, I've been trying to smooth out workflow problems by engaging in discussions across community channels and even submitting pull requests to add new features to the engine. But when I stumbled across a few weird fundamental issues with Godot's Scenes, it was much easier to explain them in video form. So let's take a look at these problems and see what can be done to fix them! When it comes to level design and UI, I tend to rely on prefab root transformations quite a lot in Unity. For example, I'm currently building a park level for my new game Burden of Truth that features a lot of nature objects placed by hand, like rocks and bushes. To create variations, I will sometimes scale the rocks and vegetation props to create more unique little setpieces and add variation throughout the level, but I also need to rely on the default scale being dynamic in case I need to fix something across the "regular" objects. For example, let's say I've noticed that the texture of a plant is too pixelated, so I want to scale it down everywhere, but leave the distant plants the same because I've scaled them up to look good at a distance already. Using a child node to scale the plant down would ruin the scale that I decided for the distant instances. This is why I believe we need root transformations to cascade from the base scene to instances. Also, if the root was already scaled either by mistake or at a chosen default value when the scene was created, it's much more complicated to manage the instances and make sure that they are using the correct defaults. If I was to "fix" the problem by scaling the base scene's root to 1, it wouldn't fix all of the instances (potentially hundreds of them depending on the level) because scale changes don't cascade. This means that all scenes are locked to whatever scale you chose when you created them, with no real way to change it unless you go through all instances. And when it comes to overrides, I worry about accidentally syncing certain properties while constructing larger Scenes. Let's use an example of me building a vehicle and placing prefab turrets across the vehicle surface. Of course we have the same scaling issue if I need each turret to take up different amounts of space on the vehicle, but when it comes to properties, let's say that each turret has a specific damage, defense, and fire rate value. Unless I start pinning every single property on all of the turrets, I'd need to avoid changing the default values multiple times or else it could resync with one of the instances and mess up that unique value. So ultimately I'm finding it hard to picture designing levels or creating nested prefabs without being extra careful about every single change that's made to each instance. This makes the level design process sound tedious instead of fun, and I believe the two suggestions explained in the video (remove the pin system and let root transforms cascade) shouldn't interfere with any existing workflows while making things less confusing and allowing developers to create scenes in a more freeform and creative way. And especially note that people who are less familiar with game engines (artists who use Godot as a level design tool) might not know about these drawbacks and would prefer to just scale the root/change values to create the look they want directly. But feel free to let me know what you think in the comments! Check out the "apply instance changes" proposal here: https://github.com/godotengine/godot/pull/85562 And the proposal that can start us down the path of fixing these issues here: https://github.com/godotengine/godot-proposals/issues/9482 You can watch my last video about Godot here: https://www.youtube.com/watch?v=jcLc5SJOR7s 0:00 Intro 1:06 What are scenes? 2:53 Problem 1: Overrides 6:42 Problem 2: Root Transformations 11:50 Improving scenes 14:36 Conclusion ~~LINKS~~ As always, if you'd like to keep up with my latest updates, be sure to follow me on Twitter or Bluesky! https://twitter.com/RobProductions https://bsky.app/profile/robproductions.bsky.social I have a Discord server! Feel free to join and hang out! https://discord.com/invite/GXxZdX9vN5 #godot #gamedev #indiegame #indiedev #gaming #development #programming #gdscript #tutorial #computerscience #gameengine #workflow #devlog #coding ?I have an official website here! https://www.robproductionsgames.com/ ?You can check out my Steam Developer Page here! https://store.steampowered.com/developer/robproductions ?Check out my concept art and WIP screenshots over on Instagram! https://www.instagram.com/robproductionsgames/ ?Subscribe to the channel for more looks behind the scenes of my development process! https://www.youtube.com/channel/UCVRHCqDn1UGPTDYEJKtaMR

Comment