Introducing Craftland Studio PC’s brand new animation controller system.
Features
Craftland Studio PC’s animation controller now supports:
- Preview animations
- Manage animation clips playback and transitions in a track format
- Manage groups of animation clips using states
- Split rig parts to play only specific rig animations within an animation clip
- Add keyframes and broadcast events at keyframes to implement script logic.
Resource Preparation
To use the Animation Controller, you need to prepare:
- A model
- Animation resources matching the model
The editor already includes built-in FreeFire characters and their corresponding Animation:
Entry
To use the Animation controller, you need to create an Animation Controller file:

Double-click to open the newly created animation controller file, and the Animation editing UI will open:

Using the model
Click on the model bar or drag the model into the interface to preview the model that will play the Animation.

If the model has an Appearance component and suitable rigs and appearances, the preview window will display the model. You can zoom in or out using the mouse wheel, drag the camera using the middle mouse button, or hold down the right mouse button to rotate the camera—just like in the Scene editor.
If you want to use the default FreeFire character or pet appearance, you can find suitable appearances in the Library/FFUMA directory under the project directory. These appearances will also be displayed in the selector.
Add animation clips
Drag an animation from the project onto the track to add an animation clip. If you don’t know which animations are available in the project, use the Add Animation feature to browse all animations. However, you always need to ensure that the animation matches the model. Typically, incompatible animations will not play, but sometimes animations may behave strangely: for example, certain parts of the model may be abnormally stretched or compressed.

Animation Clip Settings
In Project, you can only view animation clip information. However, after dragging an animation into the track, you can edit the parameters for the current track in the inspector panel.
-
Clip: This clip uses the specified animation. You can manually change the animation clip.
-
Playback Speed: The speed at which the animation plays. 1 is the default speed.
-
Wrap Mode: After extending the animation clip, this option determines how the extended portion loops.
- Hold: Maintains the animation pose of the last frame.
- Loop: Loop the Animation clip in the extended portion.
- Forever Loop: Continuously loop the Animation clip after it ends, rendering subsequent clips ineffective.
- None: No action; hard cut back to the default pose.
-
Post-Extrapolate: How to handle the transition between the current clip and the next clip.
- None: No action; hard cut back to the default pose.
- Maintain: Maintain the animation pose of the last frame
- Loop: Loop the animation segment in the section between two segments
- When the backward push setting is set to Maintain or Loop, it can be clearly seen at the end of the segment:
-
Blend Fade Length: The duration of the transition animation when switching to this animation clip.
-
During the Blend In Duration, the animation system automatically reduces the weight of the previous animation and increases the weight of this animation clip until the fade-in time ends.
- Play this Animation clip completely when the fade-in time ends
- If this parameter is set to 0, the transition will occur immediately, which may look strange, but sometimes a hard cut is needed for immediate Animation, such as firing a gun or dodging.
-
When there is a transition from Animation A to Animation B in the track, the fade-in duration for Animation B is automatically set based on the overlap duration of the two clips in the track:
-
Even if there are no directly connected animation clips on the track, when using the animation controller in practice, there will be cases where the animation “switches to this clip.” For example, when switching from the ‘sitting’ state to the “running” state, if the running state uses only one animation clip, it will transition smoothly from sitting to running based on this parameter. For details on states, please refer to the section below.
-
-
Start time: The time at which this animation clip begins playing on the track
-
End time: Equal to the start time plus the playback duration, cannot be edited, and is automatically determined based on the start time and playback duration
-
Playback length: The length of the clip’s playback. When longer than the resource length, the loop mode parameter takes effect; when shorter than the resource length, the animation is truncated from the end
-
Resource length: The actual length of the animation resource, cannot be edited, and is determined by the animation resource itself.
*Stretching and compressing animation clips
You can change the length of an animation segment by dragging it. If the dragged length is shorter than the segment’s length, the animation will be truncated. If the dragged length is longer than the animation segment, an additional segment length will be added after the default animation plays. The handling of this additional segment depends on the Wrap mode set in the segment’s Inspector.
Animation Clip Merging
As mentioned earlier when discussing blend-in duration, when animation clip A transitions to animation clip B, the transition occurs within the blend-in duration of animation clip B.
Now we have two animations: 1 is both hands lifting something, and 2 is one hand:
1:
2:
If we simply concatenate the two, it appears as though the single-hand animation begins immediately after the double-hand animation ends:
If we use blending, it appears as though the single-hand animation begins before the double-hand animation has completely ended:
As you can see, animation 2 has already started before animation 1 has finished, and the weight gradually shifts toward animation 2, with animation 2 playing completely by the end of the blending.
By using animation blending, you can make the transition between animations more natural.
If we simply concatenate the two, it appears as though the single-hand animation begins immediately after the double-hand animation ends:If we use blending, it appears as though the single-hand animation begins before the double-hand animation has completely ended:
As you can see, animation 2 has already started before animation 1 has finished, and the weight gradually shifts toward animation 2. By the time the blending ends, animation 2 is fully played.Animation blending can make Animation transitions more natural.> If you set a fade-in time before the first frame of a state, automatic blending will be applied when transitioning to this state from other states.
Animation Preview
When previewing the animation effects, you can make good use of the panel operations and information.
The panel allows you to perform the following operations:
-
Jump to the beginning, jump to the end
-
Next frame, previous frame
-
Pause, play
Additionally, the right side displays the frame number and time starting from the animation segment. Generally, animations play at a fixed rate of 30 frames per second.
Add keyframes
Click on any point in the track to add a keyframe.
You can also delete this keyframe by selecting it.
Keyframes are manually marked key points in the Animation. You can also add events to them to serve the script.
Events
Select Add Animation Event in the inspector panel of the keyframe to broadcast a custom event at the specified frame number in the current Animation:
Body Part Animation
When you need to play an animation on only part of the body, such as different animations for the upper and lower body, you need to use body part animation.
First, you need to create a rig profile:

