- Home /
Incorrect RectTransform width value when trying to read child RectTransform width.
public RectTransform cellContainer;
private int m_numCells;
private float m_leftScrollLimit;
private float m_rightScrollLimit;
private List<RectTransform> m_cellRects;
private HorizontalLayoutGroup m_horizontalLayoutGroup;
void Awake()
{
m_cellRects = new List<RectTransform>();
m_numCells = cellContainer.childCount;
for(int i = 0; i < m_numCells; i++) {
RectTransform rect = (RectTransform)cellContainer.GetChild(i);
float w = rect.rect.width;
m_cellRects.Add((RectTransform)cellContainer.GetChild(i));
}
m_horizontalLayoutGroup = cellContainer.gameObject.GetComponent<HorizontalLayoutGroup>();
Assert.AssertNotNull(m_horizontalLayoutGroup);
}
void Start() {
float cellWidth = m_cellRects[0].rect.width;
float canvasWidth = UIController.Instance.CanvasWidth;
// Set the total width of the horizontal cell container
float containerWidth = m_numCells * cellWidth + Mathf.Max(0, m_numCells - 1) * m_horizontalLayoutGroup.spacing + (UIController.Instance.CanvasWidth - cellWidth);
cellContainer.sizeDelta = new Vector2(containerWidth, UIController.Instance.CanvasHeight);
float leftAnchoredPosition = (containerWidth - UIController.Instance.CanvasWidth) * 0.5f;
m_leftScrollLimit = leftAnchoredPosition + cellWidth * 0.5f;
m_rightScrollLimit = -m_leftScrollLimit;
ScrollToCurrent();
}
I have the above script attached to a Scroll View. The cellContainer is the "Content" of the scroll view, which has a Horizontal Layout Group component. The content has child panels that can be scrolled horizontally. Each child panel has a Layout Element component and min width is set to 150. When I instantiate this UI gameobject for the first time the cellWidth in the Start function reads 150 correctly. But when I instantiate this UI screen later when needed, the cellWidth value is 0 and not 150 which makes the rest of the calculation wrong. I can't figure out why the first time the right value is reflected but not later. Do let me know if you have any idea about this. Thank you!
Your answer
Follow this Question
Related Questions
Getting the width of UI text inside a layout allways 0. 1 Answer
Resizing UI Image but with minimum width 2 Answers
RectTransform outline and position aren't synced 0 Answers
Moving RectTransform over another RectTransform under GridLayout 0 Answers
How do I layout dynamically instantiated UGUI components? 1 Answer