using Lean.Pool; using TMPro; using UnityEngine; using UnityEngine.UI; namespace Continentis.MainGame.UI { public class InformationBox : UIElementBase { public RectTransform mainBox; public Image titleBackground, contentBackground; public TMP_Text titleText, contentText; public static InformationBox Create(RectTransform parent, ref InformationBox exclusivity) { GameObject infoBoxPrefab = MainGameManager.Instance.basePrefabs.informationBox; exclusivity ??= LeanPool.Spawn(infoBoxPrefab, parent).GetComponent(); return exclusivity; } public static void Despawn(ref InformationBox infoBox) { if (infoBox != null) { LeanPool.Despawn(infoBox.gameObject); infoBox = null; } } /// /// 处于LayoutGroup中时的初始化 /// public void Initialize(string title, string content) { titleText.text = title; contentText.text = content; SetBackground(); } /// /// 非LayoutGroup中时的初始化 /// public void Initialize(string title, string content, Vector2 basePosition) { titleText.text = title; contentText.text = content; SetBackground(); SetPosition(basePosition); } private void SetBackground() { LayoutRebuilder.ForceRebuildLayoutImmediate(mainBox); titleBackground.rectTransform.sizeDelta = new Vector2(0, titleText.preferredHeight + 10); contentBackground.rectTransform.sizeDelta = new Vector2(0, contentText.preferredHeight + 10); LayoutRebuilder.ForceRebuildLayoutImmediate(mainBox); rectTransform.sizeDelta = mainBox.sizeDelta; } private void SetPosition(Vector2 basePosition) { float xOffset = basePosition.x < 0 ? rectTransform.sizeDelta.x / 2 : -rectTransform.sizeDelta.x / 2; float yOffset = basePosition.y < Screen.height * 0.25f ? rectTransform.sizeDelta.y / 2 : -rectTransform.sizeDelta.y / 2; rectTransform.anchorMax = new Vector2(0.5f, 0.5f); rectTransform.anchorMin = new Vector2(0.5f, 0.5f); rectTransform.anchoredPosition = new Vector2(basePosition.x + xOffset, basePosition.y + yOffset); } } }