The rig configuration file can specify a portion of the rig’s bone nodes, which we refer to as body parts.
After selecting a specific rig, you can see all the nodes in the rig.
By creating body parts, you can specify a specific set of bone nodes to play Animation, thereby achieving the requirement of playing Animation for specific body parts only. For example, we will separate the upper and lower body rigs:
Override mode means that when multiple Animations exist for the same rig node, the Animation with the highest priority will override the others. In contrast, Additive mode attempts to blend Animations with lower priorities.
However, the blending mode has higher requirements for Animation resources and adjustments, and even minor issues can result in poor performance. It is recommended to use the Override mode first.
*Priority: In rig parts, tracks, and states, the lower the priority, the higher the priority. In the above figure, the priority of the Top rig part is higher than that of the Bottom rig part.
Drag the configured rig configuration file into the edit panel, and you will find the newly configured rig parts in the track dropdown menu:
Each track corresponds to a rig part, and the Base Track is selected by default for all rig parts.
Next, let’s use two different Animations to see how it works.
We will take two Animation segments:
Squatting and walking:
Walking with a gun:
As you can see, the stride is larger when walking with a gun. Now let’s take the upper body animation from squatting and walking and the lower body animation from walking with a gun:
The animation for walking with a gun is shorter, so let’s extend the animation for walking with a gun to align the two, and set the loop mode to “loop.”
You can see that the Animation has changed to:
The upper body animation for crouching walk and the lower body animation for gun-holding walk are used simultaneously.
If some rigs are not assigned any animation when using rig part animations, they will use the IDLE animation.
State
All of these tracks and animation clips combined form a state, which can be seen in the list of current animation controllers on the left side of the panel:
When using the animation controller in practice, operations are performed on states. Playing a state means playing all its tracks starting from frame 0.
Therefore, when editing the animation controller, you can plan how many states you want to have and edit the appropriate combination of animation clips for each state. For example, the states of a small animal are: Idle, Moving, Eating, Alert, and Running away.
The IDLE state must exist; it is the default state of an Animation controller, and the IDLE state must be set to loop playback.
block script
Using scripts, you can play or stop a specified state for an entity with an animation controller attached, or dynamically modify the weight of body part animation weights.
How to use
Drag a suitable model into the Scene:
Add the Animation Controller Attachable component to it:
Then add the created Animation controller:
Now the model will default to playing the IDLE state. Use the script to switch the playback state on the actual device when appropriate:
When the player fires, change the playback state of miniKelly