I use three metrics to define efficiency of those workflows:
- is it quick?
- is it to the point?
- is it modular?
If I spend too much time doing something, or the tool doesn’t do what I need to do, it’s a fail. But its an even bigger fail when both happen.
So I have an area in my game where there are a lot of moving parts. I wanted to make a modular “kit” of an animated prop that I can then place in various areas and it would work relative to angle and placement (think giant moving cog). I also wanted the player to stand on it and be moved by it through its motion.
Currently, there are two ways to do this that I know of:
1) Sequence the cogs with additive from base animations:
One has to first figure out the weirdness that comes with animating a prop 360 degrees in sequences, sounds easy but the only way I know how to do it is to manually set the angles in 3 keyframes by typing, anything else and the cog will do completely irrelevant animations. If I saw all this jankiness as a beginner, I would have left the engine thinking that if sequences can’t handle simple rotations, they won’t be able to handle even more complex stuff. To repro this issue, record a novice creator and tell them to rotate an actor in “roll” 360 degrees on sequences. I bet you they won’t be able to do it.
But alas, say this is done, I have to redo it everytime I place a new cog now, because its also not modular. I have to either make a new cinematic sequence device with it, or add it to the sequence that I already have. Now trying to do that is tricky as well, because additive from base is very weird sometimes, it bugs sequences unless you close and reopen the tab, sometimes freezing assets in weird positions until you restart. Its a bit messy.
So approach one has failed the test of being fast, passed the test of being to the point (when it works) and failed the modular test.
Now let’s move to approach number 2, one that I tried for the first time yesterday.
2) Import an animation from external software and hook it to a skeletal mesh with a physics asset.
If you thought the first approach was slow, wait till you see this one. Oh boy. This is partly because I have to figure out the right import options for the asset from external software, because once the skeletal mesh is in, there is no transform baking like we have on static meshes (love that tool). You messed up the units on Blender? Prop will be super small. You clicked NLA strips on Blender? Nada. You forgot to tick "skeletal meshes on imports dialogue (even though I am importing a skeletal mesh, has an armature in it)? Nothing will show imported, no animations, no skeleton.
And to this day I am not sure why skeletons are different from skeletal meshes, I am a beginner on this front but it always confuses me and I always press the wrong one when I want to do something. Why is it called preview mesh, when it is the mesh that defines everything? “Preview” seems like a temporary setting to see what you are doing, not the defining setting (just confusing is all). Why is it so weird to make a physics asset for a skeletal mesh? The option is obscure, and making the collision boxes on the root bone is even more weird. You have to right click the root bone to copy paste collision shapes that you have selected instead of Ctrl_C and Ctrl+V, or Alt+drag doesn’t work, why so inconsistent with all the other editors? Took me a day to figure all this out and my 3 previous attempts have failed because physics asset files were unsupported.
Anyhow, so I somehow managed to make the cog have collision (had to redo it 3 times because of many weird issues I encountered), then I drag the animation in the world and it seems to work when the cog is rotated around. The player is moved by it too. However, this issue completely blocked me afterward:
This means I can’t do it this way, I have to go back on attempt #1 and rework everything.
So was it fast? No, way slower that approach 1 which is also slow.
Was it to the point? No, player locomotion doesn’t work
Was it modular? Yes, it was very easy to use once you had it in the world as animation, even though copying it will not make it show in live edit.
So final thoughts? We need a new workflow that can take both approaches and take their benefits then turn them into a module that entities can use, which works correctly with servers and multiple players. Defining animations through behaviors, then adjusting settings or converting to a sequence would be the easiest/best approach.
An example:
You have an entity, you define an animation, then after that you select from a list of templates. I select “Piston”. After that I am presented with a few exposed dynamic parameters, like “time”, “spacing”, and “bounce”. There is also a gizmo on the scene while I have it selected, that I can rotate to define the axis of animation. The animation already has it adjusted for me though, because it tracks world length/width/height and auto-applies it to the axis that takes the most space in the world (only for that template, because you clicked it wanting to set up a piston and pistons are always thin). Lastly, if I want, I can hit the “convert to animation” button, and I can get a sequence applied to it, which the tool has converted the piston animation and my settings to it, slotted the sequence into the animation, and allowing me to tweak them further should I wish.
Some other animation template examples: Pickup spin/hover, Water Float, Piston Move, Rotate, Piston Rotate, Endless Move, Path Move, Orbit, Gravity Fall Move, Gravity Fall Rotate, Elastic Move, Elastic Rotate, Hover, Shake, Collect, Destroy, Create, Wind Shake, Wind Rotate
Also this system could support NPC character animations too, like "Search, work, look around, lean on wall, lean on floor, Run, etc.
The goal of any tool is to be useful to the user, and it should avoid passing developer problems to them.