Unity | 以附加模式加载场景,实现多场景叠加及注意事项

news2025/8/16 18:33:53

1 多场景叠加

Unity 允许多场景叠加,这种叠加包括编辑模式及运行模式

新建两个简单的场景,SampleScene 和 AdditiveScene,设置不同的天空盒及平行光源颜色

SampleScene

AdditiveScene

2 编辑模式

2.1 添加场景

在编辑器中的场景资源右键选择 Open Scene Additive,或者直接拖拽场景资源到层级视图,都可以实现多场景编辑

2.2 层级结构

多场景叠加时,无论编辑模式还是运行模式,每个场景的内容将在 Hierarchy 窗口中单独显示在场景分隔栏下方,该分隔栏会显示场景的名称及其保存状态

场景叠加后,每个场景中的游戏对象都会出现在 Hierarchy 中,因此这些 GameObject 也会同时产生作用,比如 Main Camera 会造成多次渲染,Directional Light 会造成光照效果叠加等,因此一定要根据需求合理规划

2.3 场景特定设置

除了层级视图中的 GameObject,场景也会有一些特定的设置,比如天空盒、导航网格、光照贴图等

单场景烘焙

分别对 SampleScene 及 AdditiveScene 烘焙导航网格及光照贴图,然后将两个场景同时放入编辑器,可以看到导航网格数据及光照贴图会同时出现在场景中,即也会共同生效

「导航网格」

「光照贴图」

「活动场景」
但是可以看到天空盒依然是 SampleScene,并不会产生叠加,毕竟天空只有一个,如果想要使用 AdditiveScene 的天空盒,就需要设置其为当前活动场景,场景右键选择 Set Active Scene

可以看到天空盒更改为 AdditiveScene

多场景烘焙

除了使用已经烘焙好的数据外,Unity 还支持烘焙多场景的导航网格及光照贴图等,在编辑器中打开想要烘焙的场景,点击对应的烘焙按钮即可

「导航网格」
导航网格数据以单个资源(NavMesh.asset)的形式保存在与当前活动场景同名的目录内

该单个资源由所有参与烘焙的场景共享,即每个场景都会引用到该资源,所以单独打开场景时,依然可以看到完整的导航网格数据

SampleScene

AdditiveScene

「光照贴图」
光照贴图数据同样保存在与当前活动场景同名的目录内,但光照计算的输入是所有场景中的静态几何体和光源,因此阴影和 GI 光反弹将适用于所有场景

但是光照贴图和实时 GI 数据拆分为每个场景单独加载/卸载的数据,光照贴图和实时 GI 数据图集在场景之间拆分。这意味着,场景之间的光照贴图永远不会共享,卸载场景时可以放心卸载光照贴图。目前始终会共享光照探针数据,并会同时加载所有烘焙在一起的场景的所有光照探针

SampleScene

右边的图片

更多操作请参考官方中文文档:「https://docs.unity3d.com/cn/2021.2/Manual/MultiSceneEditing.html」

3 运行模式

运行时通过代码动态添加场景,最终表现效果和编辑模式一样,只是在编辑器中的操作需要用代码实现

3.1 添加及卸载场景

  • 同步加载场景

SceneManager.LoadScene("AdditiveScene", LoadSceneMode.Additive);
  • 异步加载场景

SceneManager.LoadSceneAsync("AdditiveScene", LoadSceneMode.Additive);
  • 异步卸载场景

SceneManager.UnloadSceneAsync("AdditiveScene");

运行时控制台会看到下面的警告

There are 2 audio listeners in the scene. Please ensure there is always exactly one audio listener in the scene.
There are 2 event systems in the scene. Please ensure there is always exactly one event system in the scene

这是因为场景中同时存在两个 AudioListener(挂在 Main Camera 对象上) 及 EventSystem,处理方式可以通过编辑器禁用或者删除,也可以通过代码动态控制

3.2 获取及设置场景

通过代码控制,一般也有两种方式,通过全局变量标记需要的 GameObject,或者动态获取指定场景,然后获取需要的 GameObject

  • 根据场景名获取场景

