using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CalendarPanel : MonoBehaviour { [Header("组件")] public Text monthText; // 当前月份显示的Text public Transform dateGrid; // 用于显示日期的GridLayoutGroup public GameObject dayButtonPrefab; // 日期按钮的预制体 public Button prevMonthBtn; // 上一个月按钮 public Button nextMonthBtn; // 下一个月按钮 public Text selectedDateText; // 显示选中的日期 public DateTime currentDate; // 当前显示的日期 // Start is called before the first frame update void Start() { currentDate = DateTime.Now; // 初始显示当前日期 UpdateCalendar(); //prevMonthBtn.onClick.AddListener(OnPrevMonth); //nextMonthBtn.onClick.AddListener(OnNextMonth); } // 更新日历面板 void UpdateCalendar() { // 更新月份显示 monthText.text = currentDate.ToString("yyyy年MM月"); // 清空日期按钮之前,先确保日期按钮的销毁没有问题 foreach (Transform child in dateGrid) { Destroy(child.gameObject); // 销毁所有子物体(日期按钮) } // 获取当前月份的第一天 DateTime firstDayOfMonth = new DateTime(currentDate.Year, currentDate.Month, 1); // 获取该月份的总天数 int daysInMonth = DateTime.DaysInMonth(currentDate.Year, currentDate.Month); // 获取第一天是星期几 int firstDayOfWeek = (int)firstDayOfMonth.DayOfWeek; // 0是星期日, 6是星期六 // 生成空的占位符,填充前面几天 for (int i = 0; i < firstDayOfWeek; i++) { GameObject emptyItem = Instantiate(dayButtonPrefab, dateGrid); emptyItem.SetActive(false); // 隐藏这些占位符 } // 生成当前月份的每一天 for (int day = 1; day <= daysInMonth; day++) { GameObject dayItem = Instantiate(dayButtonPrefab, dateGrid); Button dayButton = dayItem.GetComponent