随笔 - 12  文章 - 0  评论 - 0  阅读 - 3440

场景叠加问题

/// <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   juaa  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示