Scene scene = SceneManager.GetSceneByName("AdditiveScene");
  • 根据场景索引获取场景

Scene scene = SceneManager.GetSceneAt(0);
  • 获取当前活动场景

Scene scene = SceneManager.GetActiveScene();
  • 获取场景中的所有根游戏对象

List<GameObject> rootGameObjects = new List<GameObject>();
scene.GetRootGameObjects(rootGameObjects);
GameObject go = rootGameObjects.Find(o => o.name == "Main Camera");
  • 将游戏对象从当前场景移至新场景

SceneManager.MoveGameObjectToScene(go, scene);
  • 设置当前活动场景

SceneManager.SetActiveScene(scene);

Unity 中 new 或者 Instantiate 游戏对象时,默认的 parent 也是当前活动场景,Camera.main 指向的同样是当前活动场景

如果有需要,也可以手动更改天空盒及光照贴图等

  • 更改天空盒

RenderSettings.skybox = this.skyBox;
  • 更改光照贴图

LightmapData data = new LightmapData
{
    lightmapColor = this.lightmapColor
};
LightmapSettings.lightmaps = new LightmapData[1] { data };

更多手记,请扫码领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue draggable怎么用?怎么写一个拖拽的看板?

项目中需要像看板一样的可以拖动的任务队列 如果自己要手写的话会很麻烦&#xff0c;大佬当我没说。市面上目前有很多成熟的组件&#xff0c;本次介绍的这个就是一个轻量级的应用。 sortable.js中文文档 - itxst.com 常规的vue文件使用&#xff0c;可以参考上面的网站。 本次…

C语言习题练习10--指针

1.代码结果 #include <stdio.h> int main() {int arr[] {1,2,3,4,5};short *p (short*)arr;int i 0;for(i0; i<4; i){*(pi) 0;}for(i0; i<5; i){printf("%d ", arr[i]);}return 0; } 正常&#xff1a;0001--00 02--00 03--00 04--00 05 数组内部是倒…

[附源码]java毕业设计医院管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【转】数据库索引详细介绍

原文链接&#xff1a;https://blog.csdn.net/weixin_41948075/article/details/100009848 索引的定义 索引相当于一本书的目录&#xff0c;通过目录我们可以迅速定位书中要找的内容。MySQL中的索引也是一样&#xff0c;它是一种帮助MySQL高效获取数据的数据结构&#xff08;树…

Docker中php安装redis扩展

第一步&#xff1a;下载redis扩展压缩包 点击下载redis-5.3.7 &#xff0c;其他版本请访问&#xff1a;https://pecl.php.net/package/redis 第二步&#xff1a;加压压缩包 linux下解压&#xff1a;tar -zxvf redis-5.3.4.tgz windows下解压&#xff1a;自己学习 第三步&#…

暴雪网易事件大讨论:Web3游戏未来发展趋势

最近很多小伙伴们询问进群方式&#xff0c;希望能和NFT玩家&#xff0c;链游行家和数字艺术家们交流和学习&#xff0c;直接戳我【ID:cdf0822】就好&#xff01;文末也有联系方式&#x1f618; 11月17日下午&#xff0c;暴雪中国官方直接绕过现任代理商网易直接发布公告称&…

学生HTML个人网页作业作品 使用HTML+CSS+JavaScript个人介绍博客网站 web前端课程设计 web前端课程设计代码 web课程设计

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【考研数学】概率论与数理统计

这个知识点比较零碎。 文章目录1. 基础知识&#xff1a;连续型总体的最大似然估计法2. 解题技巧&#xff1a;随机变量函数的分布3. 解题技巧&#xff1a;几何数列求和4. 基础知识&#xff1a;切比雪夫不等式5. 基础知识&#xff1a;卡方分布&#xff0c;t分布&#xff0c;F分布…

如何深刻理解RPA?相关知识点看这里!

最近RPA大热&#xff0c;但对于RPA的理解大家都是模模糊糊的&#xff0c;那如何深刻理解呢&#xff1f;需要了解哪些知识点呢&#xff1f;这里我们简单来看看吧&#xff01; 一、RPA定义 RPA简单来说就是借助一些能够自动执行的脚本&#xff0c;以软件自动化方式实现一系列原来…

