Рубрики
Canvas Text UI Unity

Визуальный список элементов UI (пример Text) в UI Scrooll с модификацией add-del

  • добавить элемент UI\Text в визуальном списке
  • удалить элемент 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
Привязать UI\Panel и скрипт к элементу btDel и назначить событие OnClick метод моно скрипта method_del
//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;     
} 
}
}
Привязать скрипт (по добавлению ui элементов) Привязка полей btDel и дочерний элемент Content у UI\Scroll View) к UI\Panel
//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);     
} 
}
}
Привязать метод method_add_prefab_text у UI\Panel привязанный модуль к событию OnClick к кнопке btAdd
Создание префаба для загрузки и модификация скрипта у UI элемента
//Bo52_1502202120271018.LIB.UI.
namespace Bo52_1502202120271018.LIB
{
using UnityEngine;
public class UI_1502202120271018:Bo52.SYSTEM.Mono
{
public Bo52_17022021145642572.PREFAB.UI_17022021145642572 panel_data;     
public Bo52_18022021113806576.LIB.UI_18022021113806576 del_data;     public void method_red()     
{         
gameObject.GetComponent<UnityEngine.UI.Text>().color = Color.red;         panel_data.method_custom(gameObject);     
}     
public void method_black()     
{         
gameObject.GetComponent<UnityEngine.UI.Text>().color = Color.black;         del_data.method_hide();     
} 
}
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *