using System.Collections; using UnityEngine; #if UNITY_5_3_OR_NEWER using UnityEngine.SceneManagement; #endif using FairyGUI; public class LevelManager : MonoBehaviour { static LevelManager _instance; public static LevelManager inst { get { if (_instance == null) { GameObject go = new GameObject("LevelManager"); DontDestroyOnLoad(go); _instance = go.AddComponent(); } return _instance; } } GComponent _cutSceneView; GComponent _mainView; public LevelManager() { } public void Init() { _cutSceneView = UIPackage.CreateObject("CutScene", "CutScene").asCom; _cutSceneView.SetSize(GRoot.inst.width, GRoot.inst.height); _cutSceneView.AddRelation(GRoot.inst, RelationType.Size); _mainView = UIPackage.CreateObject("CutScene", "Main").asCom; _mainView.SetSize(GRoot.inst.width, GRoot.inst.height); _mainView.AddRelation(GRoot.inst, RelationType.Size); _mainView.GetChild("n0").onClick.Add(() => { LoadLevel("scene1"); }); _mainView.GetChild("n1").onClick.Add(() => { LoadLevel("scene2"); }); } public void LoadLevel(string levelName) { StartCoroutine(DoLoad(levelName)); GRoot.inst.AddChild(_cutSceneView); } IEnumerator DoLoad(string sceneName) { GRoot.inst.AddChild(_cutSceneView); GProgressBar pb = _cutSceneView.GetChild("pb").asProgress; pb.value = 0; #if UNITY_5_3_OR_NEWER AsyncOperation op = SceneManager.LoadSceneAsync(sceneName); #else AsyncOperation op = Application.LoadLevelAsync(sceneName); #endif float startTime = Time.time; while (!op.isDone || pb.value != 100) { int value = (int)((Time.time - startTime) * 100f / 3f); if (value > 100) value = 100; pb.value = value; yield return null; } GRoot.inst.RemoveChild(_cutSceneView); GRoot.inst.AddChild(_mainView); } }