Now that we have covered 3D basics and loading and creating static meshes now it’s time to move on to loading and using animated models. Godot currently supports animation only in COLLADA format, which is supported with varying degrees of success in all popular 3D modelling applications. If you are exporting from Blender, consider using the Godot Blender exporter plugin instead of the built in exporter.
As always there is an HD video of this tutorial available here.
In the video I show the entire process of creating the animated mesh in Blender. If you want to see how it is done, I recommend you watch the video. Unfortunately I could not get COLLADA to export multiple named animations, so I had to create all the animations along a single timeline. If you work in Maya or Max it may be possible to get named animation clips to work correctly.
EDIT – I was mistaken about how to export multiple animations using the Better Collada plugin. It does in fact work and the process is demonstrated in this video. Sorry for that.
Here is the model and animation we are working with:
It’s 100 frames of animation in length driven by 3 bones.
Importing a 3D Model
First let’s start with the process of importing a 3D model. In Godot a 3D Model is imported as a scene. This means it will also have all of the miscellaneous things included in your scene, such as lights and cameras. Be sure to remove those or not export them if you do not want them as part of the hierarchy. Also be sure to save your existing scene before importing a new model, as unsaved changes will be discarded.
Godot only supports dae (COLLADA format) models. Import by selecting Import->3D Scene.
In the resulting dialog, you have to select a file, as well as a location to put it. There are several other things we can set controlling how the mesh is imported, how textures work and even defining animation clips, but the defaults will work for now.
Again, be certain to save your scene before you click Import and Open!
Now your model will load in a new scene. It will default oriented about the origin and there is a good chance your camera will be inside your model, simply use the scroll wheel to zoom out.
Note that the scene has the same name as your model by default. Notice also the hierarchy of nodes it created. At the top is a Spatial, and if you have a skeleton attached and Armature exists with the Mesh(es) as children. If there are animations, there will also be an AnimationPlayer node created. This is what we are going to focus on next.
We want to split our single long animation into a pair of smaller animations. Note that in the import that default FPS of the animation was set to 15FPS ( you can change it if you wish ). Select the AnimationPlayer Node and look in inspector. If you didn’t specify any clips in the import process you will have simple “Default”. If you go to Play you can set the animation that plays on start up:
With the AnimationPlayer selected you will also see that the animation editor is shown at the bottom:
Using this tool, you can duplicate the default animation twice and then crop each animation accordingly. We actually already covered using the AnimationPlayer editor in this post so I wont be covering it again. If you struggle with the process however, simply watch the video and it is shown in detail. I created two animations, BendForward and BendUp by copying and halving the default timeline.
Creating a Model Instance
Now that we’ve got a model to work with, let’s flip back to our original scene and put it to use. Save your scene, then in Godot select Scene->Go To Previous Scene, or simply load the .scn file.
Now we add an instance of our scene to our scenegraph. Click the + icon:
In the file dialog, select your recently created scene. Your scene graph should now look like this:
And your model should now appear in your scene. Not the drop down icon beside the node, this can be used to open that scene or to toggle the visibly of child nodes in your parent scene:
Now that we’ve got our model in our scene and our animations defined, let’s play them in code. The process is remarkably simple. Attach a script to the root of your scene and add the following code:
As you can see, you access the nodes just like any other in Godot. There is even autocompletion on the available animations in the play() method! That’s all you need to do to play the animation. If you refer to the earlier animation tutorial, all the same logic can be used to create extremely complex animation systems.