unity 5.3 以后加载场景
记录下官方建议的加载场景的方法:
StartCoroutine(LoadYourAsyncScene());
IEnumerator LoadYourAsyncScene()
{
// The Application loads the Scene in the background at the same time as the current Scene.
//This is particularly good for creating loading screens. You could also load the Scene by build //number.
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(scene_name);
//Wait until the last operation fully loads to return anything
while (!asyncLoad.isDone)
{
yield return null;
}
}
本文介绍如何使用Unity5.3引入的新API UnityEngine.SceneManagement来进行场景和关卡的管理。
介绍
经过5个版本的发展, Unity5.3放出了统一合理的场景管理API。 在之前的版本中场景即代码中关卡(Level)。 但是使用Unity过程中很快便发现用场景来定义不同的关卡不是必须的,所以就引入了 Scene API.
之前版本中的关卡在逻辑角度上指明了此关卡的构建索引号(即Build Settins中此关卡的序号), 场景则指明他们的包含该场景的资源名。 然而这两个概念都不是识别一个真正场景的可靠唯一ID。Build Settings中移动场景会改变他们的索引。同样的,不同文件夹下可能会有两个相同名字的场景。Unity5.3尝试结束这些混乱的逻辑。
5.3版本中新的场景API
Unity5.3之前使用构建索引和场景资源名都能指向一个场景。Unity5.3引入了一个新的Scene结构体来指明一个场景。它封装了一些场景常用方法和变量如buildIndex, name和path。
访问SceneManager类
要想使用新的场景API,C#代码需要引用SceneManagement命名空间
1 |
using UnityEngine.SceneManagement; |
这样就可以使用SceneManager类来替换Application中废弃的相关场景函数。
获取当前场景
Unity改用“场景”而不是“关卡”的一个主要原因是你可以同时加载多个场景。这样就破坏了“当前关卡”这个概念,它现在被替换成了“激活场景”。多数情况下,激活场景为最新加载的场景。我们可以任意时刻使用GetActiveScene获取激活场景。
1 |
// 5.3 |
检测激活场景是不是某个指定场景名:
1 |
if (SceneManager.GetActiveScene().name == "sceneName") |
也可以使用重载的==操作符来检测:
1 |
if (SceneManager.GetActiveScene() == scene) |
加载场景
和之前的版本一样,我们可以通过构建索引和场景名来加载场景,两个场景名一样但路径不同的话推荐使用路径来加载指定场景,否则Unity会加载第一个匹配名字的场景。
加载单个场景
默认是加载单个场景,加载新场景会卸载所有已加载的旧场景,销毁所有旧场景的GameObjects。
1 |
// 5.3 |
异步版本:
1 |
// 5.3 |
添加方式加载场景
我们也可以通过指定SceneManagement.LoadSceneMode.Additive以添加新场景的方式来加载新场景:
1 |
// 5.3 |
异步版本:
1 |
// 5.3 |
卸载场景
Unity5.3同时也提供UnloadScene方法来卸载指定场景:
1 |
// 5.3 |
该函数返回是否成功卸载场景。
总结
上面简单介绍了5.3版本中的场景管理API, 我们看到Unity中新的场景管理方式提供了一种更清晰可靠的动态加载管理的流程。如果你在用5.3版本还是尽快更新代码使用新API来管理场景吧。
unity 5.3 以后加载场景的更多相关文章
- unity之加载场景
游戏中的Loading分为:静态Loading和动态Loading. 简单形象的做个比喻: 静态Loading可能就是一张背景图.而动态的Loading就是在读取的同时有一个东西在“转圈”. 1.静态 ...
- Unity 异步加载场景
效果图如下: 今天一直在纠结如何加载场景,中间有加载画面和加载完毕的效果动画! A 场景到 B , 看见网上的做法都是 A –> C –> B. C场景主要用于异步加载B 和 播放一些 ...
- Unity加载场景、计时器、加载时不销毁某物体
异步加载场景,SceneManager.LoadSceneAsync(SceneName);需引用 using UnityEngine.SceneManagement;命名空间, Applicatio ...
- 【Unity】使用SceneManager加载/切换场景
一.直接切换 老版的(已弃用!): Application.LoadLevel(int index); // 参数是场景编号 Application.LoadLevel(string name); / ...
- Unity3d 动态加载场景物件与缓存池的使用
聊聊Unity3d动态加载场景物件那些事儿. 众所周知,在策划或美术设计完游戏场景地图后,一个场景中可能会存在成千上万个小的物件,比如石头,木箱子,油桶,栅栏等等等等,这些物件并不是游戏中的道具,仅仅 ...
- Unity3D基础学习 加载场景时隐藏物体,点击显示时显示物体
隐藏物体有两种方法,一是设置Meshrender为False,即不渲染物体. 二是设置物体为False,禁用物体,我使用的第二种. 当场景中需要隐藏的物体很多时,我们可以添加一个层来表示需要隐藏的物体 ...
- Unity3D_异步加载场景(进度条)
创建两个场景:现在的场景“NowScene”,要加载的场景“LoadScene”: “NowScene”如图所示,“LoadScene”任意: 创建脚本“AsyncLoadScene”,复制如下代码, ...
- cesium 学习(五) 加载场景模型
cesium 学习(五) 加载场景模型 一.前言 现在开始实际的看看效果,目前我所接触到基本上都是使用Cesium加载模型这个内容,以及在模型上进行操作.So,现在进行一些加载模型的学习,数据的话可以 ...
- AsyncOperation和SceneManager.LoadSceneAsync协同加载场景
这篇属于杂记,用于记录不甚理解的AsyncOperation AsyncOperation: //加载进度条 public Silder silder; 加载场景 public void LoginG ...
随机推荐
- jmeter接口测试实例7-关联
Jmeter实例7:关联(牛刀小试中登录.金币充值接口) 必须从网上下载这个插件放在lib的ext目录下才可以用,在登录接口添加此插件 Sign是变量名,其实就是下一步充值金币要取的值:路径是从哪里取 ...
- poj2385 Apple Catching(dp状态转移方程推导)
https://vjudge.net/problem/POJ-2385 猛刷简单dp的第一天的第一题. 状态:dp[i][j]表示第i秒移动j次所得的最大苹果数.关键要想到移动j次,根据j的奇偶判断人 ...
- 配置gitlab通过smtp发送邮件
1. 编辑/etc/gitlab/gitlab.rb文件(加到文件最后面就好了,或者通过搜索找到,新版已有这些配置,只不过都是被注释掉了).以QQ企业邮箱为例: gitlab_rails['smtp_ ...
- 我的第一个 react redux demo
最近学习react redux,先前看过了几本书和一些博客之类的,感觉还不错,比如<深入浅出react和redux>,<React全栈++Redux+Flux+webpack+Bab ...
- ElasticSearch 评分排序
背景 通过脚本改变评分 背景 近期有一个需求,需要对优惠券可用商品列表加个排序,只针对面值类的券不包括折扣券. 需求是这样的,假设有一张面值券 50 块钱,可用商品列表 A 100.B 40.C 10 ...
- windows10创建ftp服务器
1.创建用户 2.创建FTP服务 3.开通防火墙服务 建立端口21,20入站规则 4.访问测试
- C#缓存absoluteExpiration、slidingExpiration两个参数的疑惑
看了很多资料终于搞明白cache中absoluteExpiration,slidingExpiration这两个参数的含义. absoluteExpiration:用于设置绝对过期时间,它表示只要时间 ...
- 好用好玩的Python包
ujson 用C++实现的json解析器,速度飞快. prettytable 在控制台下使用表格展示数据 import prettytable t=prettytable.PrettyTable([' ...
- RSEG用法和汇编问号的涵义
RSEG是段选择指令,要想明白它的意思就要了解段的意思.段是程序代码或数据对象的存储单位.程序代码放到代码段,数据对象放到数据段.段分两种,一是绝对段,一是再定位段.绝对段在汇编语言中指定,在用L51 ...
- 深入理解Linux内存分配
深入理解Linux内存分配 为了写一个用户层程序,你也许会声明一个全局变量,这个全局变量可能是一个int类型也可能是一个数组,而声明之后你有可能会先初始化它,也有可能放在之后用到它的时候再初始化.除此 ...