I already did all this stuff and I don't want to break everything just trying to add a new idle animation, is it ok if I just load a new file with all the old animations + the new one or is there a better and more precise way?
It depends on what is "all the stuff".
If you:
- Created an scene where you instantiate your model: you can replace the model.
- Created a new scene derived from the model and used that: you can replace the model.
- Saved your model as a Godot scene: you will have to do the stuff again.
When you import your model, some resources will be externals. The changes you made to them in Godot will be preserved when you replace the model. By default meshes are internal, animations are internal, and materials are external. Refer to the import settings of the model.
I would like to point out that Godot 4 gives you much more control on how you import the model, plus it can work with .blend files if you configure the path to your blender executable.
But what is the process?
About saving the model as a Godot scene… After being aware of all the workflow issues it causes, I would only consider it if I will not be doing more modifications to the model, because the game is basically done, and you are getting ready for a release… And then only if the model is having issue loading on the exported game (not saving the model file can reduce the size of the exported game and give you an smoother load, your mileage may vary).
As per inheritance, I find it more error prone, and also there has been bugs related to propagating changes to inherited scenes. So I rather a void it.
So I opt for composition. I create a new scene where I instantiate the model. In this scene I create whatever else I need using it. In particular I would enable editable children if I want to add something inside the model scene (e.g. inverse kinematics or bone attachments). And the rest of the project will only use this new scene. Then re-importing the model is no issue.
This composition approach can be extended further. The most extreme example I can think of is like this: a version of the scene that has game logic (AI, Inputs, etc), which instantiate a version of the scene that has physics (colliders, ray-casts, etc), which instantiates a version of the scene that has graphics (bone attachments, particle effects, etc), which instantiates the model scene.
is it ok if I just load a new file with all the old animations + the new one or is there a better and more precise way?
Yes, that is what you would do.
Now, let us say, you messed up… You have saved the model as a Godot scene, and you are not referencing the model file anywhere (at which point you can remove the model file from the project).
You can add the new file, Godot will import it. Then:
- Open the model.
- Select the
AnimationPlayer
.
- On the "Animations" panel select the animation you want.
- Click the bottom "Animation" (on the left of the animation list drop down) and select "Save as...". This will save the animation to a file.
Then you can go to your old scene and follow similar steps. Except instead of "Save as..." select "Load" and pick the file you saved.
Note: This does not do proper animation re-targeting. But assuming the skeleton is the same, there should be no issue.
should I just switch to Unity or other game engines because of this?
As you have figured out this is a common confusion for a beginner in Godot. I messed it up myself and learned to dealt with it.
I'd argue the hassle is nothing compared to recreating a game.
And as I said above, I recommend you instantiate the model scene (not inheriting from it, and no saving it as a Godot scene) to avoid problems in the future. And then it is no hassle.
At the end the decision is up to you. If you want to change engines, you don't need somebody from the Internet to tell you.