Better Width control for HorizontalGroup
It would be nice have have a bit more control over the sizing of HorizontalGroup elements
For example:
[ShowInInspector, HideLabel, DisplayAsString]
[HorizontalGroup("Demo"), PropertyOrder(0)]
public string DynamicInfo
{
get { return /* Something Dynamically Calculated */ }
}
[HideLabel]
[HorizontalGroup("Demo"), PropertyOrder(1)]
public string SerializedInfo = "This is some serialized info";
Since DynamicInfo can change in size, setting a static width
on its HorizontalGroupAttribute
is not ideal.
Potential additions
HorizontalGroup(width: -1)
: The element would try to automatically scale to as small as possible, while still showing the whole element.HorizontalGroup(minWidth: 10, maxWidth: 100)
: The element would scale as normal, but would not scale to be larger thanmaxWidth
or smaller thanminWidth
.
So for DynamicInfo
in the above example:
- Using
[HorizontalGroup("Demo", width: -1, minWidth:10, maxWidth: 100)]
- scales it to the minimum required size, as long as that size is within range
[10, 100]
.
- scales it to the minimum required size, as long as that size is within range
- Using
[HorizontalGroup("Demo", minWidth:10, maxWidth: 100)]
- scales it as normal (50% of the total width of the group since there is only one other element in the group), as long as that size is within the range
[10, 100]
- scales it as normal (50% of the total width of the group since there is only one other element in the group), as long as that size is within the range
- Using
[HorizontalGroup("Demo", minWidth:10)]
- scales it as normal, with no upper bound, but it would never become smaller than 10.
- Using
[HorizontalGroup("Demo", width: 20, minWidth: 80, maxWidth: 100)]
- scales it to a locked size of 80 (min/max Width are respected over
width
).
- scales it to a locked size of 80 (min/max Width are respected over
Comments (7)
-
reporter -
reporter - edited description
-
reporter - edited description
-
reporter - edited description
-
- changed status to open
Thanks for the suggestions! I've added this to our todo.
-
- changed status to resolved
We've added MinWidth, MaxWidth, PaddingLeft, and PaddingRight. It'll be there in the next patch.
Since the LabelWidth attribute is going to be introduced, I've changed it so the HorizontalGroup no longer sets the label width based on the width of the columns. This means that you can now do stuff like this, and still maintain a proper label width which you couldn't do before.
I've also fixed it so that it no longer adds unwanted padding. (This was a nightmare btw)
GUILayout.BeginVertical(new GUIStyle()) // Adds unwanted padding you can't get rid of in any pretty way. GUILayout.BeginVertical(GUIStyle.none) // Does not.
On a related note, we've also added the InlineProperty attribute which is quite nice for some cases and works well with the HorizontalGroup attribute.
-
Btw, if you want an element to scale to the smallest size possible, you can just specify 2 pixels as the width. Unity's layout system by default does not allow layout elements to overflow or clip.
- Log in to comment