The Untold Engine simplifies adding animations to your rigged models, allowing for lifelike movement and dynamic interactions. This guide will show you how to set up and play animations for a rigged model.
Start by creating an entity to represent your animated model.
let redPlayer = createEntity()Load your rigged model's .untold runtime asset and link it to the entity. This step ensures the entity is visually represented in the scene.
setEntityMesh(entityId: redPlayer, filename: "redplayer", withExtension: "untold")Load the animation data for your model by providing the exported animation .untold file and a name to reference the animation later.
setEntityAnimations(entityId: redPlayer, filename: "running", withExtension: "untold", name: "running")For hierarchical or multi-mesh .untold assets, call animation APIs on the asset root. The engine resolves the root to every skinned render descendant and installs the clip on each target that has both a SkeletonComponent and a RenderComponent. This keeps split characters or multi-part rigged models animated as one actor.
Trigger the animation by referencing its name. This will set the animation to play on the entity.
changeAnimation(entityId: redPlayer, name: "running")changeAnimation(entityId:name:withPause:), pauseAnimationComponent(entityId:isPaused:), setAnimationPlaybackSpeed(entityId:speed:), and removeAnimationClip(entityId:animationClip:) all operate on the entity and any descendant animation components. getAllAnimationClips(entityId:) returns the union of clip names found under the entity. getAnimationPlaybackSpeed(entityId:) returns the speed from the first resolved animation component.
To pause the current animation, simply call the following function. The animation component will be paused for the current entity.
pauseAnimationComponent(entityId: redPlayer, isPaused: true)Once the animation is set up:
- Run the project: Your model will appear in the game window.
- Click on "Play" to enter Game Mode:
- The model will play the assigned animation in real time.
- Name Animations Clearly: Use descriptive names like "running" or "jumping" to make it easier to manage multiple animations.
- For split rigged assets, treat the load root as the public animation handle; do not manually chase child mesh entities unless you need custom per-part behavior.
- Debug Orientation Issues: If the model’s animation appears misaligned, revisit the flip parameter or check the model’s export settings.
- Combine Animations: For complex behaviors, load multiple animations (e.g., walking, idle, jumping) and switch between them dynamically.