using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class CardLayout : MonoBehaviour { public List cardPrefabs; // 卡片预制体 public Vector2 centerPosition = new Vector2(0, 100); public int cardNumber = 0; public float cardRotationAngle = 1f; public float fanShapeMaxRadius = 800f; public float fanShapeMaxAngle = 60f; private RectTransform card_container; private readonly string card_container_name = "CardContainer"; private List card_list = new List(); // 存储当前所有卡片 private void Start() { card_container = transform.Find(card_container_name).GetComponent(); m_self_debug_create_card(); m_self_set_card_layout_with_single(); // m_self_debug_set_card(); } private void m_self_set_card_layout_with_single() { if (cardNumber / 2 == 0) return; if (cardNumber == 0) return; float halfAngle = fanShapeMaxAngle / 2f; for (int i = 0; i < cardNumber; i++) { // 均匀角度分布 float t = (cardNumber == 1) ? 0.5f : (float)i / (cardNumber - 1); float angleDeg = -halfAngle + t * fanShapeMaxAngle; float angleRad = angleDeg * Mathf.Deg2Rad; // 弧线坐标计算 float x = fanShapeMaxRadius * Mathf.Sin(angleRad); float y = fanShapeMaxRadius * (1 - Mathf.Cos(angleRad)); // 应用到 UI 坐标 Vector2 pos = centerPosition + new Vector2(x, y); card_list[i].anchoredPosition = pos; // 设置旋转(Z 轴) float rotZ = -angleDeg * cardRotationAngle; card_list[i].localRotation = Quaternion.Euler(0, 0, rotZ); card_list[i].gameObject.SetActive(true); } } private void m_self_set_card_layout_with_double() { if (cardNumber / 2 != 0) return; } private void m_self_debug_create_card() { // 从卡片预制体中随机选择卡牌按照数量插入到当前手牌中 for (var i = 0; i < cardNumber; i++) { GameObject _game_object = Instantiate(cardPrefabs[UnityEngine.Random.Range(0, cardPrefabs.Count)]); RectTransform _rect_transform = _game_object.GetComponent(); _rect_transform.name = "Card" + i; _rect_transform.SetParent(card_container); _game_object.SetActive(false); card_list.Add(_rect_transform); } } private void m_self_debug_set_card() { GameObject _game_object = Instantiate(cardPrefabs[0]); RectTransform _rect_transform = _game_object.GetComponent(); _rect_transform.name = "Card0"; _rect_transform.SetParent(card_container); _rect_transform.anchoredPosition = centerPosition; // _rect_transform.localRotation = Quaternion.Euler(0, 0, 0); } }