2024 Guide to UIToolkit for Unity games

Part 1: Understanding Unity UI Toolkit

Introduction to Unity UI Toolkit

Unity UI Toolkit is a robust and versatile user interface framework designed for building high-performance, scalable interfaces within Unity. This toolkit allows developers to create UI elements that are easily adaptable to various screen sizes and resolutions, using Flexbox (part of the CSS standard for web design). By employing a modern standards-based layout system, it ensures efficient rendering and updates of UI elements, making it suitable for both in-game interfaces and editor extensions.

The Purpose and Benefits of Unity UI Toolkit

The primary purpose of Unity UI Toolkit is to simplify the UI development process in Unity, enabling developers to focus more on gameplay and less on the complexities of UI implementation. This toolkit offers numerous benefits, including enhanced performance through optimized rendering, ease of use with declarative syntax, and the ability to reuse components across different projects. Additionally, its compatibility with Unity’s Editor allows developers to see their UI changes in real-time, significantly speeding up the design process and improving iteration times. This combination of features empowers developers to create immersive and responsive user interfaces efficiently.

Deep Dive into Unity UI Toolkit

The Core Components and their Functionality

Unity UI Toolkit is built around several core components that provide a foundation for constructing sophisticated user interfaces. The first of these is the VisualElement class, the backbone of all UI constructions in the toolkit. VisualElements act as containers that can hold text, images, and other interactive elements, supporting both layout and styling. They are organized in a tree structure, allowing for intricate hierarchies and efficient management of UI elements.

Another pivotal component is UXML (Unity XML), which defines the structure of the UI. Using UXML requires learning a new language, since it is not part of the CSS standard, and deviates unpredictably from the common techniques web designers already know. This also means that a large proportion of the CSS-based tutorials and techniques that already exist won't work in UXML without manual adaption and fixing. USS enables developers to control the appearance of their UI elements, including aspects like colors, fonts, and spacing.

The Essential Toolsets in Unity UI Toolkit

Unity UI Toolkit includes several essential tools that enhance UI development. The UI Builder is a proprietary editing tool that allows developers to design and prototype UIs using a drag-and-drop interface, directly integrating with UXML and USS. This tool accelerates the UI creation process and provides a live preview feature, but it is not well-integrated into the UnityEditor, and it isn't compatible with a running game. You cannot see exactly how your UI will look in-game, you can only see an approximation. Changes you make require restarting the game each time.

For creating dynamic and responsive layouts, the toolkit uses CSS-Flexbox as the Layout Engine. This engine supports various layout options which are crucial for creating adaptable UIs that work across different screen sizes and resolutions. However, UI Toolkit's implementation of Flexbox is incomplete, and advanced UI's are often impossible, e.g. because of the missing/unsupported "z-order" features of CSS.

Together, these components and tools provide a comprehensive environment for building efficient, visually appealing, and responsive UIs in Unity.

Alternatives to UI Toolkit

Get the Benefits of UIToolkit in Unity without learning a new system (FlexBuilder)

The main alternative to UI Toolkit is FlexBuilder (CSS3 UI), which builds on the same CSS-Flexbox Layout Engine, but uses a higher-performance implementation, which is also more compliant with the CSS standards, enabling a wider variety of rich and unique User Interfaces for your games.

FlexBuilder is 100% compatible with core Unity, meaning it works live in the UnityEditor (unlike UIToolkit which requires a separate editing system), and all changes appears instantaneously in your game, with no need to restart. You can run the game, make adjustments, and copy/paste them into the Editor to make them permanent.

Additionally, FlexBuilder is integrated directly into core Unity UI, unlike UI Toolkit (which is incompatible with most existing UI packs, texture packs, asset bundles etc that you have authored, or purchased from the Asset Store). Because FlexBuilder works with UnityUI, all those UI packs will work out of the box, with no customization needed.

Real World applications of Unity UI Toolkit

Case Studies of Unity UI Toolkit in Game Design

Although Unity UI Toolkit has many benefits from the new Layout Engine, it has proven ineffective in runtime games, and is mostly used for Editor customization. The Unity team is working hard on trying to bring performance up to a level with classic Unity UI, with mixed results. One notable exception is in the creation of user interfaces for simple mobile games, where developers utilized the toolkit to re-skin the same UI multiple times for different games, since the interfaces were largely the same.

Developers have also leveraged Unity UI Toolkit's ability to do Responsive Design (a side-effect of using CSS Flexbox internally) to deliver flowing experiences across various device sizes and orientations. However the lack of support for some core CSS features means UI Toolkit is strictly limited in what can be achieved here. Alternatives like FlexBuilder and classic Unity UI are able to achieve a lot more.

Getting the best out of Unity UI Toolkit

Now continue onto Part 2: Using Unity UI Toolkit and getting the best out of CSS Flexbox