удалить элемент UI\Text из визуального списка со смещением оставшихся элементов.
появление ползунка UI\Scroll при большом количестве элементов
Создание UI\Panel (главный контейнер по содержанию ui элементов). Настроить размеры панели визуально кнопкой Rect Tool и переместить панель влево визуально кнопкой Move Tool. Прилепить панель влево middle-left в инспекторе в свойстве Rect Transform.
Добавить UI\Scroll View как дочерний элемент в UI\Panel в дереве Hierarchy (Удаление дочернего элемента — горизонтального Scrollbar в UI\Scroll View). Настройка трансформации UI\Scroll View визуально.
Добавление кнопок btAdd и btDel (без UI\Text и настроить компонент Image\Color=Red) UI\Button дочерними для UI\Panel
//Bo52_18022021113806576.LIB.UI.
namespace Bo52_18022021113806576.LIB
{
using UnityEngine;
public class UI_18022021113806576:Bo52.SYSTEM.Mono
{
static public new string INFO = "button.del";
static public new string PRODUCT = "удаление ui элемента ";
static public new bool FIXED = false;
#region ССЫЛКИ
public Bo52_17022021145642572.PREFAB.UI_17022021145642572 panel_data;
#endregion
public void method_hide()
{ gameObject.transform.SetParent(GameObject.Find("Canvas").transform);
gameObject.SetActive(false);
}
public void method_del(){var go = gameObject.transform.parent; method_hide(); Bo52_18022021135357676.LIB.TOOLS.СдвинутьДочерниеПоВысоте(go.gameObject); Object.DestroyImmediate(panel_data.Selected); } }
}
статический модуль инструмент по сдвигу визуальных ui элементов
//Bo52_18022021135357676.LIB.TOOLS.
namespace Bo52_18022021135357676.LIB
{
using UnityEngine;
public class TOOLS
{
static public string INFO = "GameObject";
static public string PRODUCT = "инструмент по работе с дочерними соседями";
static public void СдвинутьДочерниеПоВысоте(GameObject go) { var y = go.GetComponent<RectTransform>().localPosition.y; var i = 0; while (go != null) { go = Следующий(go); if (go == null) break; var rt = go.GetComponent<RectTransform>(); rt.localPosition = new Vector3(rt.localPosition.x, y - 0.5f * i * (rt.rect.height + 10), rt.localPosition.z); i++; } } static public GameObject Следующий(GameObject go) { var i = go.transform.GetSiblingIndex(); if (go.transform.parent.childCount <= i + 1) return null; return go.transform.parent.GetChild(i + 1).gameObject; } }
}
//Bo52_17022021145642572.PREFAB.UI_17022021145642572.
namespace Bo52_17022021145642572.PREFAB
{
using UnityEditor;
using UnityEngine;
public class UI_17022021145642572 : Bo52.SYSTEM.Mono
{
static public new string INFO = "panel.Scroll";
static public new string PRODUCT = "добавление элемента в список со скроллом";
public Bo52_18022021113806576.LIB.UI_18022021113806576 del_data; public GameObject Content; private void Start() { del_data.gameObject.SetActive(false); } public void method_custom(GameObject go) { del_data.gameObject.SetActive(true); del_data.gameObject.transform.SetParent(go.transform); var rt = del_data.gameObject.GetComponent<RectTransform>(); rt.localScale = Vector3.one; rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, 0, rt.rect.height); Selected = go; } public string ФайлПрефаба { get { return Bo52.SYSTEM.GLOBAL.PATH_prefab+"0.UI/UI_17022021144732301.prefab"; } } public GameObject Selected; public void method_Content(GameObject go) { var rt = Content.GetComponent<RectTransform>(); var rt_row = go.GetComponent<RectTransform>(); rt.sizeDelta = new Vector2(rt.sizeDelta.x, 0.7f*rt_row.sizeDelta.y*Content.transform.childCount); } public void method_add_prefab_text() { var go = PrefabUtility.LoadPrefabContents(ФайлПрефаба); go.transform.SetParent(Content.transform); var scr = go.GetComponent<Bo52_1502202120271018.LIB.UI_1502202120271018>(); scr.panel_data= this; scr.del_data = del_data;//после переноса объекта в родитель изменятся Scale float dy = Content.transform.childCount-1; go.GetComponent<UnityEngine.UI.Text>().text = "Text " + dy; var rt = go.GetComponent<RectTransform>(); var rt_content = Content.GetComponent<RectTransform>(); rt.anchorMax=Vector2.one; rt.localScale = Vector3.one; rt.sizeDelta = new Vector3(60, 30, 0); dy = 0.5f * dy * (rt.rect.height + 10); rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, dy, rt.rect.height); //изменить LEFT rt.offsetMin = new Vector2(10, rt.offsetMin.y); //изменить RIGHT rt.offsetMax = new Vector2(rt_content.sizeDelta.x, rt.offsetMax.y); method_Content(go); } }
}