/// <summary>
/// 场景加载
/// </summary>
/// <param name="loadleveName">待加载场景名字</param>
/// <param name="originlevelName">已有场景名字</param>
public void LoadLevel(string loadleveName, string originlevelName)
{
//用场景叠加的方式叠加一个Scence2场景
SceneManager.LoadScene(loadleveName, LoadSceneMode.Additive);
//激活待加载场景
ActiveScene(loadleveName);
//隐藏原场景中所有物体
HideGameobject(originlevelName, false);
}
private IEnumerator LoadAsyncScene(AsyncOperation asyncload)
{
// Wait until the last operation fully loads to return anything
while (!asyncload.isDone)
{
yield return null;
}
}
/// <summary>
/// 场景激活
/// </summary>
/// <param name="leveName">待激活场景名字</param>
public void ActiveScene(string leveName)
{
//获取待加载场景名字
Scene scene = SceneManager.GetSceneByName(leveName);
//检测待加载场景是否加载完成,若完成则处于激活状态
SceneManager.sceneLoaded += (Scene sc, LoadSceneMode loadSceneMode) =>
{
SceneManager.SetActiveScene(scene);
};
}
/// <summary>
/// 原场景中所有物体激活或隐藏
/// </summary>
/// <param name="leveName">待激活场景名字</param>
/// <param name="active">状态</param>
public void HideGameobject(string leveName, bool active)
{
List<GameObject> rootGameObjects = new List<GameObject>();//保存原场景的根节点物体
Scene scene1 = SceneManager.GetSceneByName(leveName);
scene1.GetRootGameObjects(rootGameObjects);
//隐藏原场景的所有物体
foreach (GameObject origin in rootGameObjects)
{
origin.SetActive(active);
}
}