using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace TcgEngine.UI { /// /// 卡组分帧加载器 /// public class CardUILoading : MonoBehaviour { public CardGrid grid_content; public GameObject card_prefab; private List all_list = new List(); private bool spawned = false; // 分帧加载 private Coroutine spawnRoutine; private static CardUILoading instance; protected void Awake() { instance = this; } private void Start() { grid_content = CollectionPanel.Get().grid_content; card_prefab = CollectionPanel.Get().card_prefab; if (!spawned) { if (spawnRoutine != null) StopCoroutine(spawnRoutine); spawnRoutine = StartCoroutine(SpawnCardsCoroutine()); } } private IEnumerator SpawnCardsCoroutine() { spawned = true; foreach (CollectionCard card in all_list) Destroy(card.gameObject); all_list.Clear(); // 首帧压力大,先让出 帧 for (int i = 0; i < 5; i++) yield return null; int batchSize = 15; // 每帧生成 int counter = 0; List variants = VariantData.GetAll(); List cards = CardData.GetAll(); foreach (VariantData variant in variants) { foreach (CardData card in cards) { GameObject nCard = Instantiate(card_prefab, grid_content.transform); CollectionCard dCard = nCard.GetComponent(); dCard.SetCard(card, variant, 0); all_list.Add(dCard); nCard.SetActive(false); counter++; if (counter % batchSize == 0) { yield return null; } } } } public List CardList() { return all_list; } public static CardUILoading Get() { return instance; } } }