场景叠加问题

/// <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);
    }
}
posted on 2023-10-08 13:52  juaa  阅读(6)  评论(0编辑  收藏  举报