Odin Inspector Version 1.0.3.0


Highlights

  • Property groups can now be placed within other groups in the same type, using group paths. Additionally, the same member can now be placed in multiple different groups at the same time. See the manual section "Grouping" on the "Design with Attributes" page for more information.
  • Added support for using Enum and Guid keys in dictionaries.

Fixes

  • Odin's editor compilation now fully validates the type names of all types that it compiles editors for so that editors are not generated for types with names containing invalid characters like spaces, ampersands, and tilde, or with names that are reserved keywords. Editor compilation errors should no longer occur because of invalid type names. The logic implements the official C# language specification for valid identifiers.
  • Fixed an issue where fields would become bigger than the Inspector width.
  • Fixed an issue where Odin serialized enums could not be changed in instances of prefabs where the property path did not exist on the original prefab asset.
  • Fixed an issue where Odin-serialized LayerMasks could not be changed in the inspector.
  • Unity CustomPropertyDrawers which draw abstract UnityEngine.Object types are now properly detected and used by Odin without error messages.
  • Fixed an issue with MathUtilities.Wrap returning negative values when it shouldn't.
  • Fixed an issue where setting an angle to 360 in the SirenixEditorFields.AngleAxisField would result in a broken quaternion value.
  • Fixed an issue where char properties marked with [Delayed] weren't actually delayed.
  • Moved StringMemberHelperExample script to the demo namespace.
  • Delayed sliding handles now works for all primitive fields, except ulong and decimal.
  • Fixed an issue where UnityEvents drawn in InlineEditors would cause null reference exceptions to be thrown when the InlineEditor has been expanded for the second time. This was caused by internal Unity state that was wrongly cached. Odin now clears this invalid internal state at the correct times.
  • Fixed cases where AnimationCurves and Gradients would act up when they were being serialized by Odin, especially when they were being serialized by Odin on prefab instances (in which case, they wouldn't work at all). To facilitate this fix, the concept of enforced (and extendable) type atomicity has been introduced to Odin's property system - AnimationCurves and Gradients are now marked as atomic, and largely act like primitive types in terms of the property system.
  • Fixed case where Gradient.mode would not be serialized in newer versions of Unity where it exists.
  • Fixed an issue where cross-window dragging of list elements would not work in most cases.
  • SpaceAttribute is no longer applied to collection elements.
  • Fixed an issue where, if you had an interface type field or property, the instance creator window would not find structs that implemented that interface.
  • Fixed an issue where dictionary, hashset, list, nullable and generic collection serialization formatters would be broken on IL2CPP builds due to incorrect stripping of their constructors. This would cause a multitude of deserialization errors when running builds on IL2CPP platforms.
  • Fixed an issue where the path for AssetLists would not correctly work with root folders named Assets.
  • Fixed a layout issue caused by InlineButton.
  • Fixed case where serialization for a type would break when a serialized member is hidden by another serialized member in a base type with the same name.

Changes

  • Added the missing optional order parameter to HorizontalGroup
  • HorizontalGroupAttribute now has an option for a title.
  • Preferences in Window > Odin Inspector > Preferences > Drawers > General are now stored as EditorPrefs, and are therefore local to the computer.
  • Preferences in Window > Odin Inspector > Preferences > Drawers > Color Palettes are now stored as EditorPrefs, and are therefore local to the computer. This only applies to display preferences - Color Palettes themselves are still saved to the asset and synced over source control.
  • SirenixEditorGUI.BeginBox now alternates between a light and a dark box background based on its z-index.
  • Renamed SirenixEditorGUI.VerticalLineSeperator to SirenixEditorGUI.VerticalLineSeparator and HorizontalLineSeperator to HorizontalLineSeparator.
  • The Serialization Warning message for SerializedMonoBehaviour is no longer shown in the demo examples. Hopefully, this helps new users to not accidentally click the button without reading the warning first.
  • All number fields now show a small handle, which enables you to change the value by dragging. This is useful when the number field does not have a label which also has this behavior, such as in the case of list elements.
  • Vector fields now hides the X, Y, Z and W labels in narrow spaces in order to better show the numbers This feature can be disabled in the Odin Preferences Window.

Additions

  • Added support for using Enum and Guid keys in dictionaries.
  • Added the TitleGroup attribute which groups properties vertically together with a title, an optional subtitle, and an optional horizontal line. This can serve as an alternative to using the PropertyOrder attribute.
  • Added a very rudimentary System.Type drawer, so you can see and change type instances in the inspector.
  • Added SirenixEditorFields.LayerMaskField, which is now used to draw LayerMasks in the inspector.
  • The size of buttons can now be set via the Button attribute.
  • Added PropertyChildren.Recurse, which returns an IEnumerable that recursively yields all children of a property depth first.
  • Added an option to hide the add button for lists in the inspector via ListDrawerSettings attribute. This can be used to create custom add buttons for lists.
  • Added the DictionaryDrawerSettings attribute, which enables you to change the display mode of the dictionary. More options will be added to this attribute in the future.
  • Added SplitVertical to RectExtensions.
  • Added property drawer for char properties.
  • Added support for using Enum and Guid keys in dictionaries.
  • Added inspector drawer for guids, and added SirenixEditorFields.GuidField. Additionally, SirenixEditorGUI.DynamicPrimitiveField now supports Guids.