using UnityEngine;
using UnityEngine.UI;
namespace GameFramework
{
///
/// 主菜单 UI 控制器。
/// 支持开始游戏、设置、制作人员、退出游戏。
/// 修复:场景重载后自动重新查找 UI 引用,避免 DontDestroyOnLoad 导致的空引用问题。
///
public class MainMenuUIController : MonoBehaviour
{
[Header("Buttons")]
[SerializeField] Button startButton;
[SerializeField] Button settingsButton;
[SerializeField] Button creditsButton;
[SerializeField] Button quitButton;
[SerializeField] Button storyReplayButton;
[Header("剧情 PV")]
[SerializeField] StoryPVPlayer storyPVPlayer;
[Header("Settings Panel")]
[SerializeField] GameObject settingsPanel;
[SerializeField] Button settingsBackButton;
[Header("Credits Panel")]
[SerializeField] GameObject creditsPanel;
[SerializeField] Button creditsCloseButton;
void Start()
{
// 自动查找(解决场景重载后引用失效问题)
if (startButton == null)
startButton = FindButton("StartButton");
if (settingsButton == null)
settingsButton = FindButton("SettingsButton");
if (creditsButton == null)
creditsButton = FindButton("CreditsButton");
if (quitButton == null)
quitButton = FindButton("QuitButton");
if (storyReplayButton == null)
storyReplayButton = FindButton("StoryReplayButton");
if (storyPVPlayer == null)
{
// 使用 FindObjectsByType 包含 inactive 对象,避免找不到隐藏的 VideoOverlay
var players = FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None);
if (players.Length > 0)
storyPVPlayer = players[0];
}
if (settingsPanel == null)
settingsPanel = GameObject.Find("SettingsPanel");
if (settingsBackButton == null && settingsPanel != null)
settingsBackButton = settingsPanel.GetComponentInChildren