You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.1 KiB
C#

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<LevelManager>();
}
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);
}
}