Creating UI animations for games is not just decoration, but a functional element that guides the player. We integrate animations into the UI as a signaling system: every transition, confirmation, reward, or warning should be readable by the player without reading text. Proper animation reduces cognitive load and speeds up interaction. Bad animation irritates: too slow delays gameplay, too abrupt goes unnoticed. Our engineers have 10+ years of experience in game development with Unity and Unreal, and we guarantee every animation passes a performance check. Contact us to get an animation prototype in 2 days.
UI Animation Creation: Tool Selection
Animator + Animation Clips – classic under Unity. Works via Animator Controller on a Canvas object. Pros: visibility in the editor, support for Blend Trees, easy control via SetTrigger/SetBool. Cons: difficult to animate to dynamic positions. Suitable for fixed transitions: open/close screen, pulse effect on button.
DOTween – de facto standard for code-driven UI animations. RectTransform.DOAnchorPos(), CanvasGroup.DOFade(), Image.DOColor() via fluent API with sequencing. DOTween.Sequence() with .Append(), .Join(), .InsertCallback() builds complex coordinated animations. Important: when Time.timeScale = 0 animations stop – use SetUpdate(UpdateType.Normal, true) for ignoreTimeScale.
UI Toolkit Transitions – CSS-like transitions: transition-property: translate; transition-duration: 300ms;. The most declarative, but limited to transforms, opacity, and color. Ideal for hover effects and simple states.
Why Easing and Timing Matter
Duration ranges that work:
- Micro-feedback (hover, press): 80–120 ms
- Appearance/disappearance of small element: 150–200 ms
- Screen transition: 250–350 ms
- Rewards and fanfare animations: 600–1200 ms
Anything over 400 ms for utilitarian transitions irritates on repeated openings. Player opens inventory a hundred times per session – 600 ms transition = a minute of wasted waiting.
Easing functions are not symmetric: Ease Out (fast start, slow end) – for appearing elements; Ease In (slow start, fast end) – for disappearing; Ease In/Out – for state transitions. Linear easing is almost never needed – looks mechanical.
Overshoot and spring – when physics is justified. Ease.OutBack (strength 1.5–2.0) works great for pop-up notifications: element "jumps" beyond bounds and returns. Ease.OutElastic – for energetic rewards. But on fullscreen panels overshoot looks unnatural – use only for compact elements.
Case Study from Our Practice: Item Obtained Notification
On a client's project, we needed an animation for an item obtained notification. Implementation via DOTween Sequence:
- Icon flies in from bottom with
Ease.OutBackover 200 ms - Simultaneously (+Join) fade
CanvasGroup.alphafrom 0 to 1 - After 200 ms, text appears via
DOFadeover 150 ms (+AppendInterval) - Hold for 2 s, then disappear: slide right + fade over 200 ms with
Ease.InCubic
The entire sequence – 15 lines of code, reused through NotificationController.Show(item). Solved the queue problem: when quickly obtaining multiple items, the new notification displaces the old via DOTween.Kill(targetTransform).
How Animations Affect FPS
Animations in Canvas can cause Canvas Rebuild when changing position, size, or opacity. CanvasGroup.alpha does not trigger Rebuild, but changing RectTransform.position does. Animate via DOAnchorPos (local space) instead of DOMove. For scale animations, use transform.DOScale() – scale does not affect Layout, it's the cheapest type. Split animated elements into separate Canvases: if an icon blinks, its Rebuild should not rebuild the entire HUD.
| Animation Type | Performance Impact | Recommendation |
|---|---|---|
| Scale | Low (cached by GPU) | Use for buttons and icons |
| Position (AnchoredPosition) | Medium (triggers layout) | Use for screen transitions |
| Alpha (CanvasGroup) | Low (no Rebuild) | Ideal for fade-in/out |
| Rotation | High (triggers Rebuild) | Avoid in frequent animations |
What to Choose for Complex Sequences
Comparison between DOTween and Animator for multi-step animations: DOTween wins in flexibility – 3 times faster implementation (code-based), but Animator provides better visibility in editor. If sequence is fixed (e.g., shop open animation), Animator is simpler. If dynamic (depends on battle data), DOTween is more efficient.
State Animation for Buttons: Nuances
The standard Button with ColorTween is limited. Use UIAnimation on DOTween or IPointerEnter/Exit/Down handlers. Scale animation on press (scale 0.95 over 80 ms, Ease.OutQuad) – simple and effective tactile feedback for mobile platforms.
How to Implement a Notification Animation Queue Step by Step
- On receiving a new notification, check if a tween is active. If yes, call
DOTween.Kill(targetTransform)on it. - Create a new Sequence with desired animations (appear, hold, disappear).
- Start the sequence via
sequence.Play(). - To prevent accumulation, set a flag that animation is busy, and reset it on completion.
This approach ensures smooth displacement of old notifications and maintains performance even under frequent calls.
What Our Work Includes
- Animation prototype on a separate Canvas
- Integration into existing Unity/Unreal project
- Performance optimization (minimizing Canvas Rebuild)
- Documentation on playback and configuration
- Post-implementation support
| Work Type | Timelines |
|---|---|
| Animations for one screen (5–10 transitions) | 2–5 days |
| Full UI kit animation (10–15 screens) | 2–5 weeks |
| Complex fanfare animations | 1–2 weeks |
| Code-driven animation system | 1–3 weeks |
Cost is calculated individually after requirements analysis. We will evaluate your project and propose the optimal solution. Order turnkey UI animation development or contact us for a consultation.
More about Canvas Rebuild: Unity Manual - Canvas





