Files
ichni_Creator_Studio/Assets/Scripts/DynamicUI/DynamicUIContainer.cs

64 lines
2.0 KiB
C#
Raw Normal View History

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
2026-03-22 12:05:32 -04:00
using Lean.Pool;
2025-02-11 22:58:56 -05:00
using UnityEngine.Serialization;
using UnityEngine.UI;
2025-02-11 22:58:56 -05:00
namespace Ichni.Editor
{
2025-02-11 22:58:56 -05:00
public class DynamicUIContainer : MonoBehaviour
{
public TMP_Text title;
2025-04-14 17:49:47 -04:00
public RectTransform rect;
public List<DynamicUISubcontainer> subcontainers;
public int gridWidth, gridHeight;
2025-04-14 17:49:47 -04:00
public void Initialize(string titleText)
{
2026-03-22 12:05:32 -04:00
// 支持对象池复用:重置 title 激活状态与内容
this.title.gameObject.SetActive(true);
2025-04-14 17:49:47 -04:00
this.title.text = titleText;
2026-03-22 12:05:32 -04:00
// 复用对象时 subcontainers 可能已存在,直接清空即可
if (this.subcontainers == null)
this.subcontainers = new List<DynamicUISubcontainer>();
else
this.subcontainers.Clear();
this.gridWidth = 0;
this.gridHeight = 0;
2025-04-14 17:49:47 -04:00
}
public DynamicUISubcontainer GenerateSubcontainer(int elementCountPerRow, float height = 100)
{
2026-03-22 12:05:32 -04:00
// 使用 LeanPool 替代 Instantiate支持对象池复用
DynamicUISubcontainer subcontainer =
LeanPool.Spawn(EditorManager.instance.basePrefabs.dynamicUISubcontainer, rect)
.GetComponent<DynamicUISubcontainer>();
2025-04-14 17:49:47 -04:00
subcontainer.Initialize(this, elementCountPerRow, height);
subcontainers.Add(subcontainer);
return subcontainer;
}
2025-04-14 17:49:47 -04:00
public Vector2Int GetGrid(int elementCountPerRow, int heightUnit)
{
return new Vector2Int(600 / elementCountPerRow, 100 * heightUnit);
}
public void CheckGrid(Vector2Int newGrid)
{
if(newGrid.x > gridWidth)
{
gridWidth = newGrid.x;
}
if(newGrid.y > gridHeight)
{
gridHeight = newGrid.y;
}
}
}
2025-02-11 22:58:56 -05:00
}