Unity把新场景代码添加到构建并在加载场景时叠加场景

转自个人简书:2020.09.28完成

把场景添加到构建,模仿了前人的经验,然后自己去改进了一下,场景用的是数组存,数组的长度不增加没法在后面通过索引去增加场景,也没有Add方法,只能取巧转List然后添加完转会数组添加到构建数组。

        List<EditorBuildSettingsScene> bs = new List<EditorBuildSettingsScene>();
        bs = EditorBuildSettings.scenes.ToList<EditorBuildSettingsScene>();
        bs.Add(new EditorBuildSettingsScene(new GUID("db3600a44fc445546bfda4862ef917c9"), true));
        EditorBuildSettings.scenes = bs.ToArray();

使用上面的代码把场景添加到构建会出问题,你启动一次,就会添加一次!!!!
这个时候需要在已经存在要添加场景的时候不执行添加代码。每一个EditorBuildSettingsScene都有一个属性GUID,我们可以通过判断新加入的场景的guid和已存在场景的guid进行对比,来添加。

复制代码
 List<EditorBuildSettingsScene> bs = new List<EditorBuildSettingsScene>();
        bs = EditorBuildSettings.scenes.ToList<EditorBuildSettingsScene>();
        foreach (var item in bs)
        {
            if(item.guid.Equals(new GUID("db3600a44fc445546bfda4862ef917c9")))
            {
                return;
            }
        }
        bs.Add(new EditorBuildSettingsScene(new GUID("db3600a44fc445546bfda4862ef917c9"), true));
        EditorBuildSettings.scenes = bs.ToArray();
复制代码

把场景叠加的关键在于在调用SceneManager.LoadXXX()时LoadSceneMode这个参数,是一个枚举参数,可以选择简单加载场景和添加到已加载的场景。这个时候如果选用LoadSceneParameters这个参数去加载场景里面可以在加载场景的时候选择场景的力是2D力还是3D力。以下代码的功能就是给添加Index为1的新场景,场景选用3D物理力,把要加载的场景保存在变量里,在Update里就可以监听当前的加载进度了。

loadScene= SceneManager.LoadSceneAsync(1, new LoadSceneParameters(LoadSceneMode.Additive, LocalPhysicsMode.Physics3D));
private void Update()
    {
        if (!loadScene.isDone)
        {
            Debug.Log(a.progress);
        }
    }

 

posted @   过往云烟吧  阅读(646)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示