An Adapter determines two things:
1. How external Unity components like MeshRenderer, TMP_Text, and Colliders affect gameObjects using SizeType.ComponentSize.
2. How layout results will modify those a gameObject's components and localScale.
Flexalon has built-in adapters for:
TextMeshPro.TMP_Text | The component size is the size of the text. The RectTransform is resized to fit the text. The gameObject scale is set to the Scale value of the FlexalonObject. |
RectTransform | The component size is the size of the rectTransform. The gameObject scale is set to the Scale value of the FlexalonObject. |
MeshRenderer | The component size is the size of the renderer local bounds. The gameObject is scaled uniformly where possible. |
SpriteRenderer | The component size is the size of the sprite. The gameObject is scaled uniformly, depth scale is 1. |
Collider | The component size is the size of the collider local bounds, which depends on the type of collider. The gameObject is scaled uniformly where possible. |
Collider2D | The component size is the size of the collider local bounds, which depends on the type of collider. The gameObject is scaled uniformly where possible, depth scale is 1. |
Canvas (UGUI) | Non-root canvases or canvases with renderMode set to World Space are adapted as RectTransforms. Root canvas sizes are never modified, since they are controlled by Unity. |
Image (UGUI) | If only one axis is set to Component size, it is set to the aspect ratio of the sprite. The gameObject scale is set to the Scale value of the FlexalonObject. |
Implementing a custom adapter
To provide your own sizing strategy, implement Adapter and call:
Flexalon.GetOrCreateNode(gameObject).SetAdapter(yourObject);
Measure
Bounds Measure(FlexalonNode node, Vector3 size, Vector3 min, Vector3 max);
node | The node to be measured. |
size | The size set by the Flexalon Object Component. Update any axis set to SizeType.Component. |
min | The minimum set by the Flexalon Object Component. Ensure the returned bounds fit in min/max. |
max | The maximum set by the Flexalon Object Component. Ensure the returned bounds fit in min/max. |
Return Value | The measured size to use in layout. |
Call node.GetSizeType() to determine which axes should be adjusted. Return a bounds that includes the passed in size and the auto size.
UpdateSize
Vector3 UpdateSize(FlexalonNode node);
node | The node to be sized. |
size | The final layout size. |
Return Value | The desired scale of this gameObject. |
Update components on this node's gameObject to match the passed in size. Do not adjust the Transform component. Return what the gameObject's scale should be in local space.