void UpdatePosition() { int childCount = transform.childCount; // Calculate size float width = 0; float height = 0; Vector2 size; for (int i = 0; i < childCount; i++) { Transform child = transform.GetChild(i); if (child.gameObject.activeSelf) { size = child.GetComponent <SpriteRenderer>().sprite.rect.size * 0.01f; width += size.x + _gap; if (size.y > height) { height = size.y; } } else { break; } } width -= _gap; Vector3 position = _anchor.GetPosition(width, height, _offsetX, _offsetY); Sprite sprite; float leftExtent; float bottomExtent; for (int i = 0; i < childCount; i++) { Transform child = transform.GetChild(i); if (child.gameObject.activeSelf) { sprite = child.GetComponent <SpriteRenderer>().sprite; leftExtent = sprite.pivot.x / sprite.pixelsPerUnit; bottomExtent = sprite.pivot.y / sprite.pixelsPerUnit; position.x += leftExtent; position.y += bottomExtent; child.transform.localPosition = position; position.x += sprite.bounds.size.x - leftExtent + _gap; position.y -= bottomExtent; } else { break; } } }