using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace TcgEngine.UI { public class CardCarousel : UIPanel { // 技能名称 public Text skillName_text; // 技能描述 public Text description_text; public List skills = new List(); public Transform SkillDisplayPanel; public GameObject cardPrefab; public List cards; public float centerScale = 1.2f; public float sideScale = 0.8f; public float sideOffset = 200f; private int currentIndex = 0; [Header("初始化图层顺序")] [SerializeField] private int baseOrder = 25; [SerializeField] private Button nextButton; [SerializeField] private Button prevButton; [SerializeField] private Button choice_Button; void Start() { nextButton.onClick.AddListener(NextCard); prevButton.onClick.AddListener(PrevCard); choice_Button.onClick.AddListener(OnChoice); InitCard(); } public void InitCard() { // 清空现有列表 skills.Clear(); cards.Clear(); // 后续改成数据传入 SkillData[] loadedSkills = Resources.LoadAll("Skill测试用的/Data"); skills.AddRange(loadedSkills); foreach (var skill in skills) { GameObject objec = Instantiate(cardPrefab, SkillDisplayPanel); objec.name = skill.name; var card = objec.GetComponent(); card.skillName = skill.skillName; card.description = skill.description; card.skill_Icon.sprite = skill.icon; card.InitManaConsume(skill.manaCost); cards.Add(objec); } UpdateCards(); } private void NextCard() { if (currentIndex < cards.Count - 1) { currentIndex++; UpdateCards(); } } private void PrevCard() { if (currentIndex > 0) { currentIndex--; UpdateCards(); } } private void UpdateCards() { for (int i = 0; i < cards.Count; i++) { GameObject card = cards[i]; Canvas can = card.GetComponent(); int distance = Mathf.Abs(i - currentIndex); float scale = (i == currentIndex) ? centerScale : sideScale; card.transform.localScale = Vector3.one * scale; float x = (i - currentIndex) * sideOffset; card.transform.localPosition = new Vector3(x, 0, 0); can.overrideSorting = true; can.sortingOrder = baseOrder + (cards.Count - distance); if (i == currentIndex) { var data = cards[i].GetComponent(); skillName_text.text = data.skillName; description_text.text = data.description; } } } private void OnChoice() { Hide(); } } }