55 lines
1.7 KiB
C#
55 lines
1.7 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
|
|
/// <summary>
|
|
/// Main 启动页。
|
|
/// 点击事件在 Button 的 On Click() 里接线(Inspector 配置),代码里不查找节点。
|
|
/// </summary>
|
|
public class MainMenu : MonoBehaviour
|
|
{
|
|
[Tooltip("点「启动」后要加载的场景名,必须已经加进 Build Settings")]
|
|
[SerializeField] private string startSceneName = "Start";
|
|
|
|
private bool _loading;
|
|
|
|
/// <summary>启动:加载目标场景,加载完成后卸载 Main 场景自己。</summary>
|
|
public void OnStartClicked()
|
|
{
|
|
if (_loading) return; // 防连点,避免同时加载出两份
|
|
_loading = true;
|
|
StartCoroutine(LoadThenUnloadSelf());
|
|
}
|
|
|
|
/// <summary>退出游戏。</summary>
|
|
public void OnExitClicked()
|
|
{
|
|
Application.Quit();
|
|
#if UNITY_EDITOR
|
|
// 编辑器里 Application.Quit 不生效,方便本地测试
|
|
UnityEditor.EditorApplication.isPlaying = false;
|
|
#endif
|
|
}
|
|
|
|
private IEnumerator LoadThenUnloadSelf()
|
|
{
|
|
Scene mainScene = gameObject.scene;
|
|
|
|
AsyncOperation load = SceneManager.LoadSceneAsync(startSceneName, LoadSceneMode.Additive);
|
|
if (load == null)
|
|
{
|
|
Debug.LogError("[MainMenu] 场景 \"" + startSceneName + "\" 加载失败,确认它已加入 Build Settings。", this);
|
|
_loading = false;
|
|
yield break;
|
|
}
|
|
|
|
yield return load; // 等目标场景加载完成
|
|
|
|
Scene loaded = SceneManager.GetSceneByName(startSceneName);
|
|
if (loaded.IsValid())
|
|
SceneManager.SetActiveScene(loaded);
|
|
|
|
SceneManager.UnloadSceneAsync(mainScene); // 加载完成后卸载 Main
|
|
}
|
|
}
|