Odin 3.3 introduces a range of new features and improvements, including:
While Unity's localization system offers a robust framework for creating multilingual projects its accompanying tools can sometimes fall short, making the experience less than optimal. Recognizing this gap, we have developed replacements for the most important and frequently used aspects of the localization system, aimed at enhancing the existing authoring workflow.
We've tried to strike a balance between keeping the UX as familiar as possible while changing and improving the workflow where it made sense and where the old system was lacking.
Let's take a look at some of the awesome new features and improvements we've introduced.
We've developed a replacement editor for Unity's Localization Tables window that can operate alongside Unity's localization tables window but aims to completely replace its functionality. Unity's original Localization Tables window, which often felt cluttered and became increasingly challenging to navigate with the addition of more tables and entries, has been redesigned with a focus on clarity, usability, and performance. We've ensured that the interface remains intuitive and accessible, regardless of the scale of your localization data. This redesign introduces numerous helpful features, making it easier to concentrate on specific parts of your localization data.
One of the key enhancements we've introduced is the consolidation of the core localization process into a single, centralized window. This allows you to manage all aspects of your localization data through one unified interface, significantly streamlining the workflow. Now, tasks such as creating, adding, and removing tables from your table collection can be accomplished directly within this window, eliminating the need to navigate through the project to locate the relevant asset.
This feature enables you to pin tables to keep them always visible, ensuring they remain readily accessible while you add, modify, or compare other pieces of data. This functionality is crucial for maintaining a smooth workflow, as it simplifies referencing back to other locale entries while modifying a different one.
In addition to pinning, you now have the ability to hide specific tables, enabling a focused view on a subset of your data. This feature further declutters the interface and allows you to concentrate exclusively on the elements that are currently important, ensuring that none of the available screen real estate is occupied by irrelevant data.
To streamline the process further, we've integrated inline buttons that instantly open the assets within your table either in the inspector or the explorer. This eliminates the cumbersome process of manually navigating through the project to locate and modify assets, significantly speeding up the editing and updating process.
Syntax highlighting is now integrated into string editing by default, eliminating the need for activating a specific debug mode. Previously, the absence of syntax highlighting during editing rendered the process cumbersome and error-prone. This enhancement guarantees that you can edit your localization and identify syntax errors or inconsistencies at a glance.
We've overhauled the metadata inspector to more closely align with Unity's default component inspector, enhancing familiarity, ease of use, and legibility. Additionally, you are now able to use Odin's familiar attribute and drawer workflow to customize how your metadata is drawn. This overhaul also introduces several smaller quality-of-life features, enabling you to:
Our implementation is all about elevating the user experience, with a primary focus on speed and responsiveness. Whether you're opening a Collection containing thousands of Shared Entries, editing a String Table Entry among hundreds, or efficiently handling tasks like Resizing, Sorting, and Filtering thousands of Shared Entries, we've streamlined the processes to make them feel virtually instantaneous.
We are excited to receive your feedback during the beta phase. This will enable us to address critical bugs that may emerge, enhance existing features, or introduce new features that the community would like to see.
For the final release, we already have several improvements and additions in mind, including:
Undo Handling: We are actively exploring the development of an internal solution to enhance Undo actions, with a focus on achieving near-instantaneous Undo and Redo operations, especially when managing large Collections.
Localized Reference Drawer: We aim to improve the existing Localized Reference Drawer to complete the localization workflow improvements, making it less cluttered and easier to use. This improvement will also enable us to connect it to the new localization window, allowing users to open a specific localized reference and focus on it in the new window with a single click.
In this update, we're thrilled to announce a complete revamp of the Type Selector, accompanied by it's very own custom editor!
The revamped Type Selector offers enhanced responsiveness and customization. Now, you have fine control over each type's display, determining their appearance, priority, order, visibility, and validity. Additionally, we've introduced versatile customization options for the content displayed by the selector, as well as how it presents that content.
Alongside this, we're introducing support for more use-cases with polymorphic fields, coupled with a refined visual experience! This enhancement, for example, will streamline workflows that include interfaces that share both Unity and C# implementations.
The new editor window we have introduced provides a streamlined way to quickly handle how a plethora of types are displayed in the Type Selector.
Below is a demonstration showcasing the workflow of utilizing the new polymorphic fields for interfaces that have both C# and Unity implementers.
In addition to these updates, we're introducing three new attributes:
TypeSelectorItemSettings: Reflects the settings available in the new window for the Type Selector, in attribute form.
TypeSelectorDrawerSettings: Allows users to tailor the Type Selector to their needs.
PolymorphicFieldSettings: Provides a way to handle how the Polymorphic Fields and their content get drawn.
Below are some examples of how to utilize these new attributes!
// ShowCategories: Defines if the Type Selector should display it's content with categories when being opened.
// PreferNamespaces: Defines if non-custom categories should be namespaces or assembly categories.
// ShowNoneItem: Allows the user to hide the 'none' item in the Type Selector.
[TypeSelectorDrawerSettings(ShowCategories = true, PreferNamespaces = true, ShowNoneItem = true)]
public object Example;
// Name: Defines the types name in the Type Selector.
// CategoryPath: Defines the custom category for the type.
// Icon: Defines the types Icon in the Type Selector.
// Priority: Defines a numeric priority for manually sorting to appear above or below other types, default is 0.
// Icon colors can also be customized through R,G,B and A parameters for light and dark mode.
[TypeSelectorItemSettings(Name = "New Type Name", CategoryPath = "Foo/Bar", Icon = SdfIconType.CircleFill, Priority = 1)]
public class Example { }
// ShowBaseType: Defines if the base type should be displayed in the polymorphic field, e.g.: 'SomeClass : SomeBaseType'
// LockOnNotNullReference: Defines if the polymorphic field should be disabled if value is set to a not-NULL value.
// HandleNonDefaultConstructors: Defines how types with non default constructors should be handled when instantiating.
[PolymorphicFieldSettings(ShowBaseType = true, LockOnNotNullReference = false, HandleNonDefaultConstructors = PickerHandleNonDefaultConstructors.ConstructIdeal)]
public IInterface Example;