I gather this is so easy, but I can't figure it out. If you want to just duplicate an object in the editor, it doesn't make the duplicate unique. I am planning on duplicating and making small edits to each duplicate, including the size of the collision shapes. How do I make these duplicates unique?

PS: Again, not arguing, I'm just curious. Why it isn't automatically set to be unique, does it save space if done this way? I suspect it's similar to Unity's GPU instancing, where everything is considered the same height and you only have to instance the item(s) once, and reproduce them as needed. Just a suspicion.

  • That didn't tell me anything, like where to click? I found myself right-clicking on the item in the hierarchy, searching the list of stuff down below...

    Luckily, I found where to do it in the inspector. For those who find this question later, here is where you have to click:

    On the collision shape:

If they are different, then they are not the same scene. You can duplicate a scene, then click save scene as and choose another name. If the object is not a scene, and just a loose node, then you can click on a asset in the scene (such as the collision shape) and choose make unique. This will make a copy that you can change without the original changing.

This is done for optimization purposes. For example, if you have a game with 100 of the same asset (let's say an enemy sprite) and each one was unique by default, it would take 100x the amount of memory, additional processing for the physics engines, shader context switching, more load on transferring assets to the GPU etc. to the point where the game would be super slow. So the default behavior is the share/cache data unless the programmer specifically needs otherwise.

That didn't tell me anything, like where to click? I found myself right-clicking on the item in the hierarchy, searching the list of stuff down below...

Luckily, I found where to do it in the inspector. For those who find this question later, here is where you have to click:

On the collision shape:

Okay, no problem. I can be more specific next time.

Another dirty trick for meshes is to set it to check Set to Local on.This will make sure that each instance duplicated from that mesh is unique. This is in the inspector under Mesh -> Resource.

Personally out of habit I just don't use duplicate much if at all in godot.

You can also use inherited objects, but I never really figured out how to use it properly.

Yeah, inherited scenes are a little different.

Let's say you make a template. Add a script that has whatever variables and constants in it. Make an inherited scene from the template, and you have the same script and everything from the template on it. Remove the template script, and instead make one that inherits the one from the template, and you have full access to everything from the template script.