У меня возникла проблема, и панель не сразу прогружается так как надо при добавлении элементов. У меня есть холст Canvas ,прикреплённая к камере. В нем панель build_panel, которая на всю ширину экрана и по высоте примерно посередине находится скрин 1
В этой панеле есть другая панель panel_parent(она содержит horizontalLayout и ContentSizeFitter с подгонкой ширины) - это панель для строительства зданий. В ней уже находится минипанель самих зданий , полоса прокрутки и небольшая палень panel( затрат на строительство) в верхнем левом углу(она тоже содержит horizontalLayout и ContentSizeFitter с подгонкой ширины). В panel потом добавляется другие обьекты в процессе использования. При нажатии нижней кнопки должна изменяться активность build_panel. В ней потом отображаются здания скрин 2. Само здание принимает клик правой кнопки мыши, где отображается panel
public GameObject panel;
public GameObject mini_panel;//будущий дочерний элемент panel
public GameObject panel_parent;
public GameObject tower;
public Image gg;
void IPointerClickHandler.OnPointerClick( PointerEventData eventData)
{
parametrs_tower param_tow = tower.GetComponent<parametrs_tower>();
Dictionary<GameObject, int> craft = param_tow.craft;//словарь с информацией крафта(ключ - тип ресурса , значение - количество)
if (eventData.button == PointerEventData.InputButton.Right && !panel.activeSelf)
{
panel.SetActive(true);
string nm = mini_panel.name;
foreach (var i in craft.Keys)
{
GameObject mp = Instantiate(mini_panel);
mp.name = nm;
gg = mp.transform.Find("Image resurs").GetComponent<Image>();
Sprite ss = i.GetComponent<SpriteRenderer>().sprite;
gg.sprite = ss;
mp.transform.Find("Text col").GetComponent<TextMeshProUGUI>().text = (craft[i]).ToString();
mp.transform.SetParent(panel.transform, false);
//ниже я пытался обновить панель
//Canvas.ForceUpdateCanvases();
//panel_parent.GetComponent<HorizontalLayoutGroup>().enabled = false;
//panel_parent.GetComponent<HorizontalLayoutGroup>().enabled = true;
//LayoutRebuilder.ForceRebuildLayoutImmediate(panel.GetComponent<RectTransform>());
//LayoutRebuilder.ForceRebuildLayoutImmediate(panel_parent.GetComponent<RectTransform>());
//panel.GetComponent<RectTransform>().SetAsLastSibling();
//panel.GetComponent<RectTransform>().SetAsFirstSibling();
//
//
}
}
else
{
panel.SetActive(false);
foreach (Transform child in panel.transform)
{
Destroy(child.gameObject);
}
//mini_pn.SetActive(false);
}
}
До отображения всё нормально работает , но при клике ,панель немного выходит за рамку(несмотря на то, что должна выравниваться). Но если несколько раз (в режиме паузы) в инспекторе panel нажать reverse в layout(или что-то подобное), то отображается так как надо. Можете посоветовать решение?