昔年邢台稻田不下万顷 国稻种芯·中国水稻节:河北谷子收获

昔年邢台稻田不下万顷 国稻种芯中国水稻节&#xff1a;河北谷子收获 新华社记者 骆学峰 摄 河北新闻网讯&#xff08;河北日报记者邢云 通讯员王聚芬&#xff09; 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯中国水稻节 中国三…

限制用户上传文件类型

在上传文件时&#xff0c;在表单元素中设置accept属性&#xff0c;这个属性只能与<input type"file">一起使用才生效。 accept的属性值是MIME值&#xff0c;MIME值对应的文件类型可以看这个链接 菜鸟编程-MIME类型l 例如&#xff0c;我只想要用户上传的文件是p…

【雷达干扰】基于matlab速度聚类欺骗式干扰仿真

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

微信预约课程小程序开发_分享微信预约课程小程序的好处

不管是素质拓展还是知识培训&#xff0c;教育机构的人一多&#xff0c;只靠人工的话&#xff0c;容易发生学生约课难&#xff0c;老师排课乱等问题。这时候&#xff0c;就要借助专业的约课系统小程序的帮助啦&#xff01;小程序需自带的营销功能还能帮忙拓客&#xff0c;这下招…

APIMapper 源码解析

git 地址&#xff1a;https://gitee.com/shaokang123/api-mapper 1、ApiMapper 是什么&#xff1f; 将API请求映射到接口上&#xff0c;返回封装的JavaBean数据。所以ApiMapper包括两部分功能&#xff0c; API请求接口映射 JSON数据转JavaBean对象 2、ApiMapper 中使用的设计…

IP-Guard管控应用程序运行有哪几种方式?

有五种方式可以管控应用程序运行&#xff1a; 1、通过进程名称来禁止 管理员直接添加应用程序的名称&#xff0c;如thunder.exe&#xff0c;此时策略是通过字符串匹配的&#xff0c;如果客户端修改了应用程序名称改为thunder123.exe&#xff0c;则策略就无法生效&#xff1b;要…

跟艾文学编程 《零基础入门学Python》Jupyter Notebook安装和使用

作者&#xff1a; 艾文&#xff0c;计算机硕士学位&#xff0c;企业内训讲师和金牌面试官&#xff0c;公司资深算法专家&#xff0c;现就职BAT一线大厂。 邮箱&#xff1a; 1121025745qq.com 内容&#xff1a;跟艾文学编程《零基础入门学Python​​​​​​​》 本节内容 ● Ju…

Kotlin基础入门 - 创建、兼容一个属于自己的Kotlin项目

这应该是我年前就想记录的一个基础入门&#xff0c;但是因为一直比较忙&#xff0c;当时只是做了一个备忘草稿&#xff0c;正文就拖到了现在&#xff0c;趁着有时间&#xff0c;赶紧来帮助一下新入行的朋友… 关于为何我把这篇Blog叫做 创建、兼容一个属于自己的Kotlin项目? 主…

[附源码]计算机毕业设计JAVA面向服装集群企业的个性化定制服务系统

[附源码]计算机毕业设计JAVA面向服装集群企业的个性化定制服务系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

C语言:数据的存储

数据的存储首先就要说到数据的类型&#xff0c;类型决定了看待内存空间的视角。C语言的数据类型分为内置类型和外置类型。 1.内置类型 &#xff08;1&#xff09;整型数组 char&#xff08;字符型&#xff09;、short&#xff08;短整型&#xff09;、int&#xff08;整型&am…

【网络原理】应用层协议概述

1. HTTP协议 Hyper Text Transfer Protocpl&#xff08;超文本传输协议&#xff09;。允许将超文本语言&#xff08;HTML&#xff09;从web服务器传送到客户端的浏览器上。HTTP的端口号是80&#xff0c;HTTPS的端口号是443。 HTTP0.9和1.0使用的是非持续链接&#xff0c;每次…