BackToHallButton.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using UnityEngine.SceneManagement;
  4. public class BackToHallButton : MonoBehaviour
  5. {
  6. [Header("UI References")]
  7. [Tooltip("返回按钮组件,如果不设置会自动获取")]
  8. [SerializeField] private Button backButton;
  9. [Header("Window References")]
  10. [Tooltip("胜利界面,拖拽WinWrapper到这里")]
  11. [SerializeField] private GameObject winWrapper;
  12. [Tooltip("失败界面,拖拽LoseWrapper到这里")]
  13. [SerializeField] private GameObject loseWrapper;
  14. private void Awake()
  15. {
  16. // 如果没有手动设置按钮,尝试自动获取
  17. if (backButton == null)
  18. {
  19. backButton = GetComponent<Button>();
  20. Debug.Log("BackToHallButton: 尝试自动获取Button组件: " + (backButton != null ? "成功" : "失败"));
  21. }
  22. if (backButton == null)
  23. {
  24. Debug.LogError("BackToHallButton: 没有找到Button组件!请确保此脚本挂载在按钮对象上。");
  25. return;
  26. }
  27. // 添加按钮点击事件
  28. backButton.onClick.AddListener(OnBackButtonClicked);
  29. }
  30. private void Start()
  31. {
  32. // 检查必要组件
  33. Debug.Log($"BackToHallButton: WinWrapper引用状态: {(winWrapper != null ? "已设置" : "未设置")}");
  34. Debug.Log($"BackToHallButton: LoseWrapper引用状态: {(loseWrapper != null ? "已设置" : "未设置")}");
  35. // 初始状态设置为隐藏
  36. if (backButton != null)
  37. {
  38. backButton.gameObject.SetActive(false);
  39. }
  40. }
  41. private void Update()
  42. {
  43. // 只有当胜利或失败界面显示时,才显示返回按钮
  44. bool shouldShowButton = (winWrapper != null && winWrapper.activeSelf) ||
  45. (loseWrapper != null && loseWrapper.activeSelf);
  46. if (backButton != null && backButton.gameObject.activeSelf != shouldShowButton)
  47. {
  48. backButton.gameObject.SetActive(shouldShowButton);
  49. }
  50. }
  51. private void OnBackButtonClicked()
  52. {
  53. // 加载大厅场景
  54. SceneManager.LoadScene("HallScene");
  55. }
  